Merge "[Bouncer] Fix flicker tests." into tm-qpr-dev

This commit is contained in:
Aaron Liu
2022-11-02 17:05:27 +00:00
committed by Android (Google) Code Review
7 changed files with 26 additions and 35 deletions

View File

@@ -18,6 +18,7 @@ package com.android.systemui.keyguard.data
import android.view.KeyEvent
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.plugins.ActivityStarter
import java.lang.ref.WeakReference
import javax.inject.Inject
@@ -45,4 +46,9 @@ interface BouncerViewDelegate {
fun dispatchBackKeyEventPreIme(): Boolean
fun showNextSecurityScreenOrFinish(): Boolean
fun resume()
fun setDismissAction(
onDismissAction: ActivityStarter.OnDismissAction?,
cancelAction: Runnable?,
)
fun willDismissWithActions(): Boolean
}

View File

@@ -21,7 +21,6 @@ import com.android.keyguard.KeyguardUpdateMonitor
import com.android.keyguard.KeyguardUpdateMonitorCallback
import com.android.keyguard.ViewMediatorCallback
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.shared.model.BouncerCallbackActionsModel
import com.android.systemui.keyguard.shared.model.BouncerShowMessageModel
import com.android.systemui.keyguard.shared.model.KeyguardBouncerModel
import com.android.systemui.statusbar.phone.KeyguardBouncer
@@ -60,8 +59,6 @@ constructor(
val hide = _hide.asStateFlow()
private val _startingToHide = MutableStateFlow(false)
val startingToHide = _startingToHide.asStateFlow()
private val _onDismissAction = MutableStateFlow<BouncerCallbackActionsModel?>(null)
val onDismissAction = _onDismissAction.asStateFlow()
private val _disappearAnimation = MutableStateFlow<Runnable?>(null)
val startingDisappearAnimation = _disappearAnimation.asStateFlow()
private val _keyguardPosition = MutableStateFlow(0f)
@@ -126,10 +123,6 @@ constructor(
_startingToHide.value = startingToHide
}
fun setOnDismissAction(bouncerCallbackActionsModel: BouncerCallbackActionsModel?) {
_onDismissAction.value = bouncerCallbackActionsModel
}
fun setStartDisappearAnimation(runnable: Runnable?) {
_disappearAnimation.value = runnable
}

View File

@@ -30,7 +30,6 @@ import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.DismissCallbackRegistry
import com.android.systemui.keyguard.data.BouncerView
import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepository
import com.android.systemui.keyguard.shared.model.BouncerCallbackActionsModel
import com.android.systemui.keyguard.shared.model.BouncerShowMessageModel
import com.android.systemui.keyguard.shared.model.KeyguardBouncerModel
import com.android.systemui.plugins.ActivityStarter
@@ -94,8 +93,6 @@ constructor(
val showMessage: Flow<BouncerShowMessageModel> = repository.showMessage.filterNotNull()
val startingDisappearAnimation: Flow<Runnable> =
repository.startingDisappearAnimation.filterNotNull()
val onDismissAction: Flow<BouncerCallbackActionsModel> =
repository.onDismissAction.filterNotNull()
val resourceUpdateRequests: Flow<Boolean> = repository.resourceUpdateRequests.filter { it }
val keyguardPosition: Flow<Float> = repository.keyguardPosition
val panelExpansionAmount: Flow<Float> = repository.panelExpansionAmount
@@ -160,7 +157,6 @@ constructor(
}
keyguardStateController.notifyBouncerShowing(true)
callbackInteractor.dispatchStartingToShow()
Trace.endSection()
}
@@ -179,7 +175,6 @@ constructor(
keyguardStateController.notifyBouncerShowing(false /* showing */)
cancelShowRunnable()
repository.setShowingSoon(false)
repository.setOnDismissAction(null)
repository.setVisible(false)
repository.setHide(true)
repository.setShow(null)
@@ -241,7 +236,7 @@ constructor(
onDismissAction: ActivityStarter.OnDismissAction?,
cancelAction: Runnable?
) {
repository.setOnDismissAction(BouncerCallbackActionsModel(onDismissAction, cancelAction))
bouncerView.delegate?.setDismissAction(onDismissAction, cancelAction)
}
/** Update the resources of the views. */
@@ -319,7 +314,7 @@ constructor(
/** Return whether bouncer will dismiss with actions */
fun willDismissWithAction(): Boolean {
return repository.onDismissAction.value?.onDismissAction != null
return bouncerView.delegate?.willDismissWithActions() == true
}
/** Returns whether the bouncer should be full screen. */

View File

@@ -29,6 +29,7 @@ import com.android.keyguard.dagger.KeyguardBouncerComponent
import com.android.systemui.keyguard.data.BouncerViewDelegate
import com.android.systemui.keyguard.ui.viewmodel.KeyguardBouncerViewModel
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.statusbar.phone.KeyguardBouncer.EXPANSION_VISIBLE
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.flow.collect
@@ -75,6 +76,17 @@ object KeyguardBouncerViewBinder {
hostViewController.showPrimarySecurityScreen()
hostViewController.onResume()
}
override fun setDismissAction(
onDismissAction: ActivityStarter.OnDismissAction?,
cancelAction: Runnable?
) {
hostViewController.setOnDismissAction(onDismissAction, cancelAction)
}
override fun willDismissWithActions(): Boolean {
return hostViewController.hasDismissActions()
}
}
view.repeatWhenAttached {
repeatOnLifecycle(Lifecycle.State.STARTED) {
@@ -121,15 +133,6 @@ object KeyguardBouncerViewBinder {
viewModel.startingToHide.collect { hostViewController.onStartingToHide() }
}
launch {
viewModel.setDismissAction.collect {
hostViewController.setOnDismissAction(
it.onDismissAction,
it.cancelAction
)
}
}
launch {
viewModel.startDisappearAnimation.collect {
hostViewController.startDisappearAnimation(it)

View File

@@ -20,7 +20,6 @@ import android.view.View
import com.android.systemui.keyguard.data.BouncerView
import com.android.systemui.keyguard.data.BouncerViewDelegate
import com.android.systemui.keyguard.domain.interactor.BouncerInteractor
import com.android.systemui.keyguard.shared.model.BouncerCallbackActionsModel
import com.android.systemui.keyguard.shared.model.BouncerShowMessageModel
import com.android.systemui.keyguard.shared.model.KeyguardBouncerModel
import com.android.systemui.statusbar.phone.KeyguardBouncer.EXPANSION_VISIBLE
@@ -63,9 +62,6 @@ constructor(
/** Observe whether bouncer is starting to hide. */
val startingToHide: Flow<Unit> = interactor.startingToHide
/** Observe whether we want to set the dismiss action to the bouncer. */
val setDismissAction: Flow<BouncerCallbackActionsModel> = interactor.onDismissAction
/** Observe whether we want to start the disappear animation. */
val startDisappearAnimation: Flow<Runnable> = interactor.startingDisappearAnimation

View File

@@ -171,7 +171,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
if (mBouncerAnimating) {
mCentralSurfaces.setBouncerHiddenFraction(expansion);
}
updateStates();
}
@Override

View File

@@ -27,8 +27,8 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.classifier.FalsingCollector
import com.android.systemui.keyguard.DismissCallbackRegistry
import com.android.systemui.keyguard.data.BouncerView
import com.android.systemui.keyguard.data.BouncerViewDelegate
import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepository
import com.android.systemui.keyguard.shared.model.BouncerCallbackActionsModel
import com.android.systemui.keyguard.shared.model.BouncerShowMessageModel
import com.android.systemui.keyguard.shared.model.KeyguardBouncerModel
import com.android.systemui.plugins.ActivityStarter
@@ -57,6 +57,7 @@ class BouncerInteractorTest : SysuiTestCase() {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private lateinit var repository: KeyguardBouncerRepository
@Mock(answer = Answers.RETURNS_DEEP_STUBS) private lateinit var bouncerView: BouncerView
@Mock private lateinit var bouncerViewDelegate: BouncerViewDelegate
@Mock private lateinit var keyguardStateController: KeyguardStateController
@Mock private lateinit var keyguardSecurityModel: KeyguardSecurityModel
@Mock private lateinit var bouncerCallbackInteractor: BouncerCallbackInteractor
@@ -86,6 +87,7 @@ class BouncerInteractorTest : SysuiTestCase() {
)
`when`(repository.startingDisappearAnimation.value).thenReturn(null)
`when`(repository.show.value).thenReturn(null)
`when`(bouncerView.delegate).thenReturn(bouncerViewDelegate)
}
@Test
@@ -124,7 +126,6 @@ class BouncerInteractorTest : SysuiTestCase() {
verify(falsingCollector).onBouncerHidden()
verify(keyguardStateController).notifyBouncerShowing(false)
verify(repository).setShowingSoon(false)
verify(repository).setOnDismissAction(null)
verify(repository).setVisible(false)
verify(repository).setHide(true)
verify(repository).setShow(null)
@@ -178,8 +179,7 @@ class BouncerInteractorTest : SysuiTestCase() {
val onDismissAction = mock(ActivityStarter.OnDismissAction::class.java)
val cancelAction = mock(Runnable::class.java)
bouncerInteractor.setDismissAction(onDismissAction, cancelAction)
verify(repository)
.setOnDismissAction(BouncerCallbackActionsModel(onDismissAction, cancelAction))
verify(bouncerViewDelegate).setDismissAction(onDismissAction, cancelAction)
}
@Test
@@ -269,10 +269,9 @@ class BouncerInteractorTest : SysuiTestCase() {
@Test
fun testWillDismissWithAction() {
`when`(repository.onDismissAction.value?.onDismissAction)
.thenReturn(mock(ActivityStarter.OnDismissAction::class.java))
`when`(bouncerViewDelegate.willDismissWithActions()).thenReturn(true)
assertThat(bouncerInteractor.willDismissWithAction()).isTrue()
`when`(repository.onDismissAction.value?.onDismissAction).thenReturn(null)
`when`(bouncerViewDelegate.willDismissWithActions()).thenReturn(false)
assertThat(bouncerInteractor.willDismissWithAction()).isFalse()
}
}