summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ale Nijamkin <nijamkin@google.com> 2024-11-25 21:43:38 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-11-25 21:43:38 +0000
commit3161f3e123a35a7b14b34b00dbc9063e70f22d7c (patch)
tree7d0e6ab93cdfa7615e1e988bd17fb4b496f9a220
parented6a189ec9abe44f4c15404dc236dec1c8a0b117 (diff)
parentf5e85a245902c507f819e125a5cbaced77eeb4b3 (diff)
Merge "[flexiglass] Don't clear pending keyguard dismiss action when..." into main
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt9
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModelTest.kt24
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt77
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java33
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModel.kt11
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractor.kt58
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java14
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelKosmos.kt2
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorKosmos.kt4
10 files changed, 122 insertions, 121 deletions
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt
index ae92d259d62b..85f549d43a11 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt
@@ -21,6 +21,7 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.DisposableEffect
import androidx.compose.ui.Modifier
import com.android.compose.animation.scene.ElementKey
import com.android.compose.animation.scene.SceneScope
@@ -71,9 +72,7 @@ constructor(
}
@Composable
- override fun SceneScope.Content(
- modifier: Modifier,
- ) =
+ override fun SceneScope.Content(modifier: Modifier) =
BouncerScene(
viewModel = rememberViewModel("BouncerScene") { contentViewModelFactory.create() },
dialogFactory = dialogFactory,
@@ -89,6 +88,8 @@ private fun SceneScope.BouncerScene(
) {
val backgroundColor = MaterialTheme.colorScheme.surface
+ DisposableEffect(Unit) { onDispose { viewModel.onUiDestroyed() } }
+
Box(modifier) {
Canvas(Modifier.element(Bouncer.Elements.Background).fillMaxSize()) {
drawRect(color = backgroundColor)
@@ -101,7 +102,7 @@ private fun SceneScope.BouncerScene(
dialogFactory,
Modifier.element(Bouncer.Elements.Content)
.sysuiResTag(Bouncer.TestTags.Root)
- .fillMaxSize()
+ .fillMaxSize(),
)
}
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModelTest.kt
index 3bf4460e0a4a..94f6769ba406 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModelTest.kt
@@ -34,6 +34,11 @@ import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
+import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
+import com.android.systemui.keyguard.shared.model.DismissAction
+import com.android.systemui.keyguard.shared.model.KeyguardDone
+import com.android.systemui.kosmos.collectLastValue
+import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.res.R
@@ -212,6 +217,25 @@ class BouncerSceneContentViewModelTest : SysuiTestCase() {
assertThat(isFoldSplitRequired).isTrue()
}
+ @Test
+ fun onUiDestroyed_clearsPendingDismissAction() =
+ kosmos.runTest {
+ val dismissAction by collectLastValue(fakeKeyguardRepository.dismissAction)
+ fakeKeyguardRepository.setDismissAction(
+ DismissAction.RunImmediately(
+ onDismissAction = { KeyguardDone.IMMEDIATE },
+ onCancelAction = {},
+ message = "",
+ willAnimateOnLockscreen = true,
+ )
+ )
+ assertThat(dismissAction).isNotEqualTo(DismissAction.None)
+
+ underTest.onUiDestroyed()
+
+ assertThat(dismissAction).isEqualTo(DismissAction.None)
+ }
+
private fun authMethodsToTest(): List<AuthenticationMethodModel> {
return listOf(None, Pin, Password, Pattern, Sim)
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt
index e1496879a34b..dadcf71a4723 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt
@@ -35,10 +35,9 @@ import com.android.systemui.keyguard.data.repository.keyguardRepository
import com.android.systemui.keyguard.shared.model.DismissAction
import com.android.systemui.keyguard.shared.model.KeyguardDone
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
+import com.android.systemui.kosmos.collectLastValue
+import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
-import com.android.systemui.power.data.repository.fakePowerRepository
-import com.android.systemui.power.shared.model.WakeSleepReason
-import com.android.systemui.power.shared.model.WakefulnessState
import com.android.systemui.scene.data.repository.Idle
import com.android.systemui.scene.data.repository.Transition
import com.android.systemui.scene.data.repository.setSceneTransition
@@ -222,28 +221,6 @@ class KeyguardDismissActionInteractorTest : SysuiTestCase() {
}
@Test
- fun resetDismissAction() =
- testScope.runTest {
- kosmos.setSceneTransition(Idle(Scenes.Bouncer))
- var wasOnCancelInvoked = false
- startInteractor()
- keyguardRepository.setDismissAction(
- DismissAction.RunAfterKeyguardGone(
- dismissAction = {},
- onCancelAction = { wasOnCancelInvoked = true },
- message = "message",
- willAnimateOnLockscreen = true,
- )
- )
- assertThat(wasOnCancelInvoked).isFalse()
- kosmos.setSceneTransition(Idle(Scenes.Lockscreen))
- runCurrent()
-
- assertThat(wasOnCancelInvoked).isTrue()
- assertThat(keyguardRepository.dismissAction.value).isEqualTo(DismissAction.None)
- }
-
- @Test
fun doNotResetDismissActionOnUnlockedShade() =
testScope.runTest {
kosmos.setSceneTransition(Idle(Scenes.Bouncer))
@@ -272,37 +249,6 @@ class KeyguardDismissActionInteractorTest : SysuiTestCase() {
}
@Test
- fun resetDismissAction_onBouncer_OnAsleep() =
- testScope.runTest {
- kosmos.setSceneTransition(Idle(Scenes.Bouncer))
- kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
- AuthenticationMethodModel.None
- )
- var wasOnCancelInvoked = false
- startInteractor()
-
- keyguardRepository.setDismissAction(
- DismissAction.RunAfterKeyguardGone(
- dismissAction = {},
- onCancelAction = { wasOnCancelInvoked = true },
- message = "message",
- willAnimateOnLockscreen = true,
- )
- )
- assertThat(wasOnCancelInvoked).isFalse()
- kosmos.fakePowerRepository.updateWakefulness(
- rawState = WakefulnessState.ASLEEP,
- lastWakeReason = WakeSleepReason.POWER_BUTTON,
- lastSleepReason = WakeSleepReason.TIMEOUT,
- powerButtonLaunchGestureTriggered = false,
- )
- runCurrent()
-
- assertThat(wasOnCancelInvoked).isTrue()
- assertThat(keyguardRepository.dismissAction.value).isEqualTo(DismissAction.None)
- }
-
- @Test
fun setDismissAction_callsCancelRunnableOnPreviousDismissAction() =
testScope.runTest {
val dismissAction by collectLastValue(keyguardRepository.dismissAction)
@@ -410,6 +356,25 @@ class KeyguardDismissActionInteractorTest : SysuiTestCase() {
assertThat(wasCancelActionInvoked).isFalse()
}
+ @Test
+ fun clearDismissAction() =
+ kosmos.runTest {
+ val dismissAction by collectLastValue(fakeKeyguardRepository.dismissAction)
+ fakeKeyguardRepository.setDismissAction(
+ DismissAction.RunImmediately(
+ onDismissAction = { KeyguardDone.IMMEDIATE },
+ onCancelAction = {},
+ message = "",
+ willAnimateOnLockscreen = true,
+ )
+ )
+ assertThat(dismissAction).isNotEqualTo(DismissAction.None)
+
+ underTest.clearDismissAction()
+
+ assertThat(dismissAction).isEqualTo(DismissAction.None)
+ }
+
private fun TestScope.startInteractor() {
testScope.backgroundScope.launchTraced(
"KeyguardDismissActionInteractorTest#startInteractor"
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
index 0eb620343e6a..d174484219ff 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
@@ -190,6 +190,8 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
private ArgumentCaptor<OnBackInvokedCallback> mBackCallbackCaptor;
@Captor
private ArgumentCaptor<KeyguardUpdateMonitorCallback> mKeyguardUpdateMonitorCallback;
+ @Mock
+ private KeyguardDismissActionInteractor mKeyguardDismissActionInteractor;
@Rule
public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
@@ -236,7 +238,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
mKeyguardTransitionInteractor,
mock(KeyguardDismissTransitionInteractor.class),
StandardTestDispatcher(null, null),
- () -> mock(KeyguardDismissActionInteractor.class),
+ () -> mKeyguardDismissActionInteractor,
mSelectedUserInteractor,
mock(JavaAdapter.class),
() -> mSceneInteractor,
@@ -968,4 +970,33 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
);
verify(mAlternateBouncerInteractor).hide();
}
+
+ @Test
+ public void hideAlternateBouncer_clearsDismissActionByDefault() {
+ clearInvocations(mKeyguardDismissActionInteractor);
+
+ mStatusBarKeyguardViewManager.hideAlternateBouncer(/* updateScrim= */ true);
+
+ verify(mKeyguardDismissActionInteractor).clearDismissAction();
+ }
+
+ @Test
+ public void hideAlternateBouncer_clearsDismissActionExplicitly() {
+ clearInvocations(mKeyguardDismissActionInteractor);
+
+ mStatusBarKeyguardViewManager.hideAlternateBouncer(
+ /* updateScrim= */ true, /* clearDismissAction= */ true);
+
+ verify(mKeyguardDismissActionInteractor).clearDismissAction();
+ }
+
+ @Test
+ public void hideAlternateBouncer_doNotClearDismissActionExplicitly() {
+ clearInvocations(mKeyguardDismissActionInteractor);
+
+ mStatusBarKeyguardViewManager.hideAlternateBouncer(
+ /* updateScrim= */ true, /* clearDismissAction= */ false);
+
+ verify(mKeyguardDismissActionInteractor, never()).clearDismissAction();
+ }
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
index 9513c8e4d8be..5a9cbce73e4b 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
@@ -174,9 +174,20 @@ public interface KeyguardViewController {
/**
* Stop showing the alternate bouncer, if showing.
+ *
+ * <p>Should be like calling {@link #hideAlternateBouncer(boolean, boolean)} with a {@code true}
+ * {@code clearDismissAction} parameter.
*/
void hideAlternateBouncer(boolean updateScrim);
+ /**
+ * Stop showing the alternate bouncer, if showing.
+ *
+ * @param updateScrim Whether to update the scrim
+ * @param clearDismissAction Whether the pending dismiss action should be cleared
+ */
+ void hideAlternateBouncer(boolean updateScrim, boolean clearDismissAction);
+
// TODO: Deprecate registerStatusBar in KeyguardViewController interface. It is currently
// only used for testing purposes in StatusBarKeyguardViewManager, and it prevents us from
// achieving complete abstraction away from where the Keyguard View is mounted.
diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModel.kt b/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModel.kt
index 47d913746ed7..5deb751ced27 100644
--- a/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModel.kt
@@ -23,6 +23,7 @@ import android.graphics.Bitmap
import androidx.compose.ui.input.key.KeyEvent
import androidx.compose.ui.input.key.type
import androidx.core.graphics.drawable.toBitmap
+import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.app.tracing.coroutines.traceCoroutine
import com.android.systemui.authentication.domain.interactor.AuthenticationInteractor
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
@@ -35,6 +36,7 @@ import com.android.systemui.bouncer.ui.helper.BouncerHapticPlayer
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.common.shared.model.Text
import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.keyguard.domain.interactor.KeyguardDismissActionInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardMediaKeyInteractor
import com.android.systemui.lifecycle.ExclusiveActivatable
import com.android.systemui.user.ui.viewmodel.UserSwitcherViewModel
@@ -48,7 +50,6 @@ import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.map
-import com.android.app.tracing.coroutines.launchTraced as launch
/** Models UI state for the content of the bouncer scene. */
class BouncerSceneContentViewModel
@@ -67,6 +68,7 @@ constructor(
private val bouncerHapticPlayer: BouncerHapticPlayer,
private val keyguardMediaKeyInteractor: KeyguardMediaKeyInteractor,
private val bouncerActionButtonInteractor: BouncerActionButtonInteractor,
+ private val keyguardDismissActionInteractor: KeyguardDismissActionInteractor,
) : ExclusiveActivatable() {
private val _selectedUserImage = MutableStateFlow<Bitmap?>(null)
val selectedUserImage: StateFlow<Bitmap?> = _selectedUserImage.asStateFlow()
@@ -421,6 +423,13 @@ constructor(
}
}
+ /**
+ * Notifies that the bouncer UI has been destroyed (e.g. the composable left the composition).
+ */
+ fun onUiDestroyed() {
+ keyguardDismissActionInteractor.clearDismissAction()
+ }
+
data class DialogViewModel(
val text: String,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractor.kt
index 21090c12e9fe..cc8652c76181 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractor.kt
@@ -18,7 +18,6 @@
package com.android.systemui.keyguard.domain.interactor
import com.android.keyguard.logging.KeyguardLogger
-import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.bouncer.shared.flag.ComposeBouncerFlags
import com.android.systemui.dagger.SysUISingleton
@@ -28,15 +27,12 @@ import com.android.systemui.keyguard.data.repository.KeyguardRepository
import com.android.systemui.keyguard.shared.model.DismissAction
import com.android.systemui.keyguard.shared.model.KeyguardDone
import com.android.systemui.keyguard.shared.model.KeyguardState.GONE
-import com.android.systemui.keyguard.shared.model.KeyguardState.PRIMARY_BOUNCER
import com.android.systemui.lifecycle.ExclusiveActivatable
import com.android.systemui.log.core.LogLevel
-import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.domain.interactor.ShadeInteractor
-import com.android.systemui.util.kotlin.Utils.Companion.sampleFilter
import dagger.Lazy
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
@@ -66,8 +62,6 @@ constructor(
val dismissInteractor: KeyguardDismissInteractor,
@Application private val applicationScope: CoroutineScope,
deviceUnlockedInteractor: Lazy<DeviceUnlockedInteractor>,
- powerInteractor: PowerInteractor,
- alternateBouncerInteractor: AlternateBouncerInteractor,
shadeInteractor: Lazy<ShadeInteractor>,
keyguardInteractor: Lazy<KeyguardInteractor>,
sceneInteractor: Lazy<SceneInteractor>,
@@ -144,42 +138,6 @@ constructor(
}
}
- /** Flow that emits whenever we need to reset the dismiss action */
- private val resetDismissAction: Flow<Unit> =
- combine(
- if (SceneContainerFlag.isEnabled) {
- // Using currentScene instead of isFinishedIn because of a race condition that
- // forms between isFinishedIn(Gone) and isOnShadeWhileUnlocked where the latter
- // emits false before the former emits true, causing the evaluation of the
- // combine to come up with true, temporarily, before settling on false, which is
- // a valid final state. That causes an incorrect reset of the dismiss action to
- // occur before it gets executed.
- sceneInteractor
- .get()
- .currentScene
- .map { it == Scenes.Gone }
- .distinctUntilChanged()
- } else {
- transitionInteractor.isFinishedIn(
- scene = Scenes.Gone,
- stateWithoutSceneContainer = GONE,
- )
- },
- transitionInteractor.isFinishedIn(
- scene = Scenes.Bouncer,
- stateWithoutSceneContainer = PRIMARY_BOUNCER,
- ),
- alternateBouncerInteractor.isVisible,
- isOnShadeWhileUnlocked,
- powerInteractor.isAsleep,
- ) { isOnGone, isOnBouncer, isOnAltBouncer, isOnShadeWhileUnlocked, isAsleep ->
- (!isOnGone && !isOnBouncer && !isOnAltBouncer && !isOnShadeWhileUnlocked) ||
- isAsleep
- }
- .filter { it }
- .sampleFilter(dismissAction) { it !is DismissAction.None }
- .map {}
-
fun runDismissAnimationOnKeyguard(): Boolean {
return willAnimateDismissActionOnLockscreen.value
}
@@ -220,19 +178,15 @@ constructor(
}
}
- launch {
- resetDismissAction.collect {
- log("resetDismissAction")
- repository.dismissAction.value.onCancelAction.run()
- clearDismissAction()
- }
- }
-
launch { repository.dismissAction.collect { log("updatedDismissAction=$it") } }
awaitCancellation()
}
}
+ fun clearDismissAction() {
+ repository.setDismissAction(DismissAction.None)
+ }
+
/** Run the dismiss action and starts the dismiss keyguard transition. */
private suspend fun runDismissAction() {
val dismissAction = repository.dismissAction.value
@@ -249,10 +203,6 @@ constructor(
}
}
- private fun clearDismissAction() {
- repository.setDismissAction(DismissAction.None)
- }
-
private fun log(message: String) {
keyguardLogger.log(TAG, LogLevel.DEBUG, message)
}
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 aef26dea3c0d..bd1360f6e939 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -818,7 +818,10 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
* dragging it and translation should be deferred {@see KeyguardBouncer#show(boolean, boolean)}
*/
public void showPrimaryBouncer(boolean scrimmed) {
- hideAlternateBouncer(false);
+ hideAlternateBouncer(
+ /* updateScrim= */ false,
+ // When the scene framework is on, don't ever clear the pending dismiss action from
+ /* clearDismissAction= */ !SceneContainerFlag.isEnabled());
if (mKeyguardStateController.isShowing() && !isBouncerShowing()) {
if (SceneContainerFlag.isEnabled()) {
mSceneInteractorLazy.get().changeScene(
@@ -1005,6 +1008,15 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
@Override
public void hideAlternateBouncer(boolean updateScrim) {
+ hideAlternateBouncer(updateScrim, /* clearDismissAction= */ true);
+ }
+
+ @Override
+ public void hideAlternateBouncer(boolean updateScrim, boolean clearDismissAction) {
+ if (clearDismissAction) {
+ mKeyguardDismissActionInteractor.get().clearDismissAction();
+ }
+
updateAlternateBouncerShowing(mAlternateBouncerInteractor.hide() && updateScrim);
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelKosmos.kt
index e0d1d16bcf55..72541540226c 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelKosmos.kt
@@ -28,6 +28,7 @@ import com.android.systemui.bouncer.domain.interactor.simBouncerInteractor
import com.android.systemui.bouncer.ui.helper.BouncerHapticPlayer
import com.android.systemui.haptics.msdl.bouncerHapticPlayer
import com.android.systemui.inputmethod.domain.interactor.inputMethodInteractor
+import com.android.systemui.keyguard.domain.interactor.keyguardDismissActionInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardMediaKeyInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
@@ -63,6 +64,7 @@ val Kosmos.bouncerSceneContentViewModel by Fixture {
bouncerHapticPlayer = bouncerHapticPlayer,
keyguardMediaKeyInteractor = keyguardMediaKeyInteractor,
bouncerActionButtonInteractor = bouncerActionButtonInteractor,
+ keyguardDismissActionInteractor = keyguardDismissActionInteractor,
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorKosmos.kt
index bd841ab2e801..09f5fd79eeca 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorKosmos.kt
@@ -17,14 +17,12 @@
package com.android.systemui.keyguard.domain.interactor
import com.android.keyguard.logging.KeyguardLogger
-import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor
import com.android.systemui.bouncer.domain.interactor.primaryBouncerInteractor
import com.android.systemui.deviceentry.domain.interactor.deviceUnlockedInteractor
import com.android.systemui.keyguard.data.repository.keyguardRepository
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testScope
import com.android.systemui.log.logcatLogBuffer
-import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.shade.domain.interactor.shadeInteractor
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -38,8 +36,6 @@ val Kosmos.keyguardDismissActionInteractor by
dismissInteractor = keyguardDismissInteractor,
applicationScope = testScope.backgroundScope,
deviceUnlockedInteractor = { deviceUnlockedInteractor },
- powerInteractor = powerInteractor,
- alternateBouncerInteractor = alternateBouncerInteractor,
shadeInteractor = { shadeInteractor },
keyguardInteractor = { keyguardInteractor },
sceneInteractor = { sceneInteractor },