Merge "Remove MODERN_BOUNCER flag." into tm-qpr-dev am: fa016f6184
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20932265 Change-Id: Icb8b8538de19dba32fda6c7bb549ab93e412bd72 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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,18 +245,16 @@ 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) {
|
||||||
if (isModernBouncerEnabled) listenForBouncerExpansion(this)
|
listenForBouncerExpansion(this)
|
||||||
if (isModernAlternateBouncerEnabled) listenForAlternateBouncerVisibility(this)
|
if (isModernAlternateBouncerEnabled) listenForAlternateBouncerVisibility(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
internal suspend fun listenForBouncerExpansion(scope: CoroutineScope): Job {
|
internal suspend fun listenForBouncerExpansion(scope: CoroutineScope): Job {
|
||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user