Navbar: Introduce navbar styles [1/3]
Change-Id: I286e77eaadc1bd914d16444c25a0e5228e444a79
Signed-off-by: rohan <purohit.rohan@gmail.com>
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 5cdba9d..df72c62 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -6691,6 +6691,12 @@
private static final Validator CENTER_NOTIFICATION_HEADERS_VALIDATOR = BOOLEAN_VALIDATOR;
/**
+ * Switch between different navbar styles
+ * @hide
+ */
+ public static final String NAVBAR_STYLE = "navbar_style";
+
+ /**
* Settings to backup. This is here so that it's in the same place as the settings
* keys and easy to update.
*
diff --git a/core/java/com/android/internal/util/bliss/BlissUtils.java b/core/java/com/android/internal/util/bliss/BlissUtils.java
index 03c6aa3..b6a0178 100644
--- a/core/java/com/android/internal/util/bliss/BlissUtils.java
+++ b/core/java/com/android/internal/util/bliss/BlissUtils.java
@@ -159,6 +159,15 @@
"com.android.systemui.qsheader.transparent", // 4
};
+ // Navbar styles
+ public static final String[] NAVBAR_STYLES = {
+ "com.android.system.navbar.stock", //0
+ "com.android.system.navbar.asus", //1
+ "com.android.system.navbar.oneplus", //2
+ "com.android.system.navbar.oneui", //3
+ "com.android.system.navbar.tecno", //4
+ };
+
public static boolean isChineseLanguage() {
return Resources.getSystem().getConfiguration().locale.getLanguage().startsWith(
Locale.CHINESE.getLanguage());
@@ -874,4 +883,27 @@
}
}
}
+
+ // Unloads the navbar styles
+ private static void unloadNavbarStyle(IOverlayManager om, int userId) {
+ for (String style : NAVBAR_STYLES) {
+ try {
+ om.setEnabled(style, false, userId);
+ } catch (RemoteException e) {
+ }
+ }
+ }
+
+ // Set navbar style
+ public static void setNavbarStyle(IOverlayManager om, int userId, int navbarStyle) {
+ // Always unload navbar styles
+ unloadNavbarStyle(om, userId);
+
+ if (navbarStyle == 0) return;
+
+ try {
+ om.setEnabled(NAVBAR_STYLES[navbarStyle], true, userId);
+ } catch (RemoteException e) {
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index 765088f..b5daff9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -342,6 +342,8 @@
"system:" + Settings.System.STOCK_STATUSBAR_IN_HIDE;
private static final String STATUS_BAR_CUSTOM_HEADER =
"system:" + Settings.System.OMNI_STATUS_BAR_CUSTOM_HEADER;
+ private static final String NAVBAR_STYLE =
+ "system:" + Settings.System.NAVBAR_STYLE;
private static final String BANNER_ACTION_CANCEL =
"com.android.systemui.statusbar.banner_action_cancel";
@@ -682,6 +684,7 @@
private boolean mWereIconsJustHidden;
private boolean mBouncerWasShowingWhenHidden;
+ private int mNavbarStyle;
private int mImmerseMode;
private boolean mStockStatusBar = true;
private boolean mPortrait = true;
@@ -844,6 +847,8 @@
tunerService.addTunable(this, DISPLAY_CUTOUT_MODE);
tunerService.addTunable(this, STOCK_STATUSBAR_IN_HIDE);
tunerService.addTunable(this, STATUS_BAR_CUSTOM_HEADER);
+ tunerService.addTunable(this, NAVBAR_STYLE);
+
mDisplayManager = mContext.getSystemService(DisplayManager.class);
mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
@@ -4428,6 +4433,12 @@
updateQSPanel();
}
+ private void updateNavbarStyle() {
+ mUiOffloadThread.submit(() -> {
+ BlissUtils.setNavbarStyle(mOverlayManager, mLockscreenUserManager.getCurrentUserId(), mNavbarStyle);
+ });
+ }
+
private void updateCorners() {
if (mSysuiRoundedFwvals && !isCurrentRoundedSameAsFw()) {
float density = Resources.getSystem().getDisplayMetrics().density;
@@ -5913,6 +5924,14 @@
case STATUS_BAR_CUSTOM_HEADER:
updateTheme();
break;
+ case NAVBAR_STYLE:
+ int navbarStyle =
+ TunerService.parseInteger(newValue, 0);
+ if (mNavbarStyle != navbarStyle) {
+ mNavbarStyle = navbarStyle;
+ updateNavbarStyle();
+ }
+ break;
default:
break;
}