diff --git a/FAQ.md b/FAQ.md index 95a70e0c18..057328787b 100644 --- a/FAQ.md +++ b/FAQ.md @@ -10,7 +10,6 @@ For support on authorizing an account you should consult the documentation of yo Frequently requested features: -* More themes/black theme: the goal is to keep the app as simple as possible, so no more themes will not be added. * Previewing message text in notification/widget: this is not always possible because the message text is initially not downloaded for larger messages. * Executing filter rules: filter rules should be executed on the server because a battery powered device with possibly an unstable internet connection is not suitable for this. * Widget to read e-mail: widgets do not allow user interaction, so a widget to read e-mail would not be very useful. diff --git a/app/src/main/java/eu/faircode/email/ActivityBase.java b/app/src/main/java/eu/faircode/email/ActivityBase.java index 8dfc01d99a..4a7dd98f3b 100644 --- a/app/src/main/java/eu/faircode/email/ActivityBase.java +++ b/app/src/main/java/eu/faircode/email/ActivityBase.java @@ -34,10 +34,18 @@ abstract class ActivityBase extends AppCompatActivity implements SharedPreferenc @Override protected void onCreate(Bundle savedInstanceState) { Log.i(Helper.TAG, "Create " + this.getClass().getName() + " version=" + BuildConfig.VERSION_NAME); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - String theme = (Helper.isPro(this) ? prefs.getString("theme", "light") : "light"); - setTheme("light".equals(theme) ? R.style.AppThemeLight : R.style.AppThemeDark); + if (Helper.isPro(this)) { + String theme = prefs.getString("theme", null); + if ("dark".equals(theme)) + setTheme(R.style.AppThemeDark); + else if ("black".equals(theme)) + setTheme(R.style.AppThemeBlack); + } + prefs.registerOnSharedPreferenceChangeListener(this); + super.onCreate(savedInstanceState); } @@ -71,7 +79,8 @@ abstract class ActivityBase extends AppCompatActivity implements SharedPreferenc Log.i(Helper.TAG, "Preference " + key + "=" + prefs.getAll().get(key)); if ("theme".equals(key)) { finish(); - startActivity(getIntent()); + if (this.getClass().equals(ActivitySetup.class)) + startActivity(getIntent()); } else if (!this.getClass().equals(ActivitySetup.class) && ("compact".equals(key) || "debug".equals(key))) finish(); } diff --git a/app/src/main/java/eu/faircode/email/FragmentSetup.java b/app/src/main/java/eu/faircode/email/FragmentSetup.java index b9d5fb7085..65d35e893b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentSetup.java @@ -44,6 +44,7 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ImageButton; import android.widget.TextView; @@ -93,6 +94,7 @@ public class FragmentSetup extends FragmentEx { private Button btnNotifications; private ToggleButton tbDarkTheme; + private CheckBox cbBlackTheme; private Button btnOptions; @@ -144,6 +146,7 @@ public class FragmentSetup extends FragmentEx { btnData = view.findViewById(R.id.btnData); tbDarkTheme = view.findViewById(R.id.tbDarkTheme); + cbBlackTheme = view.findViewById(R.id.cbBlackTheme); btnOptions = view.findViewById(R.id.btnOptions); // Wire controls @@ -226,9 +229,9 @@ public class FragmentSetup extends FragmentEx { final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); String theme = prefs.getString("theme", "light"); - boolean dark = "dark".equals(theme); - tbDarkTheme.setTag(dark); - tbDarkTheme.setChecked(dark); + boolean light = "light".equals(theme); + tbDarkTheme.setTag(!light); + tbDarkTheme.setChecked(!light); tbDarkTheme.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton button, boolean checked) { @@ -247,9 +250,19 @@ public class FragmentSetup extends FragmentEx { fragmentTransaction.commit(); } } + cbBlackTheme.setVisibility(tbDarkTheme.isChecked() ? View.VISIBLE : View.GONE); } }); + cbBlackTheme.setChecked("black".equals(theme)); + cbBlackTheme.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean checked) { + prefs.edit().putString("theme", checked ? "black" : "dark").apply(); + } + }); + cbBlackTheme.setVisibility(tbDarkTheme.isChecked() ? View.VISIBLE : View.GONE); + btnOptions.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { diff --git a/app/src/main/res/layout/fragment_setup.xml b/app/src/main/res/layout/fragment_setup.xml index 76d009e562..96e7476353 100644 --- a/app/src/main/res/layout/fragment_setup.xml +++ b/app/src/main/res/layout/fragment_setup.xml @@ -228,6 +228,16 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/btnNotifications" /> + +