diff --git a/app/src/main/java/io/heckel/ntfy/app/Application.kt b/app/src/main/java/io/heckel/ntfy/app/Application.kt index d07c7cbe..657e729f 100644 --- a/app/src/main/java/io/heckel/ntfy/app/Application.kt +++ b/app/src/main/java/io/heckel/ntfy/app/Application.kt @@ -15,7 +15,9 @@ class Application : Application() { } override fun onCreate() { - DynamicColors.applyToActivitiesIfAvailable(this) + if (repository.getDynamicColorsEnabled()) { + DynamicColors.applyToActivitiesIfAvailable(this) + } super.onCreate() } } diff --git a/app/src/main/java/io/heckel/ntfy/backup/Backuper.kt b/app/src/main/java/io/heckel/ntfy/backup/Backuper.kt index a939fbe0..a2027b13 100644 --- a/app/src/main/java/io/heckel/ntfy/backup/Backuper.kt +++ b/app/src/main/java/io/heckel/ntfy/backup/Backuper.kt @@ -68,6 +68,9 @@ class Backuper(val context: Context) { if (settings.darkMode != null) { repository.setDarkMode(settings.darkMode) } + if (settings.dynamicColors != null) { + repository.setDynamicColorsEnabled(settings.dynamicColors) + } if (settings.connectionProtocol != null) { repository.setConnectionProtocol(settings.connectionProtocol) } @@ -234,6 +237,7 @@ class Backuper(val context: Context) { autoDownloadMaxSize = repository.getAutoDownloadMaxSize(), autoDeleteSeconds = repository.getAutoDeleteSeconds(), darkMode = repository.getDarkMode(), + dynamicColors = repository.getDynamicColorsEnabled(), connectionProtocol = repository.getConnectionProtocol(), broadcastEnabled = repository.getBroadcastEnabled(), recordLogs = repository.getRecordLogs(), @@ -357,6 +361,7 @@ data class Settings( val autoDownloadMaxSize: Long?, val autoDeleteSeconds: Long?, val darkMode: Int?, + val dynamicColors: Boolean?, val connectionProtocol: String?, val broadcastEnabled: Boolean?, val recordLogs: Boolean?, diff --git a/app/src/main/java/io/heckel/ntfy/db/Repository.kt b/app/src/main/java/io/heckel/ntfy/db/Repository.kt index 15f76db7..f4d8c931 100644 --- a/app/src/main/java/io/heckel/ntfy/db/Repository.kt +++ b/app/src/main/java/io/heckel/ntfy/db/Repository.kt @@ -272,6 +272,16 @@ class Repository(private val sharedPrefs: SharedPreferences, private val databas return sharedPrefs.getInt(SHARED_PREFS_DARK_MODE, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) } + fun setDynamicColorsEnabled(enabled: Boolean) { + sharedPrefs.edit() + .putBoolean(SHARED_PREFS_DYNAMIC_COLORS, enabled) + .apply() + } + + fun getDynamicColorsEnabled(): Boolean { + return sharedPrefs.getBoolean(SHARED_PREFS_DYNAMIC_COLORS, false) + } + fun setConnectionProtocol(connectionProtocol: String) { sharedPrefs.edit() .putString(SHARED_PREFS_CONNECTION_PROTOCOL, connectionProtocol) @@ -496,6 +506,7 @@ class Repository(private val sharedPrefs: SharedPreferences, private val databas const val SHARED_PREFS_AUTO_DELETE_SECONDS = "AutoDelete" const val SHARED_PREFS_CONNECTION_PROTOCOL = "ConnectionProtocol" const val SHARED_PREFS_DARK_MODE = "DarkMode" + const val SHARED_PREFS_DYNAMIC_COLORS = "DynamicColors" const val SHARED_PREFS_BROADCAST_ENABLED = "BroadcastEnabled" const val SHARED_PREFS_UNIFIEDPUSH_ENABLED = "UnifiedPushEnabled" const val SHARED_PREFS_INSISTENT_MAX_PRIORITY_ENABLED = "InsistentMaxPriority" diff --git a/app/src/main/java/io/heckel/ntfy/ui/SettingsActivity.kt b/app/src/main/java/io/heckel/ntfy/ui/SettingsActivity.kt index 65c9bff1..5fa223ab 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/SettingsActivity.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/SettingsActivity.kt @@ -327,6 +327,29 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere } } + // Dynamic colors + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + val dynamicColorsEnabledPrefId = context?.getString(R.string.settings_general_dynamic_colors_key) ?: return + val dynamicColorsEnabled: SwitchPreferenceCompat? = findPreference(dynamicColorsEnabledPrefId) + dynamicColorsEnabled?.isChecked = repository.getDynamicColorsEnabled() + dynamicColorsEnabled?.preferenceDataStore = object : PreferenceDataStore() { + override fun putBoolean(key: String?, value: Boolean) { + repository.setDynamicColorsEnabled(value) + } + override fun getBoolean(key: String?, defValue: Boolean): Boolean { + return repository.getDynamicColorsEnabled() + } + } + dynamicColorsEnabled?.summaryProvider = Preference.SummaryProvider { pref -> + if (pref.isChecked) { + getString(R.string.settings_general_dynamic_colors_summary_enabled) + } else { + getString(R.string.settings_general_dynamic_colors_summary_disabled) + } + } + dynamicColorsEnabled?.isVisible = true + } + // Default Base URL val appBaseUrl = getString(R.string.app_base_url) val defaultBaseUrlPrefId = context?.getString(R.string.settings_general_default_base_url_key) ?: return diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 49f9082b..5bfb953b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -310,6 +310,9 @@ Use system default Light mode Dark mode + Dynamic colors + Using the dynamic system colors + Using the ntfy theme colors Backup & Restore Back up to file Export config, notifications, and users diff --git a/app/src/main/res/values/values.xml b/app/src/main/res/values/values.xml index b6f5f7f5..77de8393 100644 --- a/app/src/main/res/values/values.xml +++ b/app/src/main/res/values/values.xml @@ -22,6 +22,7 @@ DefaultBaseURL ManageUsers DarkMode + DynamicColors Backup Restore BroadcastEnabled diff --git a/app/src/main/res/xml/main_preferences.xml b/app/src/main/res/xml/main_preferences.xml index 156e18ba..ff778de6 100644 --- a/app/src/main/res/xml/main_preferences.xml +++ b/app/src/main/res/xml/main_preferences.xml @@ -51,6 +51,10 @@ app:entries="@array/settings_general_dark_mode_entries" app:entryValues="@array/settings_general_dark_mode_values" app:defaultValue="-1"/> +