From 3dc6df9116436cf178f03e0ce0d7873f179324b0 Mon Sep 17 00:00:00 2001 From: Nite Date: Wed, 10 Feb 2021 19:57:09 +0100 Subject: [PATCH] Fixed colors and theme changing Other minor fixes --- build.gradle | 1 - dependencies.gradle | 2 -- ultrasonic/build.gradle | 1 - .../ultrasonic/fragment/SettingsFragment.java | 3 +++ .../ultrasonic/activity/NavigationActivity.kt | 20 +++++++++---------- .../moire/ultrasonic/di/ApplicationModule.kt | 2 ++ .../util/ThemeChangedEventDistributor.kt | 17 ++++++++++++++++ .../util/ThemeChangedEventListener.kt | 5 +++++ .../main/res/drawable/ic_star_full_dark.xml | 2 +- .../main/res/drawable/ic_star_full_light.xml | 2 +- .../main/res/drawable/ic_star_hollow_dark.xml | 2 +- .../res/drawable/ic_star_hollow_light.xml | 2 +- .../main/res/layout/navigation_activity.xml | 3 ++- ultrasonic/src/main/res/values/colors.xml | 5 +++++ ultrasonic/src/main/res/values/styles.xml | 4 +++- ultrasonic/src/main/res/values/themes.xml | 6 ++++++ 16 files changed, 57 insertions(+), 20 deletions(-) create mode 100644 ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ThemeChangedEventDistributor.kt create mode 100644 ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ThemeChangedEventListener.kt diff --git a/build.gradle b/build.gradle index a66ae852..8f012662 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,6 @@ buildscript { classpath gradlePlugins.ktlintGradle classpath gradlePlugins.detekt classpath gradlePlugins.jacoco - classpath gradlePlugins.navigationSafeArgs } } diff --git a/dependencies.gradle b/dependencies.gradle index e9c785e4..9533dff4 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -10,7 +10,6 @@ ext.versions = [ ktlintGradle : "9.2.1", detekt : "1.0.0.RC6-4", jacoco : "0.8.5", - navigationSafeArgs : "2.3.2", preferences : "1.1.1", androidSupport : "28.0.0", @@ -50,7 +49,6 @@ ext.gradlePlugins = [ ktlintGradle : "org.jlleitschuh.gradle:ktlint-gradle:$versions.ktlintGradle", detekt : "gradle.plugin.io.gitlab.arturbosch.detekt:detekt-gradle-plugin:$versions.detekt", jacoco : "org.jacoco:org.jacoco.core:$versions.jacoco", - navigationSafeArgs: "androidx.navigation:navigation-safe-args-gradle-plugin:$versions.navigationSafeArgs" ] ext.androidSupport = [ diff --git a/ultrasonic/build.gradle b/ultrasonic/build.gradle index c8b66bfe..74e6069d 100644 --- a/ultrasonic/build.gradle +++ b/ultrasonic/build.gradle @@ -2,7 +2,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'jacoco' -apply plugin: 'androidx.navigation.safeargs' apply from: "../gradle_scripts/code_quality.gradle" android { diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java index 2c0b758b..c93f78bc 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java @@ -86,6 +86,7 @@ public class SettingsFragment extends PreferenceFragmentCompat private final Lazy mediaPlayerControllerLazy = inject(MediaPlayerController.class); private final Lazy imageLoader = inject(ImageLoaderProvider.class); private final Lazy permissionUtil = inject(PermissionUtil.class); + private final Lazy themeChangedEventDistributor = inject(ThemeChangedEventDistributor.class); @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -195,6 +196,8 @@ public class SettingsFragment extends PreferenceFragmentCompat } else if (Constants.PREFERENCES_KEY_ID3_TAGS.equals(key)) { if (sharedPreferences.getBoolean(key, false)) showArtistPicture.setEnabled(true); else showArtistPicture.setEnabled(false); + } else if (Constants.PREFERENCES_KEY_THEME.equals(key)) { + themeChangedEventDistributor.getValue().RaiseThemeChangedEvent(); } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt index 99710080..89e8cc9f 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt @@ -42,6 +42,8 @@ import org.moire.ultrasonic.util.FileUtil import org.moire.ultrasonic.util.NowPlayingEventDistributor import org.moire.ultrasonic.util.NowPlayingEventListener import org.moire.ultrasonic.util.SubsonicUncaughtExceptionHandler +import org.moire.ultrasonic.util.ThemeChangedEventDistributor +import org.moire.ultrasonic.util.ThemeChangedEventListener import org.moire.ultrasonic.util.Util import timber.log.Timber @@ -54,18 +56,19 @@ class NavigationActivity : AppCompatActivity() { var bookmarksMenuItem: MenuItem? = null var sharesMenuItem: MenuItem? = null var podcastsMenuItem: MenuItem? = null - private var theme: String? = null var nowPlayingView: FragmentContainerView? = null var nowPlayingHidden = false private lateinit var appBarConfiguration : AppBarConfiguration private lateinit var nowPlayingEventListener : NowPlayingEventListener + private lateinit var themeChangedEventListener : ThemeChangedEventListener private val serverSettingsModel: ServerSettingsModel by viewModel() private val lifecycleSupport: MediaPlayerLifecycleSupport by inject() private val mediaPlayerController: MediaPlayerController by inject() private val imageLoaderProvider: ImageLoaderProvider by inject() private val nowPlayingEventDistributor: NowPlayingEventDistributor by inject() + private val themeChangedEventDistributor: ThemeChangedEventDistributor by inject() private var infoDialogDisplayed = false private var currentFragmentId: Int = 0 @@ -118,15 +121,6 @@ class NavigationActivity : AppCompatActivity() { // Hides menu items for Offline mode setMenuForServerSetting() - - // TODO: Maybe we can find a better place for theme change. Currently the change occurs when navigating between fragments - // but theoretically Settings could request a Navigation Activity recreate instantly when the theme setting changes - // Make sure to update theme if it has changed - if (theme == null) theme = Util.getTheme(this) - else if (theme != Util.getTheme(this)) { - theme = Util.getTheme(this) - recreate() - } } // Determine first run and migrate server settings to DB as early as possible @@ -154,7 +148,12 @@ class NavigationActivity : AppCompatActivity() { } } + themeChangedEventListener = object : ThemeChangedEventListener { + override fun onThemeChanged() { recreate() } + } + nowPlayingEventDistributor.subscribe(nowPlayingEventListener) + themeChangedEventDistributor.subscribe(themeChangedEventListener) } override fun onResume() { @@ -173,6 +172,7 @@ class NavigationActivity : AppCompatActivity() { super.onDestroy() Util.unregisterMediaButtonEventReceiver(this, false) nowPlayingEventDistributor.unsubscribe(nowPlayingEventListener) + themeChangedEventDistributor.unsubscribe(themeChangedEventListener) imageLoaderProvider.clearImageLoader() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/ApplicationModule.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/ApplicationModule.kt index fad1902a..f9207f1b 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/ApplicationModule.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/ApplicationModule.kt @@ -9,10 +9,12 @@ import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.subsonic.ImageLoaderProvider import org.moire.ultrasonic.util.NowPlayingEventDistributor import org.moire.ultrasonic.util.PermissionUtil +import org.moire.ultrasonic.util.ThemeChangedEventDistributor val applicationModule = module { single { ActiveServerProvider(get(), androidContext()) } single { ImageLoaderProvider(androidContext()) } single { PermissionUtil(androidContext()) } single { NowPlayingEventDistributor() } + single { ThemeChangedEventDistributor() } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ThemeChangedEventDistributor.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ThemeChangedEventDistributor.kt new file mode 100644 index 00000000..d5210d9b --- /dev/null +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ThemeChangedEventDistributor.kt @@ -0,0 +1,17 @@ +package org.moire.ultrasonic.util + +class ThemeChangedEventDistributor { + var eventListenerList: MutableList = listOf().toMutableList() + + fun subscribe(listener: ThemeChangedEventListener) { + eventListenerList.add(listener) + } + + fun unsubscribe(listener: ThemeChangedEventListener) { + eventListenerList.remove(listener) + } + + fun RaiseThemeChangedEvent() { + eventListenerList.forEach{ listener -> listener.onThemeChanged() } + } +} \ No newline at end of file diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ThemeChangedEventListener.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ThemeChangedEventListener.kt new file mode 100644 index 00000000..bc382f9b --- /dev/null +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ThemeChangedEventListener.kt @@ -0,0 +1,5 @@ +package org.moire.ultrasonic.util + +interface ThemeChangedEventListener { + fun onThemeChanged() +} \ No newline at end of file diff --git a/ultrasonic/src/main/res/drawable/ic_star_full_dark.xml b/ultrasonic/src/main/res/drawable/ic_star_full_dark.xml index f5dbd4b9..0a28f169 100644 --- a/ultrasonic/src/main/res/drawable/ic_star_full_dark.xml +++ b/ultrasonic/src/main/res/drawable/ic_star_full_dark.xml @@ -4,6 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/ultrasonic/src/main/res/drawable/ic_star_full_light.xml b/ultrasonic/src/main/res/drawable/ic_star_full_light.xml index dfaccb02..fcb189f9 100644 --- a/ultrasonic/src/main/res/drawable/ic_star_full_light.xml +++ b/ultrasonic/src/main/res/drawable/ic_star_full_light.xml @@ -4,6 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/ultrasonic/src/main/res/drawable/ic_star_hollow_dark.xml b/ultrasonic/src/main/res/drawable/ic_star_hollow_dark.xml index 1bc3a78b..8f1cd2d7 100644 --- a/ultrasonic/src/main/res/drawable/ic_star_hollow_dark.xml +++ b/ultrasonic/src/main/res/drawable/ic_star_hollow_dark.xml @@ -4,6 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/ultrasonic/src/main/res/drawable/ic_star_hollow_light.xml b/ultrasonic/src/main/res/drawable/ic_star_hollow_light.xml index 31898aa8..3c03ae8b 100644 --- a/ultrasonic/src/main/res/drawable/ic_star_hollow_light.xml +++ b/ultrasonic/src/main/res/drawable/ic_star_hollow_light.xml @@ -4,6 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/ultrasonic/src/main/res/layout/navigation_activity.xml b/ultrasonic/src/main/res/layout/navigation_activity.xml index 337d952d..f6206460 100644 --- a/ultrasonic/src/main/res/layout/navigation_activity.xml +++ b/ultrasonic/src/main/res/layout/navigation_activity.xml @@ -44,7 +44,8 @@ a:layout_height="match_parent" a:layout_gravity="start" a:fitsSystemWindows="true" + a:background="?attr/color_menu_background" a:theme="@style/ThemeOverlay.AppCompat.navTheme" app:headerLayout="@layout/navigation_header" - app:menu="@menu/navigation"/> + app:menu="@menu/navigation" /> \ No newline at end of file diff --git a/ultrasonic/src/main/res/values/colors.xml b/ultrasonic/src/main/res/values/colors.xml index 15cf3fb8..b89791a1 100644 --- a/ultrasonic/src/main/res/values/colors.xml +++ b/ultrasonic/src/main/res/values/colors.xml @@ -11,4 +11,9 @@ #fff3f3f3 #424242 #B1B1B1 + #fff3f3f3 + #ff000000 + #ff333333 + #ff111111 + #fff3f3f3 \ No newline at end of file diff --git a/ultrasonic/src/main/res/values/styles.xml b/ultrasonic/src/main/res/values/styles.xml index e5aa6d9f..e3687b97 100644 --- a/ultrasonic/src/main/res/values/styles.xml +++ b/ultrasonic/src/main/res/values/styles.xml @@ -26,7 +26,7 @@ @@ -79,6 +79,8 @@ + + diff --git a/ultrasonic/src/main/res/values/themes.xml b/ultrasonic/src/main/res/values/themes.xml index dba21cd6..3eafb254 100644 --- a/ultrasonic/src/main/res/values/themes.xml +++ b/ultrasonic/src/main/res/values/themes.xml @@ -5,6 +5,8 @@ true @color/background_color_dark @color/selected_color_dark + @color/selected_menu_dark + @color/selected_menu_background_black @drawable/ic_star_hollow_dark @drawable/ic_star_full_dark @drawable/ic_menu_about_dark @@ -65,6 +67,8 @@ true @color/background_color_dark @color/selected_color_dark + @color/selected_menu_dark + @color/selected_menu_background_dark @drawable/ic_star_hollow_dark @drawable/ic_star_full_dark @drawable/ic_menu_about_dark @@ -125,6 +129,8 @@ true @color/background_color_light @color/selected_color_light + @color/selected_menu_light + @color/selected_menu_background_light @drawable/ic_star_hollow_light @drawable/ic_star_full_light @drawable/ic_menu_about_light