diff options
| author | 2021-11-22 22:26:37 +0800 | |
|---|---|---|
| committer | 2021-11-30 17:11:14 -0800 | |
| commit | e7ecea63ad2bc134762ec5977a3501aa39c4c1fb (patch) | |
| tree | 5e079ee5df00da655272f0467d93958f67756131 | |
| parent | 4785ec13d02b9e2a48f47b903a15bcc3edd67606 (diff) | |
Support to show lock task toast on taskbar
Bug: 207452035
Test: manual
Change-Id: I0ceba6427a5a4b0d59d9d744567886c8cd690929
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); } @@ -365,9 +380,33 @@ public class TaskbarDelegate implements CommandQueue.Callbacks, 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 |