diff --git a/src/keepass2android-app/Resources/values-v31/styles.xml b/src/keepass2android-app/Resources/values-v31/styles.xml
new file mode 100644
index 000000000..8962a0e76
--- /dev/null
+++ b/src/keepass2android-app/Resources/values-v31/styles.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/keepass2android-app/Resources/values/config.xml b/src/keepass2android-app/Resources/values/config.xml
index b84fee880..db42187c2 100644
--- a/src/keepass2android-app/Resources/values/config.xml
+++ b/src/keepass2android-app/Resources/values/config.xml
@@ -73,6 +73,7 @@
omitbackup
list_size
design_key
+ System
app_language_pref_key
sort_key
sort_key_new
diff --git a/src/keepass2android-app/Resources/values/strings.xml b/src/keepass2android-app/Resources/values/strings.xml
index f583fd3f4..3e82c071e 100644
--- a/src/keepass2android-app/Resources/values/strings.xml
+++ b/src/keepass2android-app/Resources/values/strings.xml
@@ -1249,9 +1249,17 @@
- Light
- Dark
+ - Material You
- System settings
+
+ - Light
+ - Dark
+ - MaterialYou
+ - System
+
Design
+ System
- No encryption (FTP)
- Implicit encryption (FTP over TLS, FTPS)
diff --git a/src/keepass2android-app/Utils/ActivityDesign.cs b/src/keepass2android-app/Utils/ActivityDesign.cs
index 9bd2ffe70..7b2d02dc2 100644
--- a/src/keepass2android-app/Utils/ActivityDesign.cs
+++ b/src/keepass2android-app/Utils/ActivityDesign.cs
@@ -109,6 +109,7 @@ public int NightModePreference
string design = prefs.GetString(_activity.GetString(Resource.String.design_key), _activity.GetString(Resource.String.design_default));
return design switch
{
+ "MaterialYou" => AppCompatDelegate.ModeNightFollowSystem,
"System" => AppCompatDelegate.ModeNightFollowSystem,
"Light" => AppCompatDelegate.ModeNightNo,
"Dark" => AppCompatDelegate.ModeNightYes,
@@ -117,6 +118,19 @@ public int NightModePreference
}
}
+ public bool IsMaterialYouEnabled
+ {
+ get
+ {
+ var prefs = PreferenceManager.GetDefaultSharedPreferences(_activity);
+ string design = prefs.GetString(
+ _activity.GetString(Resource.String.design_key),
+ _activity.GetString(Resource.String.design_default)
+ );
+ return design == "MaterialYou";
+ }
+ }
+
public void ApplyDialogTheme()
{
diff --git a/src/keepass2android-app/settings/AppSettingsActivity.cs b/src/keepass2android-app/settings/AppSettingsActivity.cs
index cc12068e7..adbaf322c 100644
--- a/src/keepass2android-app/settings/AppSettingsActivity.cs
+++ b/src/keepass2android-app/settings/AppSettingsActivity.cs
@@ -452,7 +452,20 @@ public override void OnCreate(Bundle? savedInstanceState)
base.OnCreate(savedInstanceState);
FindPreference(GetString(Resource.String.keyfile_key)).PreferenceChange += OnRememberKeyFileHistoryChanged;
-
+ FindPreference(GetString(Resource.String.design_key)).PreferenceChange += (sender, args) =>
+ {
+ var newDesign = args.NewValue.ToString();
+ Kp2aLog.Log($"Design changed to: {newDesign}");
+
+ if (newDesign == "MaterialYou" && (int)Android.OS.Build.VERSION.SdkInt >= 31)
+ {
+ App.Kp2a.ShowMessage(Activity,
+ GetString(Resource.String.material_you_enabled),
+ MessageSeverity.Info);
+ }
+ // restart to apply theme change. Recreating would be nicer, but that - for some reason - causes GroupActivity to be twice on the backstack afterwards :-(
+ Activity.Finish();
+ };
}
}
public class DisplayPreferenceFragment : PreferenceFragmentWithResource