SystemUI: Add API for runtime taskbar config
Allow Launcher3 to override the taskbar state at runtime based on user
preference.
Change-Id: Ic2616ff974e98e03edbcdbdf677fa40b40b37abb
Signed-off-by: SuperDroidBond <superdroidbond@yahoo.com>
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 3178e12..35cc1c4 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -6203,6 +6203,11 @@
public static final String STATUS_BAR_BATTERY_TEXT_CHARGING = "status_bar_battery_text_charging";
/**
+ * @hide
+ */
+ public static final String ENABLE_TASKBAR = "enable_taskbar";
+
+ /**
* Keys we no longer back up under the current schema, but want to continue to
* process when restoring historical backup datasets.
*
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl
index 1c532fe..7f84c8e 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl
@@ -105,6 +105,9 @@
/** Sets home rotation enabled. */
void setHomeRotationEnabled(boolean enabled) = 45;
+ /** Notifies when taskbar is enabled or disabled */
+ oneway void setTaskbarEnabled(boolean enabled) = 500;
+
/** Notifies when taskbar status updated */
oneway void notifyTaskbarStatus(boolean visible, boolean stashed) = 47;
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
index 8914552..08bb78b 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
@@ -22,7 +22,6 @@
import static android.view.Display.DEFAULT_DISPLAY;
import static com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler.DEBUG_MISSING_GESTURE_TAG;
-import static com.android.systemui.shared.recents.utilities.Utilities.isTablet;
import android.content.ContentResolver;
import android.content.Context;
@@ -78,6 +77,7 @@
Callbacks,
ConfigurationController.ConfigurationListener,
NavigationModeController.ModeChangedListener,
+ OverviewProxyService.OverviewProxyListener,
Dumpable {
private static final String TAG = NavigationBarController.class.getSimpleName();
@@ -90,7 +90,7 @@
private final TaskbarDelegate mTaskbarDelegate;
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
private int mNavMode;
- @VisibleForTesting boolean mIsTablet;
+ private boolean mTaskbarShowing;
/** A displayId - nav bar maps. */
@VisibleForTesting
@@ -134,16 +134,15 @@
navBarHelper, navigationModeController, sysUiFlagsContainer,
dumpManager, autoHideController, lightBarController, pipOptional,
backAnimation.orElse(null));
- mIsTablet = isTablet(mContext);
+ overviewProxyService.addCallback(this);
dumpManager.registerDumpable(this);
}
@Override
public void onConfigChanged(Configuration newConfig) {
- boolean isOldConfigTablet = mIsTablet;
- mIsTablet = isTablet(mContext);
+ boolean oldShouldShowTaskbar = shouldShowTaskbar();
+ boolean largeScreenChanged = shouldShowTaskbar() != oldShouldShowTaskbar;
boolean willApplyConfig = mConfigChanges.applyNewConfig(mContext.getResources());
- boolean largeScreenChanged = mIsTablet != isOldConfigTablet;
// TODO(b/243765256): Disable this logging once b/243765256 is fixed.
Log.i(DEBUG_MISSING_GESTURE_TAG, "NavbarController: newConfig=" + newConfig
+ " mTaskbarDelegate initialized=" + mTaskbarDelegate.isInitialized()
@@ -192,6 +191,16 @@
});
}
+ @Override
+ public void onTaskbarEnabled(boolean enabled) {
+ boolean oldShouldShowTaskbar = shouldShowTaskbar();
+ mTaskbarShowing = enabled;
+ boolean largeScreenChanged = shouldShowTaskbar() != oldShouldShowTaskbar;
+ if (largeScreenChanged) {
+ updateNavbarForTaskbar();
+ }
+ }
+
private void updateAccessibilityButtonModeIfNeeded() {
ContentResolver contentResolver = mContext.getContentResolver();
final int mode = Settings.Secure.getIntForUser(contentResolver,
@@ -232,10 +241,7 @@
/** @return {@code true} if taskbar is enabled, false otherwise */
private boolean initializeTaskbarIfNecessary() {
- // Enable for tablet or (phone AND flag is set); assuming phone = !mIsTablet
- boolean taskbarEnabled = mIsTablet || mFeatureFlags.isEnabled(Flags.HIDE_NAVBAR_WINDOW);
-
- if (taskbarEnabled) {
+ if (shouldShowTaskbar()) {
Trace.beginSection("NavigationBarController#initializeTaskbarIfNecessary");
// Remove navigation bar when taskbar is showing
removeNavigationBar(mContext.getDisplayId());
@@ -244,7 +250,7 @@
} else {
mTaskbarDelegate.destroy();
}
- return taskbarEnabled;
+ return shouldShowTaskbar();
}
@Override
@@ -255,7 +261,6 @@
@Override
public void onDisplayReady(int displayId) {
Display display = mDisplayManager.getDisplay(displayId);
- mIsTablet = isTablet(mContext);
createNavigationBar(display, null /* savedState */, null /* result */);
}
@@ -321,7 +326,7 @@
// We may show TaskBar on the default display for large screen device. Don't need to create
// navigation bar for this case.
- if (isOnDefaultDisplay && initializeTaskbarIfNecessary()) {
+ if (shouldShowTaskbar() && isOnDefaultDisplay) {
return;
}
@@ -456,6 +461,10 @@
}
}
+ private boolean shouldShowTaskbar() {
+ return mTaskbarShowing;
+ }
+
/** @return {@link NavigationBar} on the default display. */
@Nullable
public NavigationBar getDefaultNavigationBar() {
@@ -464,7 +473,6 @@
@Override
public void dump(@NonNull PrintWriter pw, @NonNull String[] args) {
- pw.println("mIsTablet=" + mIsTablet);
pw.println("mNavMode=" + mNavMode);
for (int i = 0; i < mNavigationBars.size(); i++) {
if (i > 0) {
diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
index 4d005be..674f403 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
@@ -243,6 +243,12 @@
}
@Override
+ public void setTaskbarEnabled(boolean enabled) {
+ verifyCallerAndClearCallingIdentityPostMain("setTaskbarEnabled", () ->
+ onTaskbarEnabled(enabled));
+ }
+
+ @Override
public void notifyTaskbarStatus(boolean visible, boolean stashed) {
verifyCallerAndClearCallingIdentityPostMain("notifyTaskbarStatus", () ->
onTaskbarStatusUpdated(visible, stashed));
@@ -798,6 +804,12 @@
}
}
+ private void onTaskbarEnabled(boolean enabled) {
+ for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) {
+ mConnectionCallbacks.get(i).onTaskbarEnabled(enabled);
+ }
+ }
+
private void onTaskbarStatusUpdated(boolean visible, boolean stashed) {
for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) {
mConnectionCallbacks.get(i).onTaskbarStatusUpdated(visible, stashed);
@@ -995,6 +1007,7 @@
/** Notify the recents app (overview) is started by 3-button navigation. */
default void onToggleRecentApps() {}
default void onHomeRotationEnabled(boolean enabled) {}
+ default void onTaskbarEnabled(boolean enabled) {}
default void onTaskbarStatusUpdated(boolean visible, boolean stashed) {}
default void onTaskbarAutohideSuspend(boolean suspend) {}
default void onAssistantProgress(@FloatRange(from = 0.0, to = 1.0) float progress) {}