diff --git a/app/src/main/java/org/tasks/injection/ActivityModule.kt b/app/src/main/java/org/tasks/injection/ActivityModule.kt index d48ba9f40..b59e29ca7 100644 --- a/app/src/main/java/org/tasks/injection/ActivityModule.kt +++ b/app/src/main/java/org/tasks/injection/ActivityModule.kt @@ -1,6 +1,8 @@ package org.tasks.injection import android.app.Activity +import android.util.TypedValue +import com.google.android.material.color.DynamicColors import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -23,6 +25,19 @@ class ActivityModule { @Provides @ActivityScoped - fun getThemeColor(colorProvider: ColorProvider, preferences: Preferences): ThemeColor - = colorProvider.getThemeColor(preferences.defaultThemeColor, true) -} \ No newline at end of file + fun getThemeColor( + colorProvider: ColorProvider, + preferences: Preferences, + activity: Activity + ): ThemeColor { + return if (preferences.dynamicColor && DynamicColors.isDynamicColorAvailable()) { + val context = DynamicColors.wrapContextIfAvailable(activity) + val typedValue = TypedValue() + context.theme.resolveAttribute(com.google.android.material.R.attr.colorPrimary, typedValue, true) + val dynamicColor = typedValue.data + ThemeColor(context, dynamicColor) + } else { + colorProvider.getThemeColor(preferences.defaultThemeColor, true) + } + } +} diff --git a/app/src/main/java/org/tasks/preferences/Preferences.kt b/app/src/main/java/org/tasks/preferences/Preferences.kt index c02fe2395..1377bbd22 100644 --- a/app/src/main/java/org/tasks/preferences/Preferences.kt +++ b/app/src/main/java/org/tasks/preferences/Preferences.kt @@ -549,6 +549,9 @@ class Preferences @JvmOverloads constructor( val defaultThemeColor: Int get() = getInt(R.string.p_theme_color, BLUE_500) + val dynamicColor: Boolean + get() = getBoolean(R.string.p_dynamic_color, false) + val markdown: Boolean get() = getBoolean(R.string.p_markdown, false) diff --git a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt index 15cbc8413..fec1f5511 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt @@ -11,6 +11,8 @@ import androidx.appcompat.app.AppCompatDelegate import androidx.core.os.LocaleListCompat import androidx.lifecycle.lifecycleScope import androidx.preference.Preference +import androidx.preference.SwitchPreferenceCompat +import com.google.android.material.color.DynamicColors import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch import org.tasks.LocalBroadcastManager @@ -89,6 +91,14 @@ class LookAndFeel : InjectingPreferenceFragment() { } openUrl(R.string.translations, R.string.url_translations) + val themeColor = findPreference(R.string.p_theme_color) + val dynamicColor = findPreference(R.string.p_dynamic_color) as SwitchPreferenceCompat + themeColor.isVisible = !dynamicColor.isChecked + dynamicColor.setOnPreferenceChangeListener { _, newValue -> + themeColor.isVisible = !(newValue as Boolean) + true + } + requires(DynamicColors.isDynamicColorAvailable(), R.string.p_dynamic_color) } override fun onResume() { @@ -101,6 +111,19 @@ class LookAndFeel : InjectingPreferenceFragment() { REQUEST_COLOR_PICKER ) updateLauncherPreference() + + if (DynamicColors.isDynamicColorAvailable()) { + (findPreference(R.string.p_dynamic_color) as SwitchPreferenceCompat).apply { + if (inventory.hasPro) { + summary = null + isEnabled = true + } else { + summary = getString(R.string.requires_pro_subscription) + isEnabled = false + isChecked = false + } + } + } } private fun updateLauncherPreference() { diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index 161f7505d..7dd9c763c 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -436,4 +436,5 @@ last_sync_time microsoft_sync multiline_title + dynamic_color diff --git a/app/src/main/res/xml/preferences_look_and_feel.xml b/app/src/main/res/xml/preferences_look_and_feel.xml index 4d68cd6be..d94c22d4a 100644 --- a/app/src/main/res/xml/preferences_look_and_feel.xml +++ b/app/src/main/res/xml/preferences_look_and_feel.xml @@ -7,6 +7,11 @@ android:key="@string/p_theme" android:title="@string/theme" /> + +