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