diff --git a/app/src/main/java/eu/faircode/email/ActivityBase.java b/app/src/main/java/eu/faircode/email/ActivityBase.java index 5daa27bc4d..871156942a 100644 --- a/app/src/main/java/eu/faircode/email/ActivityBase.java +++ b/app/src/main/java/eu/faircode/email/ActivityBase.java @@ -203,6 +203,13 @@ abstract class ActivityBase extends AppCompatActivity implements SharedPreferenc checkAuthentication(); + boolean navbar_colorize = prefs.getBoolean("navbar_colorize", false); + if (navbar_colorize) { + Window window = getWindow(); + if (window != null) + window.setNavigationBarColor(Helper.resolveColor(this, R.attr.colorPrimaryDark)); + } + super.onCreate(savedInstanceState); } diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java b/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java index 853147caa6..9daa302357 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java @@ -25,6 +25,7 @@ import android.content.DialogInterface; import android.content.SharedPreferences; import android.content.res.Configuration; import android.graphics.Bitmap; +import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.view.LayoutInflater; @@ -33,6 +34,7 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.Window; import android.widget.AdapterView; import android.widget.Button; import android.widget.CompoundButton; @@ -48,6 +50,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.SwitchCompat; +import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.Lifecycle; import androidx.preference.PreferenceManager; @@ -100,6 +103,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer private SwitchCompat swImagesInline; private SwitchCompat swSeekbar; private SwitchCompat swActionbar; + private SwitchCompat swNavBarColorize; private final static String[] RESET_OPTIONS = new String[]{ "theme", "landscape", "landscape3", "startup", "cards", "indentation", "date", "threading", "highlight_unread", "color_stripe", @@ -108,7 +112,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer "subject_top", "font_size_sender", "font_size_subject", "subject_italic", "subject_ellipsize", "keywords_header", "flags", "flags_background", "preview", "preview_italic", "preview_lines", "addresses", "attachments_alt", "contrast", "monospaced", "text_color", "text_size", - "inline_images", "collapse_quotes", "seekbar", "actionbar", + "inline_images", "collapse_quotes", "seekbar", "actionbar", "navbar_colorize" }; @Override @@ -168,6 +172,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer swImagesInline = view.findViewById(R.id.swImagesInline); swSeekbar = view.findViewById(R.id.swSeekbar); swActionbar = view.findViewById(R.id.swActionbar); + swNavBarColorize = view.findViewById(R.id.swNavBarColorize); setOptions(); @@ -566,6 +571,15 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer } }); + swNavBarColorize.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("navbar_colorize", checked).apply(); + setNavigationBarColor( + checked ? Helper.resolveColor(getContext(), R.attr.colorPrimaryDark) : Color.BLACK); + } + }); + PreferenceManager.getDefaultSharedPreferences(getContext()).registerOnSharedPreferenceChangeListener(this); return view; @@ -606,6 +620,9 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer for (String option : RESET_OPTIONS) editor.remove(option); editor.apply(); + + setNavigationBarColor(Color.BLACK); + ToastEx.makeText(getContext(), R.string.title_setup_done, Toast.LENGTH_LONG).show(); } @@ -700,10 +717,21 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer swImagesInline.setChecked(prefs.getBoolean("inline_images", false)); swSeekbar.setChecked(prefs.getBoolean("seekbar", false)); swActionbar.setChecked(prefs.getBoolean("actionbar", true)); + swNavBarColorize.setChecked(prefs.getBoolean("navbar_colorize", false)); updateColor(); } + private void setNavigationBarColor(int color) { + FragmentActivity activity = getActivity(); + if (activity == null) + return; + Window window = activity.getWindow(); + if (window == null) + return; + window.setNavigationBarColor(color); + } + private void updateColor() { Context context = getContext(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); diff --git a/app/src/main/res/layout/fragment_options_display.xml b/app/src/main/res/layout/fragment_options_display.xml index 1c99ee0d44..855dd26f6d 100644 --- a/app/src/main/res/layout/fragment_options_display.xml +++ b/app/src/main/res/layout/fragment_options_display.xml @@ -734,5 +734,16 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/swSeekbar" app:switchPadding="12dp" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5245c96308..70436780c7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -334,6 +334,7 @@ Automatically show inline images Show relative conversation position with a dot Show conversation action bar + Colorize the Android navigation bar Double \'back\' to exit Pull down to refresh