From cbf63aefd3a2ac157ae558f0d8ffd3675430e060 Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 30 Sep 2020 19:37:48 +0200 Subject: [PATCH] Simplified theme selection --- .../email/FragmentOptionsDisplay.java | 72 ++++++++++--------- app/src/main/res/layout/dialog_theme.xml | 47 +++++++----- app/src/main/res/values/strings.xml | 3 +- 3 files changed, 70 insertions(+), 52 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java b/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java index 0c3784e3ef..5c91b57a41 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java @@ -966,24 +966,28 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer private ImageButton itten; private RadioGroup rgTheme; private SwitchCompat swReverse; - private SwitchCompat swDark; + private RadioGroup rgThemeOptions; private SwitchCompat swBlack; - private SwitchCompat swSystem; private TextView tvSystem; private void eval() { int checkedId = rgTheme.getCheckedRadioButtonId(); - - boolean colored = (checkedId == R.id.rbThemeBlueOrange || + boolean grey = (checkedId == R.id.rbThemeGrey); + boolean colored = (grey || + checkedId == R.id.rbThemeBlueOrange || checkedId == R.id.rbThemeYellowPurple || checkedId == R.id.rbThemeRedGreen); - boolean dark = (colored || checkedId == R.id.rbThemeGrey); + int optionId = rgThemeOptions.getCheckedRadioButtonId(); - swReverse.setEnabled(colored); - swDark.setEnabled(dark); - swBlack.setEnabled(colored && swDark.isChecked()); - swSystem.setEnabled(dark && (!swDark.isChecked() || (swBlack.isEnabled() && swBlack.isChecked()))); - tvSystem.setEnabled(swSystem.isEnabled() && swSystem.isChecked()); + swReverse.setEnabled(colored && !grey); + + rgThemeOptions.setEnabled(colored); + for (int i = 0; i < rgThemeOptions.getChildCount(); i++) + rgThemeOptions.getChildAt(i).setEnabled(colored); + + swBlack.setEnabled(colored && !grey && optionId != R.id.rbThemeLight); + + tvSystem.setEnabled(rgThemeOptions.isEnabled() && optionId == R.id.rbThemeSystem); } @NonNull @@ -993,9 +997,8 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer itten = dview.findViewById(R.id.itten); rgTheme = dview.findViewById(R.id.rgTheme); swReverse = dview.findViewById(R.id.swReverse); - swDark = dview.findViewById(R.id.swDark); + rgThemeOptions = dview.findViewById(R.id.rgThemeOptions); swBlack = dview.findViewById(R.id.swBlack); - swSystem = dview.findViewById(R.id.swSystem); tvSystem = dview.findViewById(R.id.tvSystem); final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); @@ -1009,6 +1012,13 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer } }); + rgTheme.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + eval(); + } + }); + swReverse.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { @@ -1016,9 +1026,9 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer } }); - swDark.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + rgThemeOptions.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + public void onCheckedChanged(RadioGroup group, int checkedId) { eval(); } }); @@ -1030,32 +1040,24 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer } }); - swSystem.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - eval(); - } - }); - - rgTheme.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - eval(); - } - }); - - boolean colored = + boolean reversed = (theme.startsWith("orange_blue") || theme.startsWith("purple_yellow") || theme.startsWith("green_red")); boolean dark = theme.endsWith("dark"); - boolean black = (!"black".equals(theme) && theme.endsWith("black")); boolean system = (theme.endsWith("system") || theme.endsWith("system_black")); + boolean black = (!"black".equals(theme) && theme.endsWith("black")); + + swReverse.setChecked(reversed); + + if (dark) + rgThemeOptions.check(R.id.rbThemeDark); + else if (system) + rgThemeOptions.check(R.id.rbThemeSystem); + else + rgThemeOptions.check(R.id.rbThemeLight); - swReverse.setChecked(colored); - swDark.setChecked(dark || black); swBlack.setChecked(black); - swSystem.setChecked(system); switch (theme) { case "light": @@ -1121,9 +1123,9 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer ContactInfo.clearCache(getContext()); boolean reverse = (swReverse.isEnabled() && swReverse.isChecked()); - boolean dark = (swDark.isEnabled() && swDark.isChecked()); + boolean dark = (rgThemeOptions.isEnabled() && rgThemeOptions.getCheckedRadioButtonId() == R.id.rbThemeDark); + boolean system = (rgThemeOptions.isEnabled() && rgThemeOptions.getCheckedRadioButtonId() == R.id.rbThemeSystem); boolean black = (swBlack.isEnabled() && swBlack.isChecked()); - boolean system = (swSystem.isEnabled() && swSystem.isChecked()); switch (rgTheme.getCheckedRadioButtonId()) { case R.id.rbThemeBlueOrange: diff --git a/app/src/main/res/layout/dialog_theme.xml b/app/src/main/res/layout/dialog_theme.xml index c3da60b333..7b3874be33 100644 --- a/app/src/main/res/layout/dialog_theme.xml +++ b/app/src/main/res/layout/dialog_theme.xml @@ -99,15 +99,40 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/rgTheme" /> - + app:layout_constraintTop_toBottomOf="@id/swReverse"> + + + + + + + - - + app:layout_constraintTop_toBottomOf="@id/rgThemeOptions" /> + app:layout_constraintTop_toBottomOf="@id/swBlack" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4c4440e1dd..747c0ab21f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -250,9 +250,10 @@ Black and white Swap colors + Light Dark - Black background Follow system + Black background This will automatically switch to a light/dark theme on day/night mode, if supported by Android