diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0e9c5b12..8a1ad874 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,15 +9,15 @@ ktlint = "0.43.2" ktlintGradle = "11.0.0" detekt = "1.22.0" preferences = "1.2.0" -media3 = "f3e450e783" +media3 = "1.0.0-rc02" androidSupport = "1.5.0" -materialDesign = "1.7.0" +materialDesign = "1.8.0" constraintLayout = "2.1.4" multidex = "2.0.1" room = "2.5.0" kotlin = "1.7.22" -kotlinxCoroutines = "1.6.4-native-mt" +kotlinxCoroutines = "1.6.4" kotlinxGuava = "1.6.4" viewModelKtx = "2.5.1" swipeRefresh = "1.1.0" @@ -25,12 +25,12 @@ swipeRefresh = "1.1.0" retrofit = "2.9.0" jackson = "2.14.1" okhttp = "4.10.0" -koin = "3.3.2" +koin = "3.3.3" picasso = "2.8" junit4 = "4.13.2" junit5 = "5.9.2" -mockito = "5.0.0" +mockito = "5.1.1" mockitoKotlin = "4.1.0" kluent = "1.72" apacheCodecs = "1.15" @@ -64,11 +64,11 @@ navigationUiKtx = { module = "androidx.navigation:navigation-ui-ktx", ve navigationFeature = { module = "androidx.navigation:navigation-dynamic-features-fragment", version.ref = "navigation" } navigationSafeArgs = { module = "androidx.navigation:navigation-safe-args-gradle-plugin", version.ref = "navigation"} preferences = { module = "androidx.preference:preference", version.ref = "preferences" } -media3common = { module = "com.github.androidx.media:media3-common", version.ref = "media3" } -media3exoplayer = { module = "com.github.androidx.media:media3-exoplayer", version.ref = "media3" } -media3datasource = { module = "com.github.androidx.media:media3-datasource", version.ref = "media3" } -media3okhttp = { module = "com.github.androidx.media:media3-datasource-okhttp", version.ref = "media3" } -media3session = { module = "com.github.androidx.media:media3-session", version.ref = "media3" } +media3common = { module = "androidx.media3:media3-common", version.ref = "media3" } +media3exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "media3" } +media3datasource = { module = "androidx.media3:media3-datasource", version.ref = "media3" } +media3okhttp = { module = "androidx.media3:media3-datasource-okhttp", version.ref = "media3" } +media3session = { module = "androidx.media3:media3-session", version.ref = "media3" } swipeRefresh = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "swipeRefresh" } kotlinStdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" } kotlinReflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" } diff --git a/ultrasonic/lint-baseline.xml b/ultrasonic/lint-baseline.xml index 0f0ec704..2458dc9d 100644 --- a/ultrasonic/lint-baseline.xml +++ b/ultrasonic/lint-baseline.xml @@ -1,5 +1,27 @@ - + + + + + + + + + @@ -16,14 +38,14 @@ id="TrustAllX509TrustManager" message="`checkClientTrusted` is empty, which could cause insecure network traffic due to trusting arbitrary TLS/SSL certificates presented by peers"> + file="../core/subsonic-api/build/libs/subsonic-api.jar"/> + file="../core/subsonic-api/build/libs/subsonic-api.jar"/> : MultiListFragment() { + private var rxBusSubscription: CompositeDisposable = CompositeDisposable() + /** * Whether to show the folder selector */ @@ -61,7 +65,7 @@ abstract class EntryListFragment : MultiListFragment() { // because it can't be initialized from inside the callback serverSettingsModel.toString() - RxBus.musicFolderChangedEventObservable.subscribe { + rxBusSubscription += RxBus.musicFolderChangedEventObservable.subscribe { if (!listModel.isOffline()) { val currentSetting = listModel.activeServer currentSetting.musicFolderId = it.id @@ -75,6 +79,11 @@ abstract class EntryListFragment : MultiListFragment() { ) } + override fun onDestroyView() { + super.onDestroyView() + rxBusSubscription.dispose() + } + /** * What to do when the list has changed */ diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/CustomNotificationProvider.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/CustomNotificationProvider.kt index 10fa2094..65674111 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/CustomNotificationProvider.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/playback/CustomNotificationProvider.kt @@ -16,6 +16,7 @@ import androidx.media3.session.DefaultMediaNotificationProvider import androidx.media3.session.MediaNotification import androidx.media3.session.MediaSession import androidx.media3.session.SessionCommand +import com.google.common.collect.ImmutableList import org.koin.core.component.KoinComponent import org.koin.core.component.inject import org.moire.ultrasonic.R @@ -36,7 +37,7 @@ class CustomNotificationProvider(ctx: Context) : override fun addNotificationActions( mediaSession: MediaSession, - mediaButtons: MutableList, + mediaButtons: ImmutableList, builder: NotificationCompat.Builder, actionFactory: MediaNotification.ActionFactory ): IntArray { @@ -73,18 +74,19 @@ class CustomNotificationProvider(ctx: Context) : } return super.addNotificationActions( mediaSession, - mediaButtons + tmp, + ImmutableList.copyOf((mediaButtons + tmp)), builder, actionFactory ) } override fun getMediaButtons( + session: MediaSession, playerCommands: Player.Commands, - customLayout: MutableList, + customLayout: ImmutableList, playWhenReady: Boolean - ): MutableList { - val commands = super.getMediaButtons(playerCommands, customLayout, playWhenReady) + ): ImmutableList { + val commands = super.getMediaButtons(session, playerCommands, customLayout, playWhenReady) commands.forEachIndexed { index, command -> command.extras.putInt(COMMAND_KEY_COMPACT_VIEW_INDEX, index) diff --git a/ultrasonic/src/main/res/layout/search.xml b/ultrasonic/src/main/res/layout/search.xml index 87d5ab49..42e0e492 100644 --- a/ultrasonic/src/main/res/layout/search.xml +++ b/ultrasonic/src/main/res/layout/search.xml @@ -2,8 +2,19 @@ + + + + + + + \ No newline at end of file