From e7ecea63ad2bc134762ec5977a3501aa39c4c1fb Mon Sep 17 00:00:00 2001 From: Charles Chen Date: Mon, 22 Nov 2021 22:26:37 +0800 Subject: Support to show lock task toast on taskbar Bug: 207452035 Test: manual Change-Id: I0ceba6427a5a4b0d59d9d744567886c8cd690929 --- .../navigationbar/NavigationBarController.java | 18 ++++++++++ .../systemui/navigationbar/TaskbarDelegate.java | 39 ++++++++++++++++++++++ .../systemui/statusbar/phone/StatusBar.java | 8 +++++ .../phone/StatusBarCommandQueueCallbacks.java | 8 ++--- 4 files changed, 67 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java index 0429c022234d..bfabf716803b 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java @@ -395,6 +395,24 @@ public class NavigationBarController implements return (navBar == null) ? null : navBar.getView(); } + public void showPinningEnterExitToast(int displayId, boolean entering) { + final NavigationBarView navBarView = getNavigationBarView(displayId); + if (navBarView != null) { + navBarView.showPinningEnterExitToast(entering); + } else if (displayId == DEFAULT_DISPLAY && mTaskbarDelegate.isInitialized()) { + mTaskbarDelegate.showPinningEnterExitToast(entering); + } + } + + public void showPinningEscapeToast(int displayId) { + final NavigationBarView navBarView = getNavigationBarView(displayId); + if (navBarView != null) { + navBarView.showPinningEscapeToast(); + } else if (displayId == DEFAULT_DISPLAY && mTaskbarDelegate.isInitialized()) { + mTaskbarDelegate.showPinningEscapeToast(); + } + } + /** @return {@link NavigationBar} on the default display. */ @Nullable public NavigationBar getDefaultNavigationBar() { diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java b/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java index 8fb394c06ba1..29067747f8e0 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java @@ -60,6 +60,7 @@ import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.shared.recents.utilities.Utilities; import com.android.systemui.shared.system.ActivityManagerWrapper; +import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.statusbar.AutoHideUiElement; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.phone.AutoHideController; @@ -109,6 +110,9 @@ public class TaskbarDelegate implements CommandQueue.Callbacks, private final Context mContext; private final DisplayManager mDisplayManager; private Context mWindowContext; + private ScreenPinningNotify mScreenPinningNotify; + private int mNavigationMode; + /** * Tracks the system calls for when taskbar should transiently show or hide so we can return * this value in {@link AutoHideUiElement#isVisible()} below. @@ -197,6 +201,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks, Display display = mDisplayManager.getDisplay(displayId); mWindowContext = mContext.createWindowContext(display, TYPE_APPLICATION, null); mWindowContext.registerComponentCallbacks(this); + mScreenPinningNotify = new ScreenPinningNotify(mWindowContext); // Set initial state for any listeners updateSysuiFlags(); mAutoHideController.setNavigationBar(mAutoHideUiElement); @@ -214,6 +219,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks, mNavBarHelper.removeNavTaskStateUpdater(mNavbarTaskbarStateUpdater); mNavBarHelper.destroy(); mEdgeBackGestureHandler.onNavBarDetached(); + mScreenPinningNotify = null; if (mWindowContext != null) { mWindowContext.unregisterComponentCallbacks(this); mWindowContext = null; @@ -224,6 +230,14 @@ public class TaskbarDelegate implements CommandQueue.Callbacks, mInitialized = false; } + /** + * Returns {@code true} if this taskBar is {@link #init(int)}. Returns {@code false} if this + * taskbar has not yet been {@link #init(int)} or has been {@link #destroy()}. + */ + public boolean isInitialized() { + return mInitialized; + } + private void updateSysuiFlags() { int a11yFlags = mNavBarHelper.getA11yButtonState(); boolean clickable = (a11yFlags & SYSUI_STATE_A11Y_BUTTON_CLICKABLE) != 0; @@ -345,6 +359,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks, @Override public void onNavigationModeChanged(int mode) { + mNavigationMode = mode; mEdgeBackGestureHandler.onNavigationModeChanged(mode); } @@ -364,10 +379,34 @@ public class TaskbarDelegate implements CommandQueue.Callbacks, @Override public void onLowMemory() {} + @Override + public void showPinningEnterExitToast(boolean entering) { + updateSysuiFlags(); + if (mScreenPinningNotify == null) { + return; + } + if (entering) { + mScreenPinningNotify.showPinningStartToast(); + } else { + mScreenPinningNotify.showPinningExitToast(); + } + } + + @Override + public void showPinningEscapeToast() { + updateSysuiFlags(); + if (mScreenPinningNotify == null) { + return; + } + mScreenPinningNotify.showEscapeToast(QuickStepContract.isGesturalMode(mNavigationMode), + !QuickStepContract.isGesturalMode(mNavigationMode)); + } + @Override public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) { pw.println("TaskbarDelegate (displayId=" + mDisplayId + "):"); pw.println(" mNavigationIconHints=" + mNavigationIconHints); + pw.println(" mNavigationMode=" + mNavigationMode); pw.println(" mDisabledFlags=" + mDisabledFlags); pw.println(" mTaskBarWindowState=" + mTaskBarWindowState); pw.println(" mBehavior=" + mBehavior); 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 d96fec5bf92e..3ae4fc09663b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -3428,6 +3428,14 @@ public class StatusBar extends SystemUI implements return mNavigationBarController.getNavigationBarView(mDisplayId); } + public void showPinningEnterExitToast(boolean entering) { + mNavigationBarController.showPinningEnterExitToast(mDisplayId, entering); + } + + public void showPinningEscapeToast() { + mNavigationBarController.showPinningEscapeToast(mDisplayId); + } + /** * TODO: Remove this method. Views should not be passed forward. Will cause theme issues. * @return bottom area view diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarCommandQueueCallbacks.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarCommandQueueCallbacks.java index a77a097f0453..3ce4472014c8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarCommandQueueCallbacks.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarCommandQueueCallbacks.java @@ -549,16 +549,12 @@ public class StatusBarCommandQueueCallbacks implements CommandQueue.Callbacks { @Override public void showPinningEnterExitToast(boolean entering) { - if (mStatusBar.getNavigationBarView() != null) { - mStatusBar.getNavigationBarView().showPinningEnterExitToast(entering); - } + mStatusBar.showPinningEnterExitToast(entering); } @Override public void showPinningEscapeToast() { - if (mStatusBar.getNavigationBarView() != null) { - mStatusBar.getNavigationBarView().showPinningEscapeToast(); - } + mStatusBar.showPinningEscapeToast(); } @Override -- cgit v1.2.3-59-g8ed1b