[Android] Bump android gradle plugin and kotlin versions

Nicolas Pomepuy git at videolan.org
Thu Apr 24 06:44:39 UTC 2025


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Fri Mar 21 08:51:34 2025 +0100| [119d7632f63fc67f1bd3ac092b49b179c8845ee4] | committer: Nicolas Pomepuy

Bump android gradle plugin and kotlin versions

> https://code.videolan.org/videolan/vlc-android/commit/119d7632f63fc67f1bd3ac092b49b179c8845ee4
---

 .../src/org/videolan/vlc/gui/DebugLogActivity.kt   |  2 +-
 .../src/org/videolan/vlc/util/FilterDelegate.kt    | 37 +++++++++++-----------
 .../src/org/videolan/vlc/viewmodels/BaseModel.kt   |  2 +-
 build.gradle                                       |  4 +--
 buildsystem/compile.sh                             |  4 +--
 buildsystem/gitlab/.gitlab-ci.yml                  |  2 +-
 6 files changed, 26 insertions(+), 25 deletions(-)

diff --git a/application/vlc-android/src/org/videolan/vlc/gui/DebugLogActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/DebugLogActivity.kt
index 4d59c31475..0aeaaa37f0 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/DebugLogActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/DebugLogActivity.kt
@@ -157,7 +157,7 @@ class DebugLogActivity : FragmentActivity(), DebugLogService.Client.Callback {
                 share(File(path))
             }
         } else {
-            UiTools.snacker(window.decorView.findViewById(android.R.id.content), R.string.dump_logcat_failure)
+            UiTools.snacker(this, R.string.dump_logcat_failure)
         }
     }
 
diff --git a/application/vlc-android/src/org/videolan/vlc/util/FilterDelegate.kt b/application/vlc-android/src/org/videolan/vlc/util/FilterDelegate.kt
index 8b173c9735..99a5e2f71f 100644
--- a/application/vlc-android/src/org/videolan/vlc/util/FilterDelegate.kt
+++ b/application/vlc-android/src/org/videolan/vlc/util/FilterDelegate.kt
@@ -1,15 +1,15 @@
 package org.videolan.vlc.util
 
-import androidx.lifecycle.MutableLiveData
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.withContext
 import org.videolan.medialibrary.interfaces.media.MediaWrapper
 import org.videolan.medialibrary.media.MediaLibraryItem
 import org.videolan.resources.AppContextProvider
+import org.videolan.tools.livedata.LiveDataset
 import org.videolan.vlc.media.MediaUtils
 import java.util.Locale
 
-open class FilterDelegate<T : MediaLibraryItem>(val dataset: MutableLiveData<out List<T>>) {
+open class FilterDelegate<T : MediaLibraryItem>(val dataset: LiveDataset<T>) {
     var sourceSet: List<T>? = null
 
     protected fun initSource() : List<T>? {
@@ -21,13 +21,14 @@ open class FilterDelegate<T : MediaLibraryItem>(val dataset: MutableLiveData<out
 
     protected open suspend fun filteringJob(charSequence: CharSequence?) : MutableList<T>? {
         if (charSequence !== null) initSource()?.let {
-            return withContext(Dispatchers.Default) { mutableListOf<T>().apply {
-                val queryStrings = charSequence.trim().toString().split(" ")
-                for (item in it) for (query in queryStrings)
-                    if (item.title.contains(query, true)) {
-                        this.add(item)
-                        break
-                    }
+            return withContext(Dispatchers.Default) {
+                mutableListOf<T>().apply {
+                    val queryStrings = charSequence.trim().toString().split(" ")
+                    for (item in it) for (query in queryStrings)
+                        if (item.title.contains(query, true)) {
+                            this.add(item)
+                            break
+                        }
                 }
             }
         }
@@ -36,17 +37,17 @@ open class FilterDelegate<T : MediaLibraryItem>(val dataset: MutableLiveData<out
 
     private fun publish(list: MutableList<T>?) {
         sourceSet?.let {
-            if (list !== null)
-                dataset.value = list
-            else {
+            list?.let {
                 dataset.value = it
+            } ?: run {
+                dataset.value = it.toMutableList()
                 sourceSet = null
             }
         }
     }
 }
 
-class PlaylistFilterDelegate(dataset: MutableLiveData<out List<MediaWrapper>>) : FilterDelegate<MediaWrapper>(dataset) {
+class PlaylistFilterDelegate(dataset: LiveDataset<MediaWrapper>) : FilterDelegate<MediaWrapper>(dataset) {
 
     override suspend fun filteringJob(charSequence: CharSequence?): MutableList<MediaWrapper>? {
         if (charSequence !== null) initSource()?.let { list ->
@@ -61,11 +62,11 @@ class PlaylistFilterDelegate(dataset: MutableLiveData<out List<MediaWrapper>>) :
                     val genre = MediaUtils.getMediaGenre(AppContextProvider.appContext, media).lowercase(Locale.getDefault())
                     for (queryString in queryStrings) {
                         if (title.contains(queryString) ||
-                                location.contains(queryString) ||
-                                artist.contains(queryString) ||
-                                albumArtist.contains(queryString) ||
-                                album.contains(queryString) ||
-                                genre.contains(queryString)) {
+                            location.contains(queryString) ||
+                            artist.contains(queryString) ||
+                            albumArtist.contains(queryString) ||
+                            album.contains(queryString) ||
+                            genre.contains(queryString)) {
                             this.add(media)
                             break
                         }
diff --git a/application/vlc-android/src/org/videolan/vlc/viewmodels/BaseModel.kt b/application/vlc-android/src/org/videolan/vlc/viewmodels/BaseModel.kt
index 8acb78d443..702bfce9b4 100644
--- a/application/vlc-android/src/org/videolan/vlc/viewmodels/BaseModel.kt
+++ b/application/vlc-android/src/org/videolan/vlc/viewmodels/BaseModel.kt
@@ -40,7 +40,7 @@ private const val TAG = "VLC/BaseModel"
 
 abstract class BaseModel<T : MediaLibraryItem>(context: Context, val coroutineContextProvider: CoroutineContextProvider) : SortableModel(context) {
 
-    private val filter by lazy(LazyThreadSafetyMode.NONE) { FilterDelegate(dataset) }
+    private val filter by lazy(LazyThreadSafetyMode.NONE) { FilterDelegate<T>(dataset) }
 
     val dataset = LiveDataset<T>()
     open val loading = MutableLiveData<Boolean>().apply { value = false }
diff --git a/build.gradle b/build.gradle
index 65f5e7485a..89b9d8d180 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,7 +1,7 @@
 // Top-level build file where you can add configuration options common to all sub-projects/modules.
 buildscript {
-    ext.android_plugin_version = '8.5.0'
-    ext.kotlin_version = '1.9.22'
+    ext.android_plugin_version = '8.9.1'
+    ext.kotlin_version = '2.1.0'
     ext.kotlinx_version = '1.7.1'
     repositories {
         flatDir dirs: "gradle/plugins"
diff --git a/buildsystem/compile.sh b/buildsystem/compile.sh
index 862110d8c6..84ff66c576 100755
--- a/buildsystem/compile.sh
+++ b/buildsystem/compile.sh
@@ -259,8 +259,8 @@ fi
 
 if [ ! -d "gradle/wrapper" ]; then
     diagnostic "Downloading gradle"
-    GRADLE_VERSION=8.7
-    GRADLE_SHA256=544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d
+    GRADLE_VERSION=8.13
+    GRADLE_SHA256=20f1b1176237254a6fc204d8434196fa11a4cfb387567519c61556e8710aed78
     GRADLE_URL=https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip
     wget ${GRADLE_URL} 2>/dev/null || curl -O ${GRADLE_URL} || fail "gradle: download failed"
     echo $GRADLE_SHA256 gradle-${GRADLE_VERSION}-bin.zip | sha256sum -c || fail "gradle: hash mismatch"
diff --git a/buildsystem/gitlab/.gitlab-ci.yml b/buildsystem/gitlab/.gitlab-ci.yml
index d37a889263..c9ca209362 100644
--- a/buildsystem/gitlab/.gitlab-ci.yml
+++ b/buildsystem/gitlab/.gitlab-ci.yml
@@ -1,7 +1,7 @@
 cache:
     paths:
         - .gradle/
-        - gradle-8.7/
+        - gradle-8.13/
         - gradle/
         - gradlew
 



More information about the Android mailing list