diff --git a/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java b/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java index 7ba234088..9e27df17f 100644 --- a/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java +++ b/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java @@ -8,6 +8,8 @@ package com.todoroo.andlib.utility; import android.app.Activity; import android.content.Context; import android.os.Build; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; import android.text.InputType; import android.util.DisplayMetrics; import android.view.View; @@ -195,6 +197,10 @@ public class AndroidUtilities { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M; } + public static boolean atLeastOreoMR1() { + return VERSION.SDK_INT >= VERSION_CODES.O_MR1; + } + public static boolean atLeastNougat() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N; } diff --git a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java index 824e1122a..8d62e12da 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java +++ b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java @@ -260,6 +260,7 @@ public class MainActivity extends InjectingAppCompatActivity ThemeColor filterColor = getFilterColor(); filterColor.applyToStatusBar(drawerLayout); + filterColor.applyToNavigationBar(this); filterColor.applyTaskDescription(this, filter.listingTitle); theme.withThemeColor(filterColor).applyToContext(this); } diff --git a/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.java b/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.java index 58ecc47ec..5f0f93027 100644 --- a/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.java +++ b/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.java @@ -321,6 +321,6 @@ public class GoogleTaskListSettingsActivity extends ThemedInjectingAppCompatActi color.setText(themeColor.getName()); } themeColor.apply(toolbar); - themeColor.applyToStatusBar(this); + themeColor.applyToSystemBars(this); } } diff --git a/app/src/main/java/org/tasks/activities/TagSettingsActivity.java b/app/src/main/java/org/tasks/activities/TagSettingsActivity.java index 1f2dd22a9..8b9b60b49 100644 --- a/app/src/main/java/org/tasks/activities/TagSettingsActivity.java +++ b/app/src/main/java/org/tasks/activities/TagSettingsActivity.java @@ -281,7 +281,7 @@ public class TagSettingsActivity extends ThemedInjectingAppCompatActivity color.setText(themeColor.getName()); } themeColor.apply(toolbar); - themeColor.applyToStatusBar(this); + themeColor.applyToSystemBars(this); } @Override diff --git a/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.java b/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.java index 12fa8cd89..ce22b0b62 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.java +++ b/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.java @@ -336,7 +336,7 @@ public class CaldavCalendarSettingsActivity extends ThemedInjectingAppCompatActi color.setText(themeColor.getName()); } themeColor.apply(toolbar); - themeColor.applyToStatusBar(this); + themeColor.applyToSystemBars(this); } @Override diff --git a/app/src/main/java/org/tasks/themes/Theme.java b/app/src/main/java/org/tasks/themes/Theme.java index fffefa9fb..ff31c7d17 100644 --- a/app/src/main/java/org/tasks/themes/Theme.java +++ b/app/src/main/java/org/tasks/themes/Theme.java @@ -54,7 +54,7 @@ public class Theme { } public void applyStatusBarColor(Activity activity) { - themeColor.applyToStatusBar(activity); + themeColor.applyToSystemBars(activity); themeColor.applyTaskDescription(activity, activity.getString(R.string.app_name)); } diff --git a/app/src/main/java/org/tasks/themes/ThemeColor.java b/app/src/main/java/org/tasks/themes/ThemeColor.java index 148e8ffb3..9f8855ec6 100644 --- a/app/src/main/java/org/tasks/themes/ThemeColor.java +++ b/app/src/main/java/org/tasks/themes/ThemeColor.java @@ -2,6 +2,7 @@ package org.tasks.themes; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastLollipop; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow; +import static com.todoroo.andlib.utility.AndroidUtilities.atLeastOreoMR1; import android.annotation.SuppressLint; import android.annotation.TargetApi; @@ -9,6 +10,7 @@ import android.app.Activity; import android.app.ActivityManager; import android.content.res.Resources; import android.os.Build; +import android.os.Build.VERSION_CODES; import android.os.Parcel; import androidx.drawerlayout.widget.DrawerLayout; import androidx.appcompat.widget.Toolbar; @@ -140,7 +142,7 @@ public class ThemeColor implements ColorPickerDialog.Pickable { } @SuppressLint("NewApi") - public void applyToStatusBar(Activity activity) { + public void applyToSystemBars(Activity activity) { setStatusBarColor(activity); if (atLeastMarshmallow()) { @@ -148,6 +150,8 @@ public class ThemeColor implements ColorPickerDialog.Pickable { int systemUiVisibility = applyLightStatusBarFlag(decorView.getSystemUiVisibility()); decorView.setSystemUiVisibility(systemUiVisibility); } + + applyToNavigationBar(activity); } @SuppressLint("NewApi") @@ -168,6 +172,16 @@ public class ThemeColor implements ColorPickerDialog.Pickable { } } + public void applyToNavigationBar(Activity activity) { + if (atLeastOreoMR1()) { + activity.getWindow().setNavigationBarColor(getPrimaryColor()); + + View decorView = activity.getWindow().getDecorView(); + int systemUiVisibility = applyLightNavigationBar(decorView.getSystemUiVisibility()); + decorView.setSystemUiVisibility(systemUiVisibility); + } + } + @TargetApi(Build.VERSION_CODES.M) private int applyLightStatusBarFlag(int flag) { return isDark @@ -175,6 +189,13 @@ public class ThemeColor implements ColorPickerDialog.Pickable { : flag & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; } + @TargetApi(VERSION_CODES.O_MR1) + private int applyLightNavigationBar(int flag) { + return isDark + ? flag | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR + : flag & ~View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR; + } + public void applyStyle(Resources.Theme theme) { theme.applyStyle(style, true); } diff --git a/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.java b/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.java index 34ef19241..9c90b03f6 100644 --- a/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.java +++ b/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.java @@ -158,7 +158,7 @@ public class ShortcutConfigActivity extends InjectingAppCompatActivity { ThemeColor color = themeCache.getThemeColor(getThemeIndex()); shortcutColor.setText(color.getName()); color.apply(toolbar); - color.applyToStatusBar(this); + color.applyToSystemBars(this); } private int getThemeIndex() {