diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java index 20597c9c1..2d6496a74 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java @@ -47,6 +47,7 @@ import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; +import com.google.android.material.color.DynamicColors; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.slf4j.Logger; @@ -394,10 +395,7 @@ public class SettingsActivity extends AbstractSettingsActivityV2 { amoled_black.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newVal) { - // Signal activities that the theme has changed - Intent intent = new Intent(); - intent.setAction(GBApplication.ACTION_THEME_CHANGE); - LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent); + sendThemeChangeIntent(); return true; } }); @@ -414,10 +412,19 @@ public class SettingsActivity extends AbstractSettingsActivityV2 { else amoled_black.setEnabled(true); } - // Signal activities that the theme has changed - Intent intent = new Intent(); - intent.setAction(GBApplication.ACTION_THEME_CHANGE); - LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent); + // Warn user if dynamic colors are not available + if (val.equals(requireContext().getString(R.string.pref_theme_value_dynamic)) && !DynamicColors.isDynamicColorAvailable()) { + new MaterialAlertDialogBuilder(requireContext()) + .setTitle(R.string.warning) + .setMessage(R.string.pref_theme_dynamic_colors_not_available_warning) + .setIcon(R.drawable.ic_warning) + .setPositiveButton(R.string.ok, (dialog, whichButton) -> { + sendThemeChangeIntent(); + }) + .show(); + } else { + sendThemeChangeIntent(); + } return true; } }); @@ -562,5 +569,14 @@ public class SettingsActivity extends AbstractSettingsActivityV2 { .putString("location_longitude", longitude) .apply(); } + + /** + * Signal running activities that the theme has changed + */ + private void sendThemeChangeIntent() { + Intent intent = new Intent(); + intent.setAction(GBApplication.ACTION_THEME_CHANGE); + LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent); + } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 21738ba0f..2e6a11bc8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2227,4 +2227,5 @@ Trigger a full sync of all activity data Full sync This will trigger a full sync of all activity data from the device. It may take a few minutes to complete. + Dynamic colors are not available on your device, only Android 12+ supports this functionality. Gadgetbridge will use the default Material 3 colors.