Hide task bar on AOD
The previous logic only checks the existance of navigation bar. Check task bar as well to make sure task bar gesture bar can be hidden correctly on AOD. Inject StatusBarKeyguardViewManager into TaskbarDelegate instead of the reverse way to avoid loop injection. Bug: 259759616 Test: See the bug's reproduce steps. Test: atest StatusBarKeyguardViewManagerTest TaskbarDelegateTest Change-Id: I8f1764d1baf59a5fbf44ab6f92845eac7c231608
This commit is contained in:
@@ -41,7 +41,6 @@ import static com.android.systemui.statusbar.phone.BarTransitions.TransitionMode
|
||||
|
||||
import android.app.StatusBarManager;
|
||||
import android.app.StatusBarManager.WindowVisibleState;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.graphics.Rect;
|
||||
@@ -68,7 +67,6 @@ import com.android.systemui.model.SysUiState;
|
||||
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.shared.system.TaskStackChangeListener;
|
||||
import com.android.systemui.shared.system.TaskStackChangeListeners;
|
||||
@@ -78,6 +76,7 @@ import com.android.systemui.statusbar.phone.AutoHideController;
|
||||
import com.android.systemui.statusbar.phone.BarTransitions;
|
||||
import com.android.systemui.statusbar.phone.LightBarController;
|
||||
import com.android.systemui.statusbar.phone.LightBarTransitionsController;
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||
import com.android.wm.shell.back.BackAnimation;
|
||||
import com.android.wm.shell.pip.Pip;
|
||||
|
||||
@@ -169,16 +168,20 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
||||
|
||||
private BackAnimation mBackAnimation;
|
||||
|
||||
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
@Inject
|
||||
public TaskbarDelegate(Context context,
|
||||
EdgeBackGestureHandler.Factory edgeBackGestureHandlerFactory,
|
||||
LightBarTransitionsController.Factory lightBarTransitionsControllerFactory) {
|
||||
LightBarTransitionsController.Factory lightBarTransitionsControllerFactory,
|
||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
|
||||
mLightBarTransitionsControllerFactory = lightBarTransitionsControllerFactory;
|
||||
mEdgeBackGestureHandler = edgeBackGestureHandlerFactory.create(context);
|
||||
|
||||
mContext = context;
|
||||
mDisplayManager = mContext.getSystemService(DisplayManager.class);
|
||||
mPipListener = mEdgeBackGestureHandler::setPipStashExclusionBounds;
|
||||
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
|
||||
mStatusBarKeyguardViewManager.setTaskbarDelegate(this);
|
||||
}
|
||||
|
||||
public void setDependencies(CommandQueue commandQueue,
|
||||
|
||||
@@ -66,6 +66,7 @@ import com.android.systemui.keyguard.domain.interactor.PrimaryBouncerCallbackInt
|
||||
import com.android.systemui.keyguard.domain.interactor.PrimaryBouncerInteractor;
|
||||
import com.android.systemui.navigationbar.NavigationBarView;
|
||||
import com.android.systemui.navigationbar.NavigationModeController;
|
||||
import com.android.systemui.navigationbar.TaskbarDelegate;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.shade.NotificationPanelViewController;
|
||||
import com.android.systemui.shade.ShadeController;
|
||||
@@ -300,6 +301,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
||||
@Nullable private KeyguardBypassController mBypassController;
|
||||
@Nullable private OccludingAppBiometricUI mOccludingAppBiometricUI;
|
||||
|
||||
@Nullable private TaskbarDelegate mTaskbarDelegate;
|
||||
private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback =
|
||||
new KeyguardUpdateMonitorCallback() {
|
||||
@Override
|
||||
@@ -564,6 +566,10 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
||||
updateStates();
|
||||
}
|
||||
|
||||
public void setTaskbarDelegate(TaskbarDelegate taskbarDelegate) {
|
||||
mTaskbarDelegate = taskbarDelegate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the keyguard. Will handle creating and attaching to the view manager
|
||||
* lazily.
|
||||
@@ -1194,7 +1200,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
||||
* Updates the visibility of the nav bar window (which will cause insets changes).
|
||||
*/
|
||||
protected void updateNavigationBarVisibility(boolean navBarVisible) {
|
||||
if (mCentralSurfaces.getNavigationBarView() != null) {
|
||||
if (mCentralSurfaces.getNavigationBarView() != null
|
||||
|| (mTaskbarDelegate != null && mTaskbarDelegate.isInitialized())) {
|
||||
if (navBarVisible) {
|
||||
long delay = getNavBarShowDelay();
|
||||
if (delay == 0) {
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.android.systemui.statusbar.CommandQueue
|
||||
import com.android.systemui.statusbar.phone.AutoHideController
|
||||
import com.android.systemui.statusbar.phone.LightBarController
|
||||
import com.android.systemui.statusbar.phone.LightBarTransitionsController
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
|
||||
import com.android.wm.shell.back.BackAnimation
|
||||
import com.android.wm.shell.pip.Pip
|
||||
import org.junit.Before
|
||||
@@ -66,6 +67,8 @@ class TaskbarDelegateTest : SysuiTestCase() {
|
||||
lateinit var mBackAnimation: BackAnimation
|
||||
@Mock
|
||||
lateinit var mCurrentSysUiState: NavBarHelper.CurrentSysuiState
|
||||
@Mock
|
||||
lateinit var mStatusBarKeyguardViewManager: StatusBarKeyguardViewManager
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
@@ -76,7 +79,7 @@ class TaskbarDelegateTest : SysuiTestCase() {
|
||||
`when`(mSysUiState.setFlag(anyInt(), anyBoolean())).thenReturn(mSysUiState)
|
||||
mTaskStackChangeListeners = TaskStackChangeListeners.getTestInstance()
|
||||
mTaskbarDelegate = TaskbarDelegate(context, mEdgeBackGestureHandlerFactory,
|
||||
mLightBarControllerFactory)
|
||||
mLightBarControllerFactory, mStatusBarKeyguardViewManager)
|
||||
mTaskbarDelegate.setDependencies(mCommandQueue, mOverviewProxyService, mNavBarHelper,
|
||||
mNavigationModeController, mSysUiState, mDumpManager, mAutoHideController,
|
||||
mLightBarController, mOptionalPip, mBackAnimation, mTaskStackChangeListeners)
|
||||
|
||||
@@ -38,6 +38,8 @@ import android.testing.TestableLooper;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewRootImpl;
|
||||
import android.view.WindowInsets;
|
||||
import android.view.WindowInsetsController;
|
||||
import android.window.BackEvent;
|
||||
import android.window.OnBackAnimationCallback;
|
||||
import android.window.OnBackInvokedCallback;
|
||||
@@ -65,8 +67,10 @@ import com.android.systemui.keyguard.domain.interactor.PrimaryBouncerCallbackInt
|
||||
import com.android.systemui.keyguard.domain.interactor.PrimaryBouncerCallbackInteractor.PrimaryBouncerExpansionCallback;
|
||||
import com.android.systemui.keyguard.domain.interactor.PrimaryBouncerInteractor;
|
||||
import com.android.systemui.navigationbar.NavigationModeController;
|
||||
import com.android.systemui.navigationbar.TaskbarDelegate;
|
||||
import com.android.systemui.plugins.ActivityStarter.OnDismissAction;
|
||||
import com.android.systemui.shade.NotificationPanelViewController;
|
||||
import com.android.systemui.shade.NotificationShadeWindowView;
|
||||
import com.android.systemui.shade.ShadeController;
|
||||
import com.android.systemui.shade.ShadeExpansionChangeEvent;
|
||||
import com.android.systemui.shade.ShadeExpansionStateManager;
|
||||
@@ -123,6 +127,9 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
|
||||
@Mock private BouncerView mBouncerView;
|
||||
@Mock private BouncerViewDelegate mBouncerViewDelegate;
|
||||
@Mock private OnBackAnimationCallback mBouncerViewDelegateBackCallback;
|
||||
@Mock private NotificationShadeWindowView mNotificationShadeWindowView;
|
||||
@Mock private WindowInsetsController mWindowInsetsController;
|
||||
@Mock private TaskbarDelegate mTaskbarDelegate;
|
||||
|
||||
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
private PrimaryBouncerCallbackInteractor.PrimaryBouncerExpansionCallback
|
||||
@@ -151,6 +158,11 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
|
||||
.isEnabled(Flags.WM_ENABLE_PREDICTIVE_BACK_BOUNCER_ANIM))
|
||||
.thenReturn(true);
|
||||
|
||||
when(mCentralSurfaces.getNotificationShadeWindowView())
|
||||
.thenReturn(mNotificationShadeWindowView);
|
||||
when(mNotificationShadeWindowView.getWindowInsetsController())
|
||||
.thenReturn(mWindowInsetsController);
|
||||
|
||||
mStatusBarKeyguardViewManager =
|
||||
new StatusBarKeyguardViewManager(
|
||||
getContext(),
|
||||
@@ -639,6 +651,14 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
|
||||
verify(mCentralSurfaces).setBouncerShowingOverDream(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHideTaskbar() {
|
||||
when(mTaskbarDelegate.isInitialized()).thenReturn(true);
|
||||
mStatusBarKeyguardViewManager.setTaskbarDelegate(mTaskbarDelegate);
|
||||
mStatusBarKeyguardViewManager.updateNavigationBarVisibility(false);
|
||||
verify(mWindowInsetsController).hide(WindowInsets.Type.navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void hideAlternateBouncer_beforeCentralSurfacesRegistered() {
|
||||
mStatusBarKeyguardViewManager =
|
||||
|
||||
Reference in New Issue
Block a user