Merge "Remove MODERN_BOUNCER flag." into tm-qpr-dev

This commit is contained in:
Aaron Liu
2023-01-30 17:54:56 +00:00
committed by Android (Google) Code Review
6 changed files with 35 additions and 67 deletions

View File

@@ -33,7 +33,6 @@ import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags import com.android.systemui.flags.Flags
import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor
import com.android.systemui.keyguard.domain.interactor.PrimaryBouncerInteractor import com.android.systemui.keyguard.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.keyguard.shared.constants.KeyguardBouncerConstants
import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.ShadeExpansionListener import com.android.systemui.shade.ShadeExpansionListener
@@ -83,7 +82,6 @@ constructor(
) { ) {
private val useExpandedOverlay: Boolean = private val useExpandedOverlay: Boolean =
featureFlags.isEnabled(Flags.UDFPS_NEW_TOUCH_DETECTION) featureFlags.isEnabled(Flags.UDFPS_NEW_TOUCH_DETECTION)
private val isModernBouncerEnabled: Boolean = featureFlags.isEnabled(Flags.MODERN_BOUNCER)
private val isModernAlternateBouncerEnabled: Boolean = private val isModernAlternateBouncerEnabled: Boolean =
featureFlags.isEnabled(Flags.MODERN_ALTERNATE_BOUNCER) featureFlags.isEnabled(Flags.MODERN_ALTERNATE_BOUNCER)
private var showingUdfpsBouncer = false private var showingUdfpsBouncer = false
@@ -109,12 +107,6 @@ constructor(
) )
} }
} }
/**
* Hidden amount of input (pin/pattern/password) bouncer. This is used
* [KeyguardBouncerConstants.EXPANSION_VISIBLE] (0f) to
* [KeyguardBouncerConstants.EXPANSION_HIDDEN] (1f). Only used for the non-modernBouncer.
*/
private var inputBouncerHiddenAmount = KeyguardBouncerConstants.EXPANSION_HIDDEN
private var inputBouncerExpansion = 0f // only used for modernBouncer private var inputBouncerExpansion = 0f // only used for modernBouncer
private val stateListener: StatusBarStateController.StateListener = private val stateListener: StatusBarStateController.StateListener =
@@ -253,15 +245,13 @@ constructor(
} }
init { init {
if (isModernBouncerEnabled || isModernAlternateBouncerEnabled) { view.repeatWhenAttached {
view.repeatWhenAttached { // repeatOnLifecycle CREATED (as opposed to STARTED) because the Bouncer expansion
// repeatOnLifecycle CREATED (as opposed to STARTED) because the Bouncer expansion // can make the view not visible; and we still want to listen for events
// can make the view not visible; and we still want to listen for events // that may make the view visible again.
// that may make the view visible again. repeatOnLifecycle(Lifecycle.State.CREATED) {
repeatOnLifecycle(Lifecycle.State.CREATED) { listenForBouncerExpansion(this)
if (isModernBouncerEnabled) listenForBouncerExpansion(this) if (isModernAlternateBouncerEnabled) listenForAlternateBouncerVisibility(this)
if (isModernAlternateBouncerEnabled) listenForAlternateBouncerVisibility(this)
}
} }
} }
} }
@@ -332,7 +322,6 @@ constructor(
override fun dump(pw: PrintWriter, args: Array<String>) { override fun dump(pw: PrintWriter, args: Array<String>) {
super.dump(pw, args) super.dump(pw, args)
pw.println("isModernBouncerEnabled=$isModernBouncerEnabled")
pw.println("isModernAlternateBouncerEnabled=$isModernAlternateBouncerEnabled") pw.println("isModernAlternateBouncerEnabled=$isModernAlternateBouncerEnabled")
pw.println("showingUdfpsAltBouncer=$showingUdfpsBouncer") pw.println("showingUdfpsAltBouncer=$showingUdfpsBouncer")
pw.println( pw.println(
@@ -352,11 +341,7 @@ constructor(
pw.println("udfpsRequestedByApp=$udfpsRequested") pw.println("udfpsRequestedByApp=$udfpsRequested")
pw.println("launchTransitionFadingAway=$launchTransitionFadingAway") pw.println("launchTransitionFadingAway=$launchTransitionFadingAway")
pw.println("lastDozeAmount=$lastDozeAmount") pw.println("lastDozeAmount=$lastDozeAmount")
if (isModernBouncerEnabled) { pw.println("inputBouncerExpansion=$inputBouncerExpansion")
pw.println("inputBouncerExpansion=$inputBouncerExpansion")
} else {
pw.println("inputBouncerHiddenAmount=$inputBouncerHiddenAmount")
}
view.dump(pw) view.dump(pw)
} }
@@ -383,7 +368,6 @@ constructor(
} else { } else {
keyguardUpdateMonitor.requestFaceAuthOnOccludingApp(false) keyguardUpdateMonitor.requestFaceAuthOnOccludingApp(false)
} }
updateBouncerHiddenAmount()
updateAlpha() updateAlpha()
updatePauseAuth() updatePauseAuth()
return true return true
@@ -424,19 +408,11 @@ constructor(
} }
fun isBouncerExpansionGreaterThan(bouncerExpansionThreshold: Float): Boolean { fun isBouncerExpansionGreaterThan(bouncerExpansionThreshold: Float): Boolean {
return if (isModernBouncerEnabled) { return inputBouncerExpansion >= bouncerExpansionThreshold
inputBouncerExpansion >= bouncerExpansionThreshold
} else {
inputBouncerHiddenAmount < bouncerExpansionThreshold
}
} }
fun isInputBouncerFullyVisible(): Boolean { fun isInputBouncerFullyVisible(): Boolean {
return if (isModernBouncerEnabled) { return inputBouncerExpansion == 1f
inputBouncerExpansion == 1f
} else {
keyguardViewManager.isBouncerShowing && !alternateBouncerInteractor.isVisibleState()
}
} }
override fun listenForTouchesOutsideView(): Boolean { override fun listenForTouchesOutsideView(): Boolean {
@@ -488,11 +464,7 @@ constructor(
} }
private fun getInputBouncerHiddenAmt(): Float { private fun getInputBouncerHiddenAmt(): Float {
return if (isModernBouncerEnabled) { return 1f - inputBouncerExpansion
1f - inputBouncerExpansion
} else {
inputBouncerHiddenAmount
}
} }
/** Update the scale factor based on the device's resolution. */ /** Update the scale factor based on the device's resolution. */
@@ -500,19 +472,6 @@ constructor(
udfpsController.mOverlayParams?.scaleFactor?.let { view.setScaleFactor(it) } udfpsController.mOverlayParams?.scaleFactor?.let { view.setScaleFactor(it) }
} }
private fun updateBouncerHiddenAmount() {
if (isModernBouncerEnabled) {
return
}
val altBouncerShowing = alternateBouncerInteractor.isVisibleState()
if (altBouncerShowing || !keyguardViewManager.primaryBouncerIsOrWillBeShowing()) {
inputBouncerHiddenAmount = 1f
} else if (keyguardViewManager.isBouncerShowing) {
// input bouncer is fully showing
inputBouncerHiddenAmount = 0f
}
}
private val legacyAlternateBouncer: LegacyAlternateBouncer = private val legacyAlternateBouncer: LegacyAlternateBouncer =
object : LegacyAlternateBouncer { object : LegacyAlternateBouncer {
override fun showAlternateBouncer(): Boolean { override fun showAlternateBouncer(): Boolean {

View File

@@ -127,13 +127,6 @@ object Flags {
@JvmField @JvmField
val LOCKSCREEN_CUSTOM_CLOCKS = unreleasedFlag(207, "lockscreen_custom_clocks", teamfood = true) val LOCKSCREEN_CUSTOM_CLOCKS = unreleasedFlag(207, "lockscreen_custom_clocks", teamfood = true)
/**
* Flag to enable the usage of the new bouncer data source. This is a refactor of and eventual
* replacement of KeyguardBouncer.java.
*/
// TODO(b/254512385): Tracking Bug
@JvmField val MODERN_BOUNCER = releasedFlag(208, "modern_bouncer")
/** /**
* Whether the clock on a wide lock screen should use the new "stepping" animation for moving * Whether the clock on a wide lock screen should use the new "stepping" animation for moving
* the digits when the clock moves. * the digits when the clock moves.

View File

@@ -160,12 +160,10 @@ public class NotificationShadeWindowViewController {
// This view is not part of the newly inflated expanded status bar. // This view is not part of the newly inflated expanded status bar.
mBrightnessMirror = mView.findViewById(R.id.brightness_mirror_container); mBrightnessMirror = mView.findViewById(R.id.brightness_mirror_container);
if (featureFlags.isEnabled(Flags.MODERN_BOUNCER)) { KeyguardBouncerViewBinder.bind(
KeyguardBouncerViewBinder.bind( mView.findViewById(R.id.keyguard_bouncer_container),
mView.findViewById(R.id.keyguard_bouncer_container), keyguardBouncerViewModel,
keyguardBouncerViewModel, keyguardBouncerComponentFactory);
keyguardBouncerComponentFactory);
}
if (featureFlags.isEnabled(Flags.UNOCCLUSION_TRANSITION)) { if (featureFlags.isEnabled(Flags.UNOCCLUSION_TRANSITION)) {
collectFlow(mView, keyguardTransitionInteractor.getLockscreenToDreamingTransition(), collectFlow(mView, keyguardTransitionInteractor.getLockscreenToDreamingTransition(),

View File

@@ -147,7 +147,6 @@ public class UdfpsKeyguardViewControllerBaseTest extends SysuiTestCase {
protected UdfpsKeyguardViewController createUdfpsKeyguardViewController( protected UdfpsKeyguardViewController createUdfpsKeyguardViewController(
boolean useModernBouncer, boolean useExpandedOverlay) { boolean useModernBouncer, boolean useExpandedOverlay) {
mFeatureFlags.set(Flags.MODERN_BOUNCER, useModernBouncer);
mFeatureFlags.set(Flags.MODERN_ALTERNATE_BOUNCER, useModernBouncer); mFeatureFlags.set(Flags.MODERN_ALTERNATE_BOUNCER, useModernBouncer);
mFeatureFlags.set(Flags.UDFPS_NEW_TOUCH_DETECTION, useExpandedOverlay); mFeatureFlags.set(Flags.UDFPS_NEW_TOUCH_DETECTION, useExpandedOverlay);
UdfpsKeyguardViewController controller = new UdfpsKeyguardViewController( UdfpsKeyguardViewController controller = new UdfpsKeyguardViewController(

View File

@@ -45,13 +45,16 @@ import com.android.systemui.statusbar.phone.CentralSurfaces
import com.android.systemui.statusbar.phone.PhoneStatusBarViewController import com.android.systemui.statusbar.phone.PhoneStatusBarViewController
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
import com.android.systemui.statusbar.window.StatusBarWindowStateController import com.android.systemui.statusbar.window.StatusBarWindowStateController
import com.android.systemui.util.mockito.any
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor import org.mockito.ArgumentCaptor
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.Mockito.anyFloat import org.mockito.Mockito.anyFloat
import org.mockito.Mockito.mock
import org.mockito.Mockito.never import org.mockito.Mockito.never
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` as whenever import org.mockito.Mockito.`when` as whenever
@@ -102,7 +105,6 @@ class NotificationShadeWindowViewControllerTest : SysuiTestCase() {
@Mock @Mock
private lateinit var alternateBouncerInteractor: AlternateBouncerInteractor private lateinit var alternateBouncerInteractor: AlternateBouncerInteractor
@Mock lateinit var keyguardBouncerComponentFactory: KeyguardBouncerComponent.Factory @Mock lateinit var keyguardBouncerComponentFactory: KeyguardBouncerComponent.Factory
@Mock lateinit var keyguardBouncerContainer: ViewGroup
@Mock lateinit var keyguardBouncerComponent: KeyguardBouncerComponent @Mock lateinit var keyguardBouncerComponent: KeyguardBouncerComponent
@Mock lateinit var keyguardHostViewController: KeyguardHostViewController @Mock lateinit var keyguardHostViewController: KeyguardHostViewController
@Mock lateinit var keyguardTransitionInteractor: KeyguardTransitionInteractor @Mock lateinit var keyguardTransitionInteractor: KeyguardTransitionInteractor
@@ -116,6 +118,12 @@ class NotificationShadeWindowViewControllerTest : SysuiTestCase() {
fun setUp() { fun setUp() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
whenever(view.bottom).thenReturn(VIEW_BOTTOM) whenever(view.bottom).thenReturn(VIEW_BOTTOM)
whenever(view.findViewById<ViewGroup>(R.id.keyguard_bouncer_container))
.thenReturn(mock(ViewGroup::class.java))
whenever(keyguardBouncerComponentFactory.create(any(ViewGroup::class.java)))
.thenReturn(keyguardBouncerComponent)
whenever(keyguardBouncerComponent.keyguardHostViewController)
.thenReturn(keyguardHostViewController)
underTest = NotificationShadeWindowViewController( underTest = NotificationShadeWindowViewController(
lockscreenShadeTransitionController, lockscreenShadeTransitionController,
FalsingCollectorFake(), FalsingCollectorFake(),
@@ -275,6 +283,7 @@ class NotificationShadeWindowViewControllerTest : SysuiTestCase() {
@Test @Test
fun testGetBouncerContainer() { fun testGetBouncerContainer() {
Mockito.clearInvocations(view)
underTest.bouncerContainer underTest.bouncerContainer
verify(view).findViewById<ViewGroup>(R.id.keyguard_bouncer_container) verify(view).findViewById<ViewGroup>(R.id.keyguard_bouncer_container)
} }

View File

@@ -29,9 +29,11 @@ import android.os.SystemClock;
import android.testing.AndroidTestingRunner; import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper; import android.testing.TestableLooper;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.ViewGroup;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import com.android.keyguard.KeyguardHostViewController;
import com.android.keyguard.LockIconViewController; import com.android.keyguard.LockIconViewController;
import com.android.keyguard.dagger.KeyguardBouncerComponent; import com.android.keyguard.dagger.KeyguardBouncerComponent;
import com.android.systemui.R; import com.android.systemui.R;
@@ -94,6 +96,8 @@ public class NotificationShadeWindowViewTest extends SysuiTestCase {
@Mock private FeatureFlags mFeatureFlags; @Mock private FeatureFlags mFeatureFlags;
@Mock private KeyguardBouncerViewModel mKeyguardBouncerViewModel; @Mock private KeyguardBouncerViewModel mKeyguardBouncerViewModel;
@Mock private KeyguardBouncerComponent.Factory mKeyguardBouncerComponentFactory; @Mock private KeyguardBouncerComponent.Factory mKeyguardBouncerComponentFactory;
@Mock private KeyguardBouncerComponent mKeyguardBouncerComponent;
@Mock private KeyguardHostViewController mKeyguardHostViewController;
@Mock private NotificationInsetsController mNotificationInsetsController; @Mock private NotificationInsetsController mNotificationInsetsController;
@Mock private AlternateBouncerInteractor mAlternateBouncerInteractor; @Mock private AlternateBouncerInteractor mAlternateBouncerInteractor;
@Mock private KeyguardTransitionInteractor mKeyguardTransitionInteractor; @Mock private KeyguardTransitionInteractor mKeyguardTransitionInteractor;
@@ -110,6 +114,12 @@ public class NotificationShadeWindowViewTest extends SysuiTestCase {
when(mView.findViewById(R.id.notification_stack_scroller)) when(mView.findViewById(R.id.notification_stack_scroller))
.thenReturn(mNotificationStackScrollLayout); .thenReturn(mNotificationStackScrollLayout);
when(mView.findViewById(R.id.keyguard_bouncer_container)).thenReturn(mock(ViewGroup.class));
when(mKeyguardBouncerComponentFactory.create(any(ViewGroup.class))).thenReturn(
mKeyguardBouncerComponent);
when(mKeyguardBouncerComponent.getKeyguardHostViewController()).thenReturn(
mKeyguardHostViewController);
when(mStatusBarStateController.isDozing()).thenReturn(false); when(mStatusBarStateController.isDozing()).thenReturn(false);
mDependency.injectTestDependency(ShadeController.class, mShadeController); mDependency.injectTestDependency(ShadeController.class, mShadeController);