Merge "Remove expensive queries for lock task mode (screen pinning)" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
fed657bf80
@@ -282,17 +282,6 @@ public class ActivityManagerWrapper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return whether screen pinning is active.
|
|
||||||
*/
|
|
||||||
public boolean isScreenPinningActive() {
|
|
||||||
try {
|
|
||||||
return getService().getLockTaskModeState() == LOCK_TASK_MODE_PINNED;
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return whether screen pinning is enabled.
|
* @return whether screen pinning is enabled.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.shared.system;
|
package com.android.systemui.shared.system;
|
||||||
|
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.app.ActivityManager.RunningTaskInfo;
|
import android.app.ActivityManager.RunningTaskInfo;
|
||||||
import android.app.ActivityTaskManager;
|
import android.app.ActivityTaskManager;
|
||||||
import android.app.TaskStackListener;
|
import android.app.TaskStackListener;
|
||||||
@@ -27,6 +28,8 @@ import android.os.Trace;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.window.TaskSnapshot;
|
import android.window.TaskSnapshot;
|
||||||
|
|
||||||
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
import com.android.internal.os.SomeArgs;
|
import com.android.internal.os.SomeArgs;
|
||||||
import com.android.systemui.shared.recents.model.ThumbnailData;
|
import com.android.systemui.shared.recents.model.ThumbnailData;
|
||||||
|
|
||||||
@@ -43,14 +46,50 @@ public class TaskStackChangeListeners {
|
|||||||
|
|
||||||
private final Impl mImpl;
|
private final Impl mImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proxies calls to the given handler callback synchronously for testing purposes.
|
||||||
|
*/
|
||||||
|
private static class TestSyncHandler extends Handler {
|
||||||
|
private Handler.Callback mCb;
|
||||||
|
|
||||||
|
public TestSyncHandler() {
|
||||||
|
super(Looper.getMainLooper());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCallback(Handler.Callback cb) {
|
||||||
|
mCb = cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean sendMessageAtTime(@NonNull Message msg, long uptimeMillis) {
|
||||||
|
return mCb.handleMessage(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private TaskStackChangeListeners() {
|
private TaskStackChangeListeners() {
|
||||||
mImpl = new Impl(Looper.getMainLooper());
|
mImpl = new Impl(Looper.getMainLooper());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TaskStackChangeListeners(Handler h) {
|
||||||
|
mImpl = new Impl(h);
|
||||||
|
}
|
||||||
|
|
||||||
public static TaskStackChangeListeners getInstance() {
|
public static TaskStackChangeListeners getInstance() {
|
||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an instance of the listeners that can be called upon synchronously for testsing
|
||||||
|
* purposes.
|
||||||
|
*/
|
||||||
|
@VisibleForTesting
|
||||||
|
public static TaskStackChangeListeners getTestInstance() {
|
||||||
|
TestSyncHandler h = new TestSyncHandler();
|
||||||
|
TaskStackChangeListeners l = new TaskStackChangeListeners(h);
|
||||||
|
h.setCallback(l.mImpl);
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers a task stack listener with the system.
|
* Registers a task stack listener with the system.
|
||||||
* This should be called on the main thread.
|
* This should be called on the main thread.
|
||||||
@@ -71,7 +110,15 @@ public class TaskStackChangeListeners {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class Impl extends TaskStackListener implements Handler.Callback {
|
/**
|
||||||
|
* Returns an instance of the listener to call upon from tests.
|
||||||
|
*/
|
||||||
|
@VisibleForTesting
|
||||||
|
public TaskStackListener getListenerImpl() {
|
||||||
|
return mImpl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class Impl extends TaskStackListener implements Handler.Callback {
|
||||||
|
|
||||||
private static final int ON_TASK_STACK_CHANGED = 1;
|
private static final int ON_TASK_STACK_CHANGED = 1;
|
||||||
private static final int ON_TASK_SNAPSHOT_CHANGED = 2;
|
private static final int ON_TASK_SNAPSHOT_CHANGED = 2;
|
||||||
@@ -104,10 +151,14 @@ public class TaskStackChangeListeners {
|
|||||||
private final Handler mHandler;
|
private final Handler mHandler;
|
||||||
private boolean mRegistered;
|
private boolean mRegistered;
|
||||||
|
|
||||||
Impl(Looper looper) {
|
private Impl(Looper looper) {
|
||||||
mHandler = new Handler(looper, this);
|
mHandler = new Handler(looper, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Impl(Handler handler) {
|
||||||
|
mHandler = handler;
|
||||||
|
}
|
||||||
|
|
||||||
public void addListener(TaskStackChangeListener listener) {
|
public void addListener(TaskStackChangeListener listener) {
|
||||||
synchronized (mTaskStackListeners) {
|
synchronized (mTaskStackListeners) {
|
||||||
mTaskStackListeners.add(listener);
|
mTaskStackListeners.add(listener);
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.navigationbar;
|
package com.android.systemui.navigationbar;
|
||||||
|
|
||||||
|
import static android.app.ActivityManager.LOCK_TASK_MODE_PINNED;
|
||||||
import static android.app.StatusBarManager.NAVIGATION_HINT_BACK_ALT;
|
import static android.app.StatusBarManager.NAVIGATION_HINT_BACK_ALT;
|
||||||
import static android.app.StatusBarManager.NAVIGATION_HINT_IME_SWITCHER_SHOWN;
|
import static android.app.StatusBarManager.NAVIGATION_HINT_IME_SWITCHER_SHOWN;
|
||||||
import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN;
|
import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN;
|
||||||
@@ -44,6 +45,7 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A
|
|||||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SHOWING;
|
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SHOWING;
|
||||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SWITCHER_SHOWING;
|
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SWITCHER_SHOWING;
|
||||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN;
|
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN;
|
||||||
|
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING;
|
||||||
import static com.android.systemui.shared.system.QuickStepContract.isGesturalMode;
|
import static com.android.systemui.shared.system.QuickStepContract.isGesturalMode;
|
||||||
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
|
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
|
||||||
import static com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
|
import static com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
|
||||||
@@ -136,9 +138,10 @@ import com.android.systemui.shared.navigationbar.RegionSamplingHelper;
|
|||||||
import com.android.systemui.shared.recents.utilities.Utilities;
|
import com.android.systemui.shared.recents.utilities.Utilities;
|
||||||
import com.android.systemui.shared.rotation.RotationButton;
|
import com.android.systemui.shared.rotation.RotationButton;
|
||||||
import com.android.systemui.shared.rotation.RotationButtonController;
|
import com.android.systemui.shared.rotation.RotationButtonController;
|
||||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
|
||||||
import com.android.systemui.shared.system.QuickStepContract;
|
import com.android.systemui.shared.system.QuickStepContract;
|
||||||
import com.android.systemui.shared.system.SysUiStatsLog;
|
import com.android.systemui.shared.system.SysUiStatsLog;
|
||||||
|
import com.android.systemui.shared.system.TaskStackChangeListener;
|
||||||
|
import com.android.systemui.shared.system.TaskStackChangeListeners;
|
||||||
import com.android.systemui.statusbar.AutoHideUiElement;
|
import com.android.systemui.statusbar.AutoHideUiElement;
|
||||||
import com.android.systemui.statusbar.CommandQueue;
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
import com.android.systemui.statusbar.CommandQueue.Callbacks;
|
import com.android.systemui.statusbar.CommandQueue.Callbacks;
|
||||||
@@ -252,6 +255,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
|
|||||||
private final AutoHideController.Factory mAutoHideControllerFactory;
|
private final AutoHideController.Factory mAutoHideControllerFactory;
|
||||||
private final Optional<TelecomManager> mTelecomManagerOptional;
|
private final Optional<TelecomManager> mTelecomManagerOptional;
|
||||||
private final InputMethodManager mInputMethodManager;
|
private final InputMethodManager mInputMethodManager;
|
||||||
|
private final TaskStackChangeListeners mTaskStackChangeListeners;
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public int mDisplayId;
|
public int mDisplayId;
|
||||||
@@ -488,6 +492,18 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private boolean mScreenPinningActive = false;
|
||||||
|
private final TaskStackChangeListener mTaskStackListener = new TaskStackChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onLockTaskModeChanged(int mode) {
|
||||||
|
mScreenPinningActive = (mode == LOCK_TASK_MODE_PINNED);
|
||||||
|
mSysUiFlagsContainer.setFlag(SYSUI_STATE_SCREEN_PINNING, mScreenPinningActive)
|
||||||
|
.commitUpdate(mDisplayId);
|
||||||
|
mView.setInScreenPinning(mScreenPinningActive);
|
||||||
|
updateScreenPinningGestures();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
NavigationBar(
|
NavigationBar(
|
||||||
NavigationBarView navigationBarView,
|
NavigationBarView navigationBarView,
|
||||||
@@ -529,7 +545,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
|
|||||||
EdgeBackGestureHandler edgeBackGestureHandler,
|
EdgeBackGestureHandler edgeBackGestureHandler,
|
||||||
Optional<BackAnimation> backAnimation,
|
Optional<BackAnimation> backAnimation,
|
||||||
UserContextProvider userContextProvider,
|
UserContextProvider userContextProvider,
|
||||||
WakefulnessLifecycle wakefulnessLifecycle) {
|
WakefulnessLifecycle wakefulnessLifecycle,
|
||||||
|
TaskStackChangeListeners taskStackChangeListeners) {
|
||||||
super(navigationBarView);
|
super(navigationBarView);
|
||||||
mFrame = navigationBarFrame;
|
mFrame = navigationBarFrame;
|
||||||
mContext = context;
|
mContext = context;
|
||||||
@@ -568,6 +585,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
|
|||||||
mInputMethodManager = inputMethodManager;
|
mInputMethodManager = inputMethodManager;
|
||||||
mUserContextProvider = userContextProvider;
|
mUserContextProvider = userContextProvider;
|
||||||
mWakefulnessLifecycle = wakefulnessLifecycle;
|
mWakefulnessLifecycle = wakefulnessLifecycle;
|
||||||
|
mTaskStackChangeListeners = taskStackChangeListeners;
|
||||||
|
|
||||||
mNavColorSampleMargin = getResources()
|
mNavColorSampleMargin = getResources()
|
||||||
.getDimensionPixelSize(R.dimen.navigation_handle_sample_horizontal_margin);
|
.getDimensionPixelSize(R.dimen.navigation_handle_sample_horizontal_margin);
|
||||||
@@ -676,6 +694,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
|
|||||||
mCommandQueue.recomputeDisableFlags(mDisplayId, false);
|
mCommandQueue.recomputeDisableFlags(mDisplayId, false);
|
||||||
|
|
||||||
mNotificationShadeDepthController.addListener(mDepthListener);
|
mNotificationShadeDepthController.addListener(mDepthListener);
|
||||||
|
mTaskStackChangeListeners.registerTaskStackListener(mTaskStackListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void destroyView() {
|
public void destroyView() {
|
||||||
@@ -689,6 +708,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
|
|||||||
mNotificationShadeDepthController.removeListener(mDepthListener);
|
mNotificationShadeDepthController.removeListener(mDepthListener);
|
||||||
|
|
||||||
mDeviceConfigProxy.removeOnPropertiesChangedListener(mOnPropertiesChangedListener);
|
mDeviceConfigProxy.removeOnPropertiesChangedListener(mOnPropertiesChangedListener);
|
||||||
|
mTaskStackChangeListeners.unregisterTaskStackListener(mTaskStackListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -990,6 +1010,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
|
|||||||
pw.println(" mTransientShown=" + mTransientShown);
|
pw.println(" mTransientShown=" + mTransientShown);
|
||||||
pw.println(" mTransientShownFromGestureOnSystemBar="
|
pw.println(" mTransientShownFromGestureOnSystemBar="
|
||||||
+ mTransientShownFromGestureOnSystemBar);
|
+ mTransientShownFromGestureOnSystemBar);
|
||||||
|
pw.println(" mScreenPinningActive=" + mScreenPinningActive);
|
||||||
dumpBarTransitions(pw, "mNavigationBarView", getBarTransitions());
|
dumpBarTransitions(pw, "mNavigationBarView", getBarTransitions());
|
||||||
|
|
||||||
pw.println(" mOrientedHandleSamplingRegion: " + mOrientedHandleSamplingRegion);
|
pw.println(" mOrientedHandleSamplingRegion: " + mOrientedHandleSamplingRegion);
|
||||||
@@ -1213,10 +1234,9 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
|
|||||||
|
|
||||||
private void updateScreenPinningGestures() {
|
private void updateScreenPinningGestures() {
|
||||||
// Change the cancel pin gesture to home and back if recents button is invisible
|
// Change the cancel pin gesture to home and back if recents button is invisible
|
||||||
boolean pinningActive = ActivityManagerWrapper.getInstance().isScreenPinningActive();
|
|
||||||
ButtonDispatcher backButton = mView.getBackButton();
|
ButtonDispatcher backButton = mView.getBackButton();
|
||||||
ButtonDispatcher recentsButton = mView.getRecentsButton();
|
ButtonDispatcher recentsButton = mView.getRecentsButton();
|
||||||
if (pinningActive) {
|
if (mScreenPinningActive) {
|
||||||
boolean recentsVisible = mView.isRecentsButtonVisible();
|
boolean recentsVisible = mView.isRecentsButtonVisible();
|
||||||
backButton.setOnLongClickListener(recentsVisible
|
backButton.setOnLongClickListener(recentsVisible
|
||||||
? this::onLongPressBackRecents
|
? this::onLongPressBackRecents
|
||||||
@@ -1227,8 +1247,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
|
|||||||
recentsButton.setOnLongClickListener(null);
|
recentsButton.setOnLongClickListener(null);
|
||||||
}
|
}
|
||||||
// Note, this needs to be set after even if we're setting the listener to null
|
// Note, this needs to be set after even if we're setting the listener to null
|
||||||
backButton.setLongClickable(pinningActive);
|
backButton.setLongClickable(mScreenPinningActive);
|
||||||
recentsButton.setLongClickable(pinningActive);
|
recentsButton.setLongClickable(mScreenPinningActive);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void notifyNavigationBarScreenOn() {
|
private void notifyNavigationBarScreenOn() {
|
||||||
@@ -1311,8 +1331,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
boolean onHomeLongClick(View v) {
|
boolean onHomeLongClick(View v) {
|
||||||
if (!mView.isRecentsButtonVisible()
|
if (!mView.isRecentsButtonVisible() && mScreenPinningActive) {
|
||||||
&& ActivityManagerWrapper.getInstance().isScreenPinningActive()) {
|
|
||||||
return onLongPressBackHome(v);
|
return onLongPressBackHome(v);
|
||||||
}
|
}
|
||||||
if (shouldDisableNavbarGestures()) {
|
if (shouldDisableNavbarGestures()) {
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ import com.android.systemui.flags.Flags;
|
|||||||
import com.android.systemui.model.SysUiState;
|
import com.android.systemui.model.SysUiState;
|
||||||
import com.android.systemui.recents.OverviewProxyService;
|
import com.android.systemui.recents.OverviewProxyService;
|
||||||
import com.android.systemui.shared.system.QuickStepContract;
|
import com.android.systemui.shared.system.QuickStepContract;
|
||||||
|
import com.android.systemui.shared.system.TaskStackChangeListeners;
|
||||||
import com.android.systemui.statusbar.CommandQueue;
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
import com.android.systemui.statusbar.CommandQueue.Callbacks;
|
import com.android.systemui.statusbar.CommandQueue.Callbacks;
|
||||||
import com.android.systemui.statusbar.phone.AutoHideController;
|
import com.android.systemui.statusbar.phone.AutoHideController;
|
||||||
@@ -88,7 +89,6 @@ public class NavigationBarController implements
|
|||||||
private FeatureFlags mFeatureFlags;
|
private FeatureFlags mFeatureFlags;
|
||||||
private final DisplayManager mDisplayManager;
|
private final DisplayManager mDisplayManager;
|
||||||
private final TaskbarDelegate mTaskbarDelegate;
|
private final TaskbarDelegate mTaskbarDelegate;
|
||||||
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
|
||||||
private int mNavMode;
|
private int mNavMode;
|
||||||
@VisibleForTesting boolean mIsTablet;
|
@VisibleForTesting boolean mIsTablet;
|
||||||
|
|
||||||
@@ -112,10 +112,10 @@ public class NavigationBarController implements
|
|||||||
NavBarHelper navBarHelper,
|
NavBarHelper navBarHelper,
|
||||||
TaskbarDelegate taskbarDelegate,
|
TaskbarDelegate taskbarDelegate,
|
||||||
NavigationBarComponent.Factory navigationBarComponentFactory,
|
NavigationBarComponent.Factory navigationBarComponentFactory,
|
||||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
|
||||||
DumpManager dumpManager,
|
DumpManager dumpManager,
|
||||||
AutoHideController autoHideController,
|
AutoHideController autoHideController,
|
||||||
LightBarController lightBarController,
|
LightBarController lightBarController,
|
||||||
|
TaskStackChangeListeners taskStackChangeListeners,
|
||||||
Optional<Pip> pipOptional,
|
Optional<Pip> pipOptional,
|
||||||
Optional<BackAnimation> backAnimation,
|
Optional<BackAnimation> backAnimation,
|
||||||
FeatureFlags featureFlags) {
|
FeatureFlags featureFlags) {
|
||||||
@@ -129,11 +129,10 @@ public class NavigationBarController implements
|
|||||||
mConfigChanges.applyNewConfig(mContext.getResources());
|
mConfigChanges.applyNewConfig(mContext.getResources());
|
||||||
mNavMode = navigationModeController.addListener(this);
|
mNavMode = navigationModeController.addListener(this);
|
||||||
mTaskbarDelegate = taskbarDelegate;
|
mTaskbarDelegate = taskbarDelegate;
|
||||||
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
|
|
||||||
mTaskbarDelegate.setDependencies(commandQueue, overviewProxyService,
|
mTaskbarDelegate.setDependencies(commandQueue, overviewProxyService,
|
||||||
navBarHelper, navigationModeController, sysUiFlagsContainer,
|
navBarHelper, navigationModeController, sysUiFlagsContainer,
|
||||||
dumpManager, autoHideController, lightBarController, pipOptional,
|
dumpManager, autoHideController, lightBarController, pipOptional,
|
||||||
backAnimation.orElse(null));
|
backAnimation.orElse(null), taskStackChangeListeners);
|
||||||
mIsTablet = isTablet(mContext);
|
mIsTablet = isTablet(mContext);
|
||||||
dumpManager.registerDumpable(this);
|
dumpManager.registerDumpable(this);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.navigationbar;
|
package com.android.systemui.navigationbar;
|
||||||
|
|
||||||
|
import static android.app.ActivityManager.LOCK_TASK_MODE_PINNED;
|
||||||
import static android.inputmethodservice.InputMethodService.canImeRenderGesturalNavButtons;
|
import static android.inputmethodservice.InputMethodService.canImeRenderGesturalNavButtons;
|
||||||
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
|
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
|
||||||
|
|
||||||
@@ -80,6 +81,7 @@ import com.android.systemui.shared.rotation.RotationButton.RotationButtonUpdates
|
|||||||
import com.android.systemui.shared.rotation.RotationButtonController;
|
import com.android.systemui.shared.rotation.RotationButtonController;
|
||||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||||
import com.android.systemui.shared.system.QuickStepContract;
|
import com.android.systemui.shared.system.QuickStepContract;
|
||||||
|
import com.android.systemui.shared.system.TaskStackChangeListener;
|
||||||
import com.android.systemui.statusbar.phone.AutoHideController;
|
import com.android.systemui.statusbar.phone.AutoHideController;
|
||||||
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
||||||
import com.android.systemui.statusbar.phone.LightBarTransitionsController;
|
import com.android.systemui.statusbar.phone.LightBarTransitionsController;
|
||||||
@@ -160,6 +162,7 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
* fully locked mode we only show that unlocking is blocked.
|
* fully locked mode we only show that unlocking is blocked.
|
||||||
*/
|
*/
|
||||||
private ScreenPinningNotify mScreenPinningNotify;
|
private ScreenPinningNotify mScreenPinningNotify;
|
||||||
|
private boolean mScreenPinningActive = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@code true} if the IME can render the back button and the IME switcher button.
|
* {@code true} if the IME can render the back button and the IME switcher button.
|
||||||
@@ -636,14 +639,13 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
// When screen pinning, don't hide back and home when connected service or back and
|
// When screen pinning, don't hide back and home when connected service or back and
|
||||||
// recents buttons when disconnected from launcher service in screen pinning mode,
|
// recents buttons when disconnected from launcher service in screen pinning mode,
|
||||||
// as they are used for exiting.
|
// as they are used for exiting.
|
||||||
final boolean pinningActive = ActivityManagerWrapper.getInstance().isScreenPinningActive();
|
|
||||||
if (mOverviewProxyEnabled) {
|
if (mOverviewProxyEnabled) {
|
||||||
// Force disable recents when not in legacy mode
|
// Force disable recents when not in legacy mode
|
||||||
disableRecent |= !QuickStepContract.isLegacyMode(mNavBarMode);
|
disableRecent |= !QuickStepContract.isLegacyMode(mNavBarMode);
|
||||||
if (pinningActive && !QuickStepContract.isGesturalMode(mNavBarMode)) {
|
if (mScreenPinningActive && !QuickStepContract.isGesturalMode(mNavBarMode)) {
|
||||||
disableBack = disableHome = false;
|
disableBack = disableHome = false;
|
||||||
}
|
}
|
||||||
} else if (pinningActive) {
|
} else if (mScreenPinningActive) {
|
||||||
disableBack = disableRecent = false;
|
disableBack = disableRecent = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -738,9 +740,7 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
public void updateDisabledSystemUiStateFlags(SysUiState sysUiState) {
|
public void updateDisabledSystemUiStateFlags(SysUiState sysUiState) {
|
||||||
int displayId = mContext.getDisplayId();
|
int displayId = mContext.getDisplayId();
|
||||||
|
|
||||||
sysUiState.setFlag(SYSUI_STATE_SCREEN_PINNING,
|
sysUiState.setFlag(SYSUI_STATE_OVERVIEW_DISABLED,
|
||||||
ActivityManagerWrapper.getInstance().isScreenPinningActive())
|
|
||||||
.setFlag(SYSUI_STATE_OVERVIEW_DISABLED,
|
|
||||||
(mDisabledFlags & View.STATUS_BAR_DISABLE_RECENT) != 0)
|
(mDisabledFlags & View.STATUS_BAR_DISABLE_RECENT) != 0)
|
||||||
.setFlag(SYSUI_STATE_HOME_DISABLED,
|
.setFlag(SYSUI_STATE_HOME_DISABLED,
|
||||||
(mDisabledFlags & View.STATUS_BAR_DISABLE_HOME) != 0)
|
(mDisabledFlags & View.STATUS_BAR_DISABLE_HOME) != 0)
|
||||||
@@ -749,6 +749,10 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
.commitUpdate(displayId);
|
.commitUpdate(displayId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setInScreenPinning(boolean active) {
|
||||||
|
mScreenPinningActive = active;
|
||||||
|
}
|
||||||
|
|
||||||
private void updatePanelSystemUiStateFlags() {
|
private void updatePanelSystemUiStateFlags() {
|
||||||
if (SysUiState.DEBUG) {
|
if (SysUiState.DEBUG) {
|
||||||
Log.d(TAG, "Updating panel sysui state flags: panelView=" + mPanelView);
|
Log.d(TAG, "Updating panel sysui state flags: panelView=" + mPanelView);
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.navigationbar;
|
package com.android.systemui.navigationbar;
|
||||||
|
|
||||||
|
import static android.app.ActivityManager.LOCK_TASK_MODE_PINNED;
|
||||||
import static android.app.StatusBarManager.NAVIGATION_HINT_BACK_ALT;
|
import static android.app.StatusBarManager.NAVIGATION_HINT_BACK_ALT;
|
||||||
import static android.app.StatusBarManager.NAVIGATION_HINT_IME_SWITCHER_SHOWN;
|
import static android.app.StatusBarManager.NAVIGATION_HINT_IME_SWITCHER_SHOWN;
|
||||||
import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
|
import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
|
||||||
@@ -40,6 +41,7 @@ import static com.android.systemui.statusbar.phone.BarTransitions.TransitionMode
|
|||||||
|
|
||||||
import android.app.StatusBarManager;
|
import android.app.StatusBarManager;
|
||||||
import android.app.StatusBarManager.WindowVisibleState;
|
import android.app.StatusBarManager.WindowVisibleState;
|
||||||
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
@@ -68,6 +70,8 @@ import com.android.systemui.recents.OverviewProxyService;
|
|||||||
import com.android.systemui.shared.recents.utilities.Utilities;
|
import com.android.systemui.shared.recents.utilities.Utilities;
|
||||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||||
import com.android.systemui.shared.system.QuickStepContract;
|
import com.android.systemui.shared.system.QuickStepContract;
|
||||||
|
import com.android.systemui.shared.system.TaskStackChangeListener;
|
||||||
|
import com.android.systemui.shared.system.TaskStackChangeListeners;
|
||||||
import com.android.systemui.statusbar.AutoHideUiElement;
|
import com.android.systemui.statusbar.AutoHideUiElement;
|
||||||
import com.android.systemui.statusbar.CommandQueue;
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
import com.android.systemui.statusbar.phone.AutoHideController;
|
import com.android.systemui.statusbar.phone.AutoHideController;
|
||||||
@@ -101,6 +105,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
private AutoHideController mAutoHideController;
|
private AutoHideController mAutoHideController;
|
||||||
private LightBarController mLightBarController;
|
private LightBarController mLightBarController;
|
||||||
private LightBarTransitionsController mLightBarTransitionsController;
|
private LightBarTransitionsController mLightBarTransitionsController;
|
||||||
|
private TaskStackChangeListeners mTaskStackChangeListeners;
|
||||||
private Optional<Pip> mPipOptional;
|
private Optional<Pip> mPipOptional;
|
||||||
private int mDisplayId;
|
private int mDisplayId;
|
||||||
private int mNavigationIconHints;
|
private int mNavigationIconHints;
|
||||||
@@ -127,6 +132,14 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
private final DisplayManager mDisplayManager;
|
private final DisplayManager mDisplayManager;
|
||||||
private Context mWindowContext;
|
private Context mWindowContext;
|
||||||
private ScreenPinningNotify mScreenPinningNotify;
|
private ScreenPinningNotify mScreenPinningNotify;
|
||||||
|
private final TaskStackChangeListener mTaskStackListener = new TaskStackChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onLockTaskModeChanged(int mode) {
|
||||||
|
mSysUiState.setFlag(SYSUI_STATE_SCREEN_PINNING, mode == LOCK_TASK_MODE_PINNED)
|
||||||
|
.commitUpdate(mDisplayId);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private int mNavigationMode = -1;
|
private int mNavigationMode = -1;
|
||||||
private final Consumer<Rect> mPipListener;
|
private final Consumer<Rect> mPipListener;
|
||||||
|
|
||||||
@@ -176,7 +189,8 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
AutoHideController autoHideController,
|
AutoHideController autoHideController,
|
||||||
LightBarController lightBarController,
|
LightBarController lightBarController,
|
||||||
Optional<Pip> pipOptional,
|
Optional<Pip> pipOptional,
|
||||||
BackAnimation backAnimation) {
|
BackAnimation backAnimation,
|
||||||
|
TaskStackChangeListeners taskStackChangeListeners) {
|
||||||
// TODO: adding this in the ctor results in a dagger dependency cycle :(
|
// TODO: adding this in the ctor results in a dagger dependency cycle :(
|
||||||
mCommandQueue = commandQueue;
|
mCommandQueue = commandQueue;
|
||||||
mOverviewProxyService = overviewProxyService;
|
mOverviewProxyService = overviewProxyService;
|
||||||
@@ -189,6 +203,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
mPipOptional = pipOptional;
|
mPipOptional = pipOptional;
|
||||||
mBackAnimation = backAnimation;
|
mBackAnimation = backAnimation;
|
||||||
mLightBarTransitionsController = createLightBarTransitionsController();
|
mLightBarTransitionsController = createLightBarTransitionsController();
|
||||||
|
mTaskStackChangeListeners = taskStackChangeListeners;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Separated into a method to keep setDependencies() clean/readable.
|
// Separated into a method to keep setDependencies() clean/readable.
|
||||||
@@ -234,6 +249,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
mPipOptional.ifPresent(this::addPipExclusionBoundsChangeListener);
|
mPipOptional.ifPresent(this::addPipExclusionBoundsChangeListener);
|
||||||
mEdgeBackGestureHandler.setBackAnimation(mBackAnimation);
|
mEdgeBackGestureHandler.setBackAnimation(mBackAnimation);
|
||||||
mEdgeBackGestureHandler.onConfigurationChanged(mContext.getResources().getConfiguration());
|
mEdgeBackGestureHandler.onConfigurationChanged(mContext.getResources().getConfiguration());
|
||||||
|
mTaskStackChangeListeners.registerTaskStackListener(mTaskStackListener);
|
||||||
mInitialized = true;
|
mInitialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -253,6 +269,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
mLightBarTransitionsController.destroy();
|
mLightBarTransitionsController.destroy();
|
||||||
mLightBarController.setNavigationBar(null);
|
mLightBarController.setNavigationBar(null);
|
||||||
mPipOptional.ifPresent(this::removePipExclusionBoundsChangeListener);
|
mPipOptional.ifPresent(this::removePipExclusionBoundsChangeListener);
|
||||||
|
mTaskStackChangeListeners.unregisterTaskStackListener(mTaskStackListener);
|
||||||
mInitialized = false;
|
mInitialized = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -300,8 +317,6 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
.setFlag(SYSUI_STATE_NAV_BAR_HIDDEN, !isWindowVisible())
|
.setFlag(SYSUI_STATE_NAV_BAR_HIDDEN, !isWindowVisible())
|
||||||
.setFlag(SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY,
|
.setFlag(SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY,
|
||||||
allowSystemGestureIgnoringBarVisibility())
|
allowSystemGestureIgnoringBarVisibility())
|
||||||
.setFlag(SYSUI_STATE_SCREEN_PINNING,
|
|
||||||
ActivityManagerWrapper.getInstance().isScreenPinningActive())
|
|
||||||
.setFlag(SYSUI_STATE_IMMERSIVE_MODE, isImmersiveMode())
|
.setFlag(SYSUI_STATE_IMMERSIVE_MODE, isImmersiveMode())
|
||||||
.commitUpdate(mDisplayId);
|
.commitUpdate(mDisplayId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ import com.android.systemui.flags.FeatureFlags;
|
|||||||
import com.android.systemui.model.SysUiState;
|
import com.android.systemui.model.SysUiState;
|
||||||
import com.android.systemui.recents.OverviewProxyService;
|
import com.android.systemui.recents.OverviewProxyService;
|
||||||
import com.android.systemui.shared.recents.utilities.Utilities;
|
import com.android.systemui.shared.recents.utilities.Utilities;
|
||||||
|
import com.android.systemui.shared.system.TaskStackChangeListeners;
|
||||||
import com.android.systemui.statusbar.CommandQueue;
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
import com.android.systemui.statusbar.phone.AutoHideController;
|
import com.android.systemui.statusbar.phone.AutoHideController;
|
||||||
import com.android.systemui.statusbar.phone.LightBarController;
|
import com.android.systemui.statusbar.phone.LightBarController;
|
||||||
@@ -102,10 +103,10 @@ public class NavigationBarControllerTest extends SysuiTestCase {
|
|||||||
mock(NavBarHelper.class),
|
mock(NavBarHelper.class),
|
||||||
mTaskbarDelegate,
|
mTaskbarDelegate,
|
||||||
mNavigationBarFactory,
|
mNavigationBarFactory,
|
||||||
mock(StatusBarKeyguardViewManager.class),
|
|
||||||
mock(DumpManager.class),
|
mock(DumpManager.class),
|
||||||
mock(AutoHideController.class),
|
mock(AutoHideController.class),
|
||||||
mock(LightBarController.class),
|
mock(LightBarController.class),
|
||||||
|
TaskStackChangeListeners.getTestInstance(),
|
||||||
Optional.of(mock(Pip.class)),
|
Optional.of(mock(Pip.class)),
|
||||||
Optional.of(mock(BackAnimation.class)),
|
Optional.of(mock(BackAnimation.class)),
|
||||||
mock(FeatureFlags.class)));
|
mock(FeatureFlags.class)));
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import static android.view.WindowInsets.Type.ime;
|
|||||||
|
|
||||||
import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.HOME_BUTTON_LONG_PRESS_DURATION_MS;
|
import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.HOME_BUTTON_LONG_PRESS_DURATION_MS;
|
||||||
import static com.android.systemui.navigationbar.NavigationBar.NavBarActionEvent.NAVBAR_ASSIST_LONGPRESS;
|
import static com.android.systemui.navigationbar.NavigationBar.NavBarActionEvent.NAVBAR_ASSIST_LONGPRESS;
|
||||||
|
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
@@ -44,6 +45,7 @@ import static org.mockito.Mockito.times;
|
|||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.app.ActivityManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.hardware.display.DisplayManagerGlobal;
|
import android.hardware.display.DisplayManagerGlobal;
|
||||||
@@ -90,6 +92,7 @@ import com.android.systemui.settings.UserTracker;
|
|||||||
import com.android.systemui.shade.NotificationShadeWindowView;
|
import com.android.systemui.shade.NotificationShadeWindowView;
|
||||||
import com.android.systemui.shade.ShadeController;
|
import com.android.systemui.shade.ShadeController;
|
||||||
import com.android.systemui.shared.rotation.RotationButtonController;
|
import com.android.systemui.shared.rotation.RotationButtonController;
|
||||||
|
import com.android.systemui.shared.system.TaskStackChangeListeners;
|
||||||
import com.android.systemui.statusbar.CommandQueue;
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
||||||
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
||||||
@@ -203,6 +206,8 @@ public class NavigationBarTest extends SysuiTestCase {
|
|||||||
private ViewRootImpl mViewRootImpl;
|
private ViewRootImpl mViewRootImpl;
|
||||||
private FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock());
|
private FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock());
|
||||||
private DeviceConfigProxyFake mDeviceConfigProxyFake = new DeviceConfigProxyFake();
|
private DeviceConfigProxyFake mDeviceConfigProxyFake = new DeviceConfigProxyFake();
|
||||||
|
private TaskStackChangeListeners mTaskStackChangeListeners =
|
||||||
|
TaskStackChangeListeners.getTestInstance();
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
public final LeakCheckedTest.SysuiLeakCheck mLeakCheck = new LeakCheckedTest.SysuiLeakCheck();
|
public final LeakCheckedTest.SysuiLeakCheck mLeakCheck = new LeakCheckedTest.SysuiLeakCheck();
|
||||||
@@ -437,6 +442,14 @@ public class NavigationBarTest extends SysuiTestCase {
|
|||||||
verify(mNavBarHelper, times(1)).getCurrentSysuiState();
|
verify(mNavBarHelper, times(1)).getCurrentSysuiState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testScreenPinningEnabled_updatesSysuiState() {
|
||||||
|
mNavigationBar.init();
|
||||||
|
mTaskStackChangeListeners.getListenerImpl().onLockTaskModeChanged(
|
||||||
|
ActivityManager.LOCK_TASK_MODE_PINNED);
|
||||||
|
verify(mMockSysUiState).setFlag(eq(SYSUI_STATE_SCREEN_PINNING), eq(true));
|
||||||
|
}
|
||||||
|
|
||||||
private NavigationBar createNavBar(Context context) {
|
private NavigationBar createNavBar(Context context) {
|
||||||
DeviceProvisionedController deviceProvisionedController =
|
DeviceProvisionedController deviceProvisionedController =
|
||||||
mock(DeviceProvisionedController.class);
|
mock(DeviceProvisionedController.class);
|
||||||
@@ -481,7 +494,8 @@ public class NavigationBarTest extends SysuiTestCase {
|
|||||||
mEdgeBackGestureHandler,
|
mEdgeBackGestureHandler,
|
||||||
Optional.of(mock(BackAnimation.class)),
|
Optional.of(mock(BackAnimation.class)),
|
||||||
mUserContextProvider,
|
mUserContextProvider,
|
||||||
mWakefulnessLifecycle));
|
mWakefulnessLifecycle,
|
||||||
|
mTaskStackChangeListeners));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processAllMessages() {
|
private void processAllMessages() {
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
package com.android.systemui.navigationbar
|
package com.android.systemui.navigationbar
|
||||||
|
|
||||||
|
import android.app.ActivityManager
|
||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.dump.DumpManager
|
import com.android.systemui.dump.DumpManager
|
||||||
import com.android.systemui.model.SysUiState
|
import com.android.systemui.model.SysUiState
|
||||||
import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler
|
import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler
|
||||||
import com.android.systemui.recents.OverviewProxyService
|
import com.android.systemui.recents.OverviewProxyService
|
||||||
|
import com.android.systemui.shared.system.QuickStepContract
|
||||||
|
import com.android.systemui.shared.system.TaskStackChangeListeners
|
||||||
import com.android.systemui.statusbar.CommandQueue
|
import com.android.systemui.statusbar.CommandQueue
|
||||||
import com.android.systemui.statusbar.phone.AutoHideController
|
import com.android.systemui.statusbar.phone.AutoHideController
|
||||||
import com.android.systemui.statusbar.phone.LightBarController
|
import com.android.systemui.statusbar.phone.LightBarController
|
||||||
@@ -14,6 +17,7 @@ import com.android.wm.shell.back.BackAnimation
|
|||||||
import com.android.wm.shell.pip.Pip
|
import com.android.wm.shell.pip.Pip
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
import org.mockito.ArgumentMatchers
|
||||||
import org.mockito.Mock
|
import org.mockito.Mock
|
||||||
import org.mockito.Mockito.`when`
|
import org.mockito.Mockito.`when`
|
||||||
import org.mockito.Mockito.any
|
import org.mockito.Mockito.any
|
||||||
@@ -30,6 +34,7 @@ class TaskbarDelegateTest : SysuiTestCase() {
|
|||||||
val MODE_GESTURE = 0;
|
val MODE_GESTURE = 0;
|
||||||
val MODE_THREE_BUTTON = 1;
|
val MODE_THREE_BUTTON = 1;
|
||||||
|
|
||||||
|
private lateinit var mTaskStackChangeListeners: TaskStackChangeListeners
|
||||||
private lateinit var mTaskbarDelegate: TaskbarDelegate
|
private lateinit var mTaskbarDelegate: TaskbarDelegate
|
||||||
@Mock
|
@Mock
|
||||||
lateinit var mEdgeBackGestureHandlerFactory : EdgeBackGestureHandler.Factory
|
lateinit var mEdgeBackGestureHandlerFactory : EdgeBackGestureHandler.Factory
|
||||||
@@ -69,11 +74,12 @@ class TaskbarDelegateTest : SysuiTestCase() {
|
|||||||
`when`(mLightBarControllerFactory.create(any())).thenReturn(mLightBarTransitionController)
|
`when`(mLightBarControllerFactory.create(any())).thenReturn(mLightBarTransitionController)
|
||||||
`when`(mNavBarHelper.currentSysuiState).thenReturn(mCurrentSysUiState)
|
`when`(mNavBarHelper.currentSysuiState).thenReturn(mCurrentSysUiState)
|
||||||
`when`(mSysUiState.setFlag(anyInt(), anyBoolean())).thenReturn(mSysUiState)
|
`when`(mSysUiState.setFlag(anyInt(), anyBoolean())).thenReturn(mSysUiState)
|
||||||
|
mTaskStackChangeListeners = TaskStackChangeListeners.getTestInstance()
|
||||||
mTaskbarDelegate = TaskbarDelegate(context, mEdgeBackGestureHandlerFactory,
|
mTaskbarDelegate = TaskbarDelegate(context, mEdgeBackGestureHandlerFactory,
|
||||||
mLightBarControllerFactory)
|
mLightBarControllerFactory)
|
||||||
mTaskbarDelegate.setDependencies(mCommandQueue, mOverviewProxyService, mNavBarHelper,
|
mTaskbarDelegate.setDependencies(mCommandQueue, mOverviewProxyService, mNavBarHelper,
|
||||||
mNavigationModeController, mSysUiState, mDumpManager, mAutoHideController,
|
mNavigationModeController, mSysUiState, mDumpManager, mAutoHideController,
|
||||||
mLightBarController, mOptionalPip, mBackAnimation)
|
mLightBarController, mOptionalPip, mBackAnimation, mTaskStackChangeListeners)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -90,4 +96,15 @@ class TaskbarDelegateTest : SysuiTestCase() {
|
|||||||
mTaskbarDelegate.init(DISPLAY_ID)
|
mTaskbarDelegate.init(DISPLAY_ID)
|
||||||
verify(mEdgeBackGestureHandler, times(1)).onNavigationModeChanged(MODE_GESTURE)
|
verify(mEdgeBackGestureHandler, times(1)).onNavigationModeChanged(MODE_GESTURE)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun screenPinningEnabled_updatesSysuiState() {
|
||||||
|
mTaskbarDelegate.init(DISPLAY_ID)
|
||||||
|
mTaskStackChangeListeners.listenerImpl.onLockTaskModeChanged(
|
||||||
|
ActivityManager.LOCK_TASK_MODE_PINNED)
|
||||||
|
verify(mSysUiState, times(1)).setFlag(
|
||||||
|
ArgumentMatchers.eq(QuickStepContract.SYSUI_STATE_SCREEN_PINNING),
|
||||||
|
ArgumentMatchers.eq(true)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user