diff options
5 files changed, 35 insertions, 4 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModel.kt index 7b0b23ffb2ff..b5d9e2ae888c 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModel.kt @@ -19,6 +19,7 @@ package com.android.systemui.keyguard.ui.viewmodel import android.graphics.Color import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor +import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor import com.android.systemui.keyguard.shared.model.KeyguardState.ALTERNATE_BOUNCER @@ -41,6 +42,7 @@ constructor( keyguardTransitionInteractor: KeyguardTransitionInteractor, private val dismissCallbackRegistry: DismissCallbackRegistry, alternateBouncerInteractor: Lazy<AlternateBouncerInteractor>, + private val primaryBouncerInteractor: PrimaryBouncerInteractor, ) { // When we're fully transitioned to the AlternateBouncer, the alpha of the scrim should be: private val alternateBouncerScrimAlpha = .66f @@ -73,5 +75,6 @@ constructor( fun onBackRequested() { statusBarKeyguardViewManager.hideAlternateBouncer(false) dismissCallbackRegistry.notifyDismissCancelled() + primaryBouncerInteractor.setDismissAction(null, null) } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index f11fd7b29c18..09b6b6895ebc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -68,6 +68,8 @@ import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor; import com.android.systemui.deviceentry.shared.DeviceEntryUdfpsRefactor; import com.android.systemui.dock.DockManager; import com.android.systemui.dreams.DreamOverlayStateController; +import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.keyguard.DismissCallbackRegistry; import com.android.systemui.keyguard.KeyguardWmStateRefactor; import com.android.systemui.keyguard.domain.interactor.KeyguardDismissActionInteractor; import com.android.systemui.keyguard.domain.interactor.KeyguardSurfaceBehindInteractor; @@ -170,6 +172,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb private final Lazy<ShadeController> mShadeController; private final Lazy<SceneInteractor> mSceneInteractorLazy; private final Lazy<DeviceEntryInteractor> mDeviceEntryInteractorLazy; + private final DismissCallbackRegistry mDismissCallbackRegistry; private Job mListenForAlternateBouncerTransitionSteps = null; private Job mListenForKeyguardAuthenticatedBiometricsHandled = null; @@ -400,7 +403,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb Lazy<SceneInteractor> sceneInteractorLazy, StatusBarKeyguardViewManagerInteractor statusBarKeyguardViewManagerInteractor, @Main DelayableExecutor executor, - Lazy<DeviceEntryInteractor> deviceEntryInteractorLazy + Lazy<DeviceEntryInteractor> deviceEntryInteractorLazy, + DismissCallbackRegistry dismissCallbackRegistry ) { mContext = context; mExecutor = executor; @@ -437,6 +441,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb mSceneInteractorLazy = sceneInteractorLazy; mStatusBarKeyguardViewManagerInteractor = statusBarKeyguardViewManagerInteractor; mDeviceEntryInteractorLazy = deviceEntryInteractorLazy; + mDismissCallbackRegistry = dismissCallbackRegistry; } KeyguardTransitionInteractor mKeyguardTransitionInteractor; @@ -994,6 +999,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } if (!SceneContainerFlag.isEnabled() && hideBouncerWhenShowing) { hideAlternateBouncer(true); + mDismissCallbackRegistry.notifyDismissCancelled(); + mPrimaryBouncerInteractor.setDismissAction(null, null); } mKeyguardUpdateManager.sendKeyguardReset(); updateStates(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModelTest.kt index 664a0bdedec4..844a166be47b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModelTest.kt @@ -21,6 +21,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.policy.IKeyguardDismissCallback import com.android.systemui.SysuiTestCase +import com.android.systemui.bouncer.domain.interactor.primaryBouncerInteractor import com.android.systemui.concurrency.fakeExecutor import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectValues @@ -30,6 +31,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.TransitionStep import com.android.systemui.kosmos.testScope +import com.android.systemui.plugins.ActivityStarter import com.android.systemui.statusbar.phone.statusBarKeyguardViewManager import com.android.systemui.testKosmos import com.android.systemui.util.mockito.any @@ -69,6 +71,12 @@ class AlternateBouncerViewModelTest : SysuiTestCase() { @Test fun onBackRequested() = testScope.runTest { + kosmos.primaryBouncerInteractor.setDismissAction( + mock(ActivityStarter.OnDismissAction::class.java), + {}, + ) + assertThat(kosmos.primaryBouncerInteractor.bouncerDismissAction).isNotNull() + val dismissCallback = mock(IKeyguardDismissCallback::class.java) kosmos.dismissCallbackRegistry.addCallback(dismissCallback) @@ -76,6 +84,7 @@ class AlternateBouncerViewModelTest : SysuiTestCase() { kosmos.fakeExecutor.runAllReady() verify(statusBarKeyguardViewManager).hideAlternateBouncer(any()) verify(dismissCallback).onDismissCancelled() + assertThat(kosmos.primaryBouncerInteractor.bouncerDismissAction).isNull() } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java index b75ac2bc9bde..54c03e894804 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java @@ -83,6 +83,7 @@ import com.android.systemui.dock.DockManager; import com.android.systemui.dreams.DreamOverlayStateController; import com.android.systemui.flags.DisableSceneContainer; import com.android.systemui.flags.EnableSceneContainer; +import com.android.systemui.keyguard.DismissCallbackRegistry; import com.android.systemui.keyguard.domain.interactor.KeyguardDismissActionInteractor; import com.android.systemui.keyguard.domain.interactor.KeyguardSurfaceBehindInteractor; import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor; @@ -171,6 +172,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { @Mock private SelectedUserInteractor mSelectedUserInteractor; @Mock private DeviceEntryInteractor mDeviceEntryInteractor; @Mock private SceneInteractor mSceneInteractor; + @Mock private DismissCallbackRegistry mDismissCallbackRegistry; private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; private PrimaryBouncerCallbackInteractor.PrimaryBouncerExpansionCallback @@ -242,7 +244,8 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { () -> mSceneInteractor, mock(StatusBarKeyguardViewManagerInteractor.class), mExecutor, - () -> mDeviceEntryInteractor) { + () -> mDeviceEntryInteractor, + mDismissCallbackRegistry) { @Override public ViewRootImpl getViewRootImpl() { return mViewRootImpl; @@ -765,7 +768,8 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { () -> mSceneInteractor, mock(StatusBarKeyguardViewManagerInteractor.class), mExecutor, - () -> mDeviceEntryInteractor) { + () -> mDeviceEntryInteractor, + mDismissCallbackRegistry) { @Override public ViewRootImpl getViewRootImpl() { return mViewRootImpl; @@ -777,7 +781,11 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { } @Test + @DisableSceneContainer public void testResetHideBouncerWhenShowing_alternateBouncerHides() { + reset(mDismissCallbackRegistry); + reset(mPrimaryBouncerInteractor); + // GIVEN the keyguard is showing reset(mAlternateBouncerInteractor); when(mKeyguardStateController.isShowing()).thenReturn(true); @@ -785,8 +793,10 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { // WHEN SBKV is reset with hideBouncerWhenShowing=true mStatusBarKeyguardViewManager.reset(true); - // THEN alternate bouncer is hidden + // THEN alternate bouncer is hidden and dismiss actions reset verify(mAlternateBouncerInteractor).hide(); + verify(mDismissCallbackRegistry).notifyDismissCancelled(); + verify(mPrimaryBouncerInteractor).setDismissAction(eq(null), eq(null)); } @Test diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModelKosmos.kt index 29583153ccc6..f1d87fe3abb7 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModelKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModelKosmos.kt @@ -19,6 +19,7 @@ package com.android.systemui.keyguard.ui.viewmodel import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor +import com.android.systemui.bouncer.domain.interactor.primaryBouncerInteractor import com.android.systemui.keyguard.dismissCallbackRegistry import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor import com.android.systemui.kosmos.Kosmos @@ -32,5 +33,6 @@ val Kosmos.alternateBouncerViewModel by Fixture { keyguardTransitionInteractor = keyguardTransitionInteractor, dismissCallbackRegistry = dismissCallbackRegistry, alternateBouncerInteractor = { alternateBouncerInteractor }, + primaryBouncerInteractor = primaryBouncerInteractor, ) } |