diff --git a/app/src/main/java/com/futo/platformplayer/dialogs/PluginUpdateDialog.kt b/app/src/main/java/com/futo/platformplayer/dialogs/PluginUpdateDialog.kt index f9a64888..83985873 100644 --- a/app/src/main/java/com/futo/platformplayer/dialogs/PluginUpdateDialog.kt +++ b/app/src/main/java/com/futo/platformplayer/dialogs/PluginUpdateDialog.kt @@ -187,9 +187,16 @@ class PluginUpdateDialog : AlertDialog { val scope = StateApp.instance.scopeOrNull; scope?.launch(Dispatchers.IO) { try { + withContext(Dispatchers.Main) { + _textProgres.setText("Loading current script file..."); + } val client = ManagedHttpClient(); + client.setTimeout(10000); val script = StatePlugins.instance.getScript(_oldConfig.id) ?: ""; + withContext(Dispatchers.Main) { + _textProgres.setText("Requesting new script file..."); + } val newScript = client.get(_newConfig.absoluteScriptUrl)?.body?.string(); if(newScript.isNullOrEmpty()) throw IllegalStateException("No script found"); diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/bottombar/MenuBottomBarFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/bottombar/MenuBottomBarFragment.kt index 70951c30..43f16a97 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/bottombar/MenuBottomBarFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/bottombar/MenuBottomBarFragment.kt @@ -143,7 +143,7 @@ class MenuBottomBarFragment : MainActivityFragment() { val animations = arrayListOf() animations.add(ObjectAnimator.ofFloat(moreOverlayBackground, "alpha", 0.0f, 1.0f).setDuration(duration)) _bottomButtons.find { it.definition.id == 99 }?.let { - animations.add(ObjectAnimator.ofFloat(it, "alpha", 0.4f, 1.0f) + animations.add(ObjectAnimator.ofFloat(it, "alpha", 0.5f, 1.0f) .setDuration(duration)); } @@ -165,7 +165,7 @@ class MenuBottomBarFragment : MainActivityFragment() { .add(ObjectAnimator.ofFloat(moreOverlayBackground, "alpha", 1.0f, 0.0f) .setDuration(duration)) _bottomButtons.find { it.definition.id == 99 }?.let { - animations.add(ObjectAnimator.ofFloat(it, "alpha", 1.0f, 0.4f) + animations.add(ObjectAnimator.ofFloat(it, "alpha", 1.0f, 0.5f) .setDuration(duration)); } @@ -369,7 +369,7 @@ class MenuBottomBarFragment : MainActivityFragment() { this.alpha = 1f; } else { - this.alpha = 0.4f; + this.alpha = 0.5f; } _textButton = findViewById(R.id.text_button); @@ -389,7 +389,7 @@ class MenuBottomBarFragment : MainActivityFragment() { this.alpha = 1f; } else { - this.alpha = 0.4f; + this.alpha = 0.5f; } } } diff --git a/app/src/main/java/com/futo/platformplayer/states/StateLibrary.kt b/app/src/main/java/com/futo/platformplayer/states/StateLibrary.kt index ada16ee0..fa5cedf4 100644 --- a/app/src/main/java/com/futo/platformplayer/states/StateLibrary.kt +++ b/app/src/main/java/com/futo/platformplayer/states/StateLibrary.kt @@ -102,13 +102,15 @@ class StateLibrary { MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, StateLibrary.PROJECTION_MEDIA, "LOWER(" + MediaStore.Audio.Media.DISPLAY_NAME + ") LIKE ? ", arrayOf("%" + str.trim().lowercase() + "%"), null) ?: return listOf(); - cursor.moveToFirst(); - val list = mutableListOf() - while(!cursor.isAfterLast) { - list.add(StateLibrary.audioFromCursor(cursor)); - cursor.moveToNext(); + return cursor.use { + cursor.moveToFirst(); + val list = mutableListOf() + while(!cursor.isAfterLast) { + list.add(StateLibrary.audioFromCursor(cursor)); + cursor.moveToNext(); + } + return@use list; } - return list; } fun getAlbums(): List { @@ -155,21 +157,23 @@ class StateLibrary { query, null, MediaStore.Video.Media.DATE_ADDED + " DESC") ?: return EmptyPager(); - cursor.moveToFirst(); - val list = mutableListOf() - while(!cursor.isAfterLast && list.size < 10) { - list.add(videoFromCursor(cursor)); - cursor.moveToNext(); - } - - return AdhocPager({ - val list = mutableListOf() + return cursor.use { + cursor.moveToFirst(); + val list = mutableListOf() while(!cursor.isAfterLast && list.size < 10) { list.add(videoFromCursor(cursor)); cursor.moveToNext(); } - return@AdhocPager list; - }, list); + + return@use AdhocPager({ + val list = mutableListOf() + while(!cursor.isAfterLast && list.size < 10) { + list.add(videoFromCursor(cursor)); + cursor.moveToNext(); + } + return@AdhocPager list; + }, list); + } } fun getRecentVideos(buckets: List? = null, count: Int = 20): List { val videoPager = getVideos(buckets); @@ -194,26 +198,28 @@ class StateLibrary { ), null, null, null ) ?: return listOf(); - val buckets = mutableListOf(); - val list = HashSet(); - if (cur.moveToFirst()) { - var id: Long; - var bucket: String - do { - try { - id = cur.getLong(0); - bucket = cur.getStringOrNull(1) ?: continue; - if (!list.contains(id)) { - list.add(id); - buckets.add(Bucket(id, bucket)); + return cur.use { + val buckets = mutableListOf(); + val list = HashSet(); + if (cur.moveToFirst()) { + var id: Long; + var bucket: String + do { + try { + id = cur.getLong(0); + bucket = cur.getStringOrNull(1) ?: continue; + if (!list.contains(id)) { + list.add(id); + buckets.add(Bucket(id, bucket)); + } + } catch (ex: Throwable) { + Logger.e(TAG, "Failed to parse bucket due to ${ex.message}", ex); } - } catch (ex: Throwable) { - Logger.e(TAG, "Failed to parse bucket due to ${ex.message}", ex); - } - } while (cur.moveToNext()) + } while (cur.moveToNext()) + } + _cacheBucketNames = buckets.toList() + return@use _cacheBucketNames ?: listOf(); } - _cacheBucketNames = buckets.toList() - return _cacheBucketNames ?: listOf(); } catch(ex: Throwable) { Logger.e(TAG, "Buckets loading failed, returning empty"); @@ -286,10 +292,12 @@ class StateLibrary { val cursor = resolver?.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, StateLibrary.PROJECTION_MEDIA, "${MediaStore.Audio.Media._ID} = ?", arrayOf(id.toString()), null) ?: return null; - cursor.moveToFirst(); - if(cursor.isAfterLast) - return null; - return audioFromCursor(cursor); + return cursor.use { + cursor.moveToFirst(); + if(cursor.isAfterLast) + return@use null; + return@use audioFromCursor(cursor); + } } fun findAudioByName(name: String): IPlatformContentDetails? { val resolver = StateApp.instance.contextOrNull?.contentResolver; @@ -300,10 +308,12 @@ class StateLibrary { val cursor = resolver?.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, StateLibrary.PROJECTION_MEDIA, "${MediaStore.Audio.Media.DISPLAY_NAME} = ?", arrayOf(name), null) ?: return null; - cursor.moveToFirst(); - if(cursor.isAfterLast) - return null; - return audioFromCursor(cursor); + return cursor.use { + cursor.moveToFirst(); + if(cursor.isAfterLast) + return null; + return@use audioFromCursor(cursor); + } } fun getVideoTrack(url: String): IPlatformContentDetails? { val uri = Uri.parse(url); @@ -319,10 +329,12 @@ class StateLibrary { val cursor = resolver?.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, StateLibrary.PROJECTION_VIDEO, "${MediaStore.Video.Media._ID} = ?", arrayOf(id.toString()), null) ?: return null; - cursor.moveToFirst(); - if(cursor.isAfterLast) - return null; - return videoFromCursor(cursor); + return cursor.use { + cursor.moveToFirst(); + if(cursor.isAfterLast) + return@use null; + return@use videoFromCursor(cursor); + } } fun findVideoByName(name: String): IPlatformContentDetails? { val resolver = StateApp.instance.contextOrNull?.contentResolver; @@ -333,10 +345,12 @@ class StateLibrary { val cursor = resolver?.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, StateLibrary.PROJECTION_VIDEO, "${MediaStore.Video.Media.DISPLAY_NAME} = ?", arrayOf(name), null) ?: return null; - cursor.moveToFirst(); - if(cursor.isAfterLast) - return null; - return videoFromCursor(cursor); + return cursor.use { + cursor.moveToFirst(); + if(cursor.isAfterLast) + return@use null; + return@use videoFromCursor(cursor); + } } fun audioFromCursor(cursor: Cursor): IPlatformVideoDetails { @@ -484,12 +498,13 @@ class Artist { val cursor = resolver.query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, Artist.PROJECTION, "${MediaStore.Audio.Artists._ID} = ?", - arrayOf(id.toString()), null) ?: - return null; - cursor.moveToFirst(); - if(cursor.isAfterLast) - return null; - return Artist.fromCursor(cursor); + arrayOf(id.toString()), null) ?: return null; + return cursor.use { + cursor.moveToFirst(); + if(cursor.isAfterLast) + return@use null; + return@use Artist.fromCursor(cursor); + } } fun getArtists(ordering: ArtistOrdering = ArtistOrdering.Alphabethic, query: String? = null, args: Array? = null): List { val ordering = when(ordering) { @@ -503,13 +518,15 @@ class Artist { query, args, ordering) ?: return listOf(); - cursor.moveToFirst(); - val list = mutableListOf() - while(!cursor.isAfterLast) { - list.add(fromCursor(cursor)); - cursor.moveToNext(); + return cursor.use { + cursor.moveToFirst(); + val list = mutableListOf() + while(!cursor.isAfterLast) { + list.add(fromCursor(cursor)); + cursor.moveToNext(); + } + return@use list; } - return list; } fun getTracksPager(artistId: Long): List { @@ -521,13 +538,15 @@ class Artist { val cursor = resolver?.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, StateLibrary.PROJECTION_MEDIA, "${MediaStore.Audio.Media.ARTIST_ID} = ?", arrayOf(artistId.toString()), null) ?: return listOf(); - cursor.moveToFirst(); - val list = mutableListOf() - while(!cursor.isAfterLast) { - list.add(StateLibrary.audioFromCursor(cursor)); - cursor.moveToNext(); + return cursor.use { + cursor.moveToFirst(); + val list = mutableListOf() + while(!cursor.isAfterLast) { + list.add(StateLibrary.audioFromCursor(cursor)); + cursor.moveToNext(); + } + return@use list; } - return list; } } } @@ -583,13 +602,15 @@ class Album { val cursor = resolver?.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, StateLibrary.PROJECTION_MEDIA, "${MediaStore.Audio.Media.ALBUM_ID} = ?", arrayOf(albumId.toString()), null) ?: return listOf(); - cursor.moveToFirst(); - val list = mutableListOf() - while(!cursor.isAfterLast) { - list.add(StateLibrary.audioFromCursor(cursor)); - cursor.moveToNext(); + return cursor.use { + cursor.moveToFirst(); + val list = mutableListOf() + while(!cursor.isAfterLast) { + list.add(StateLibrary.audioFromCursor(cursor)); + cursor.moveToNext(); + } + return@use list; } - return list; } fun getAlbum(id: Long): Album? { val resolver = StateApp.instance.contextOrNull?.contentResolver; @@ -600,12 +621,13 @@ class Album { val cursor = resolver.query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, PROJECTION, "${MediaStore.Audio.Albums.ALBUM_ID} = ?", - arrayOf(id.toString()), null) ?: - return null; - cursor.moveToFirst(); - if(cursor.isAfterLast) - return null; - return fromCursor(cursor); + arrayOf(id.toString()), null) ?: return null; + return cursor.use { + cursor.moveToFirst(); + if(cursor.isAfterLast) + return@use null; + return@use fromCursor(cursor); + } } fun getAlbums(query: String? = null, args: Array? = null): List { val resolver = StateApp.instance.contextOrNull?.contentResolver; @@ -616,13 +638,15 @@ class Album { val cursor = resolver?.query( MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, PROJECTION, query, args, MediaStore.Audio.Albums.ALBUM + " ASC") ?: return listOf(); - cursor.moveToFirst(); - val list = mutableListOf() - while(!cursor.isAfterLast) { - list.add(fromCursor(cursor)); - cursor.moveToNext(); + return cursor.use { + cursor.moveToFirst(); + val list = mutableListOf() + while(!cursor.isAfterLast) { + list.add(fromCursor(cursor)); + cursor.moveToNext(); + } + return@use list; } - return list; } fun getArtistAlbums(artistId: Long): List { val resolver = StateApp.instance.contextOrNull?.contentResolver; @@ -633,13 +657,15 @@ class Album { val cursor = resolver?.query( MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, PROJECTION, "${MediaStore.Audio.Media.ARTIST_ID} = ?", arrayOf(artistId.toString()), MediaStore.Audio.Albums.ALBUM + " ASC") ?: return listOf(); - cursor.moveToFirst(); - val list = mutableListOf() - while(!cursor.isAfterLast) { - list.add(fromCursor(cursor)); - cursor.moveToNext(); + return cursor.use { + cursor.moveToFirst(); + val list = mutableListOf() + while(!cursor.isAfterLast) { + list.add(fromCursor(cursor)); + cursor.moveToNext(); + } + return@use list; } - return list; } } }