diff --git a/build.gradle b/build.gradle index 5b1443ad2db2f9b4cee8dd70c06992fe2aee9af6..872ec5b32c7a819721f442c2c7e192c4b28049c6 100644 --- a/build.gradle +++ b/build.gradle @@ -85,7 +85,7 @@ ext { } android { - compileSdkVersion 28 + compileSdkVersion 29 defaultConfig { minSdkVersion 16 diff --git a/src/main/java/eu/siacs/conversations/utils/ThemeHelper.java b/src/main/java/eu/siacs/conversations/utils/ThemeHelper.java index 32feb61b0ce53794940545131e29088bab49d666..bd50ab0aee47ad842219bc249c3c1e26dc9173a8 100644 --- a/src/main/java/eu/siacs/conversations/utils/ThemeHelper.java +++ b/src/main/java/eu/siacs/conversations/utils/ThemeHelper.java @@ -31,8 +31,10 @@ package eu.siacs.conversations.utils; import android.content.Context; import android.content.SharedPreferences; +import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; +import android.os.Build; import android.preference.PreferenceManager; import android.support.annotation.StyleRes; import android.support.design.widget.Snackbar; @@ -45,10 +47,10 @@ import eu.siacs.conversations.ui.SettingsActivity; public class ThemeHelper { - public static int find(Context context) { + public static int find(final Context context) { final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); final Resources resources = context.getResources(); - final boolean dark = sharedPreferences.getString(SettingsActivity.THEME, resources.getString(R.string.theme)).equals("dark"); + final boolean dark = isDark(sharedPreferences, resources); final String fontSize = sharedPreferences.getString("font_size", resources.getString(R.string.default_font_size)); switch (fontSize) { case "medium": @@ -63,7 +65,7 @@ public class ThemeHelper { public static int findDialog(Context context) { final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); final Resources resources = context.getResources(); - final boolean dark = sharedPreferences.getString(SettingsActivity.THEME, resources.getString(R.string.theme)).equals("dark"); + final boolean dark = isDark(sharedPreferences, resources); final String fontSize = sharedPreferences.getString("font_size", resources.getString(R.string.default_font_size)); switch (fontSize) { case "medium": @@ -75,6 +77,15 @@ public class ThemeHelper { } } + private static boolean isDark(final SharedPreferences sharedPreferences, final Resources resources) { + final String setting = sharedPreferences.getString(SettingsActivity.THEME, resources.getString(R.string.theme)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && "automatic".equals(setting)) { + return (resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES; + } else { + return "dark".equals(setting); + } + } + public static boolean isDark(@StyleRes int id) { switch (id) { case R.style.ConversationsTheme_Dark: diff --git a/src/main/res/values-v29/theme-settings.xml b/src/main/res/values-v29/theme-settings.xml new file mode 100644 index 0000000000000000000000000000000000000000..5cd93386fb5446fa832c408e8e4d592b99ca99bf --- /dev/null +++ b/src/main/res/values-v29/theme-settings.xml @@ -0,0 +1,16 @@ + + + + automatic + + @string/pref_theme_automatic + @string/pref_theme_light + @string/pref_theme_dark + + + automatic + light + dark + + + diff --git a/src/main/res/values/arrays.xml b/src/main/res/values/arrays.xml index 50ca38c6e7da6a1e0338a45f961420107344be85..64865db75c5464042266bc58a93294307b48e925 100644 --- a/src/main/res/values/arrays.xml +++ b/src/main/res/values/arrays.xml @@ -1,14 +1,6 @@ - - @string/pref_theme_light - @string/pref_theme_dark - - - light - dark - @string/never 256 KiB diff --git a/src/main/res/values/defaults.xml b/src/main/res/values/defaults.xml index bfe8ae95376d8ff1aaf1c7b13c10cc7b1c0de584..3c1de4ebc3c1b034a7269a7b3c822835dd6e6b05 100644 --- a/src/main/res/values/defaults.xml +++ b/src/main/res/values/defaults.xml @@ -17,7 +17,6 @@ 144 524288 auto - light true recent false diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 03ecafea9f9db7553b5650aab7897c88f70503cf..ccf8138acd8e861c750f7ddd4421121fd79b457c 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -559,6 +559,7 @@ Privacy Theme Select the color palette + Automatic Light theme Dark theme Green Background diff --git a/src/main/res/values/theme-settings.xml b/src/main/res/values/theme-settings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b770b1b26bef724bd411e9ad2aa1b99530b95138 --- /dev/null +++ b/src/main/res/values/theme-settings.xml @@ -0,0 +1,14 @@ + + + + light + + @string/pref_theme_light + @string/pref_theme_dark + + + light + dark + + +