From 5f84f0e106a81deb520b554b50e8b276b5dec075 Mon Sep 17 00:00:00 2001 From: Bill Lin Date: Mon, 1 Aug 2022 23:49:11 +0800 Subject: [PATCH] Fix redundant move animation on Side-FPS indicator There was a redundant move transition when showing Side-FPS indicator overlayView on bouncer. Set PRIVATE_FLAG_NO_MOVE_ANIMATION in Window LayoutParams when adding overlayView to WindowManager to avoid move transition. Test: atest SidefpsControllerTest Test: manual enable keyguard bouncer and check SFPS indicator Fixes: 238354906 Bug: 226610828 Change-Id: Ic43ee09c39c0ffb33ea44f3b4baede9a21d4a347 --- .../systemui/biometrics/SidefpsController.kt | 4 +- .../biometrics/SidefpsControllerTest.kt | 40 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/SidefpsController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/SidefpsController.kt index bbffb73b7503d..d03106b4e6bc1 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/SidefpsController.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/SidefpsController.kt @@ -43,6 +43,8 @@ import android.view.View.AccessibilityDelegate import android.view.ViewPropertyAnimator import android.view.WindowInsets import android.view.WindowManager +import android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION +import android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY import android.view.accessibility.AccessibilityEvent import androidx.annotation.RawRes import com.airbnb.lottie.LottieAnimationView @@ -130,7 +132,7 @@ class SidefpsController @Inject constructor( fitInsetsTypes = 0 // overrides default, avoiding status bars during layout gravity = Gravity.TOP or Gravity.LEFT layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS - privateFlags = WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY + privateFlags = PRIVATE_FLAG_TRUSTED_OVERLAY or PRIVATE_FLAG_NO_MOVE_ANIMATION } init { diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/SidefpsControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/SidefpsControllerTest.kt index 6157ccbd597a1..8d969d0f1045e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/SidefpsControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/SidefpsControllerTest.kt @@ -45,6 +45,8 @@ import android.view.View import android.view.ViewPropertyAnimator import android.view.WindowInsets import android.view.WindowManager +import android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION +import android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY import android.view.WindowMetrics import androidx.test.filters.SmallTest import com.airbnb.lottie.LottieAnimationView @@ -438,6 +440,44 @@ class SidefpsControllerTest : SysuiTestCase() { assertThat(fingerprintManager.hasSideFpsSensor()).isFalse() } + + @Test + fun testLayoutParams_hasNoMoveAnimationWindowFlag() = testWithDisplay( + deviceConfig = DeviceConfig.Y_ALIGNED_UNFOLDED + ) { + sideFpsController.overlayOffsets = sensorLocation + sideFpsController.updateOverlayParams( + windowManager.defaultDisplay, + indicatorBounds + ) + overlayController.show(SENSOR_ID, REASON_UNKNOWN) + executor.runAllReady() + + verify(windowManager).updateViewLayout(any(), overlayViewParamsCaptor.capture()) + + val lpFlags = overlayViewParamsCaptor.value.privateFlags + + assertThat((lpFlags and PRIVATE_FLAG_NO_MOVE_ANIMATION) != 0).isTrue() + } + + @Test + fun testLayoutParams_hasTrustedOverlayWindowFlag() = testWithDisplay( + deviceConfig = DeviceConfig.Y_ALIGNED_UNFOLDED + ) { + sideFpsController.overlayOffsets = sensorLocation + sideFpsController.updateOverlayParams( + windowManager.defaultDisplay, + indicatorBounds + ) + overlayController.show(SENSOR_ID, REASON_UNKNOWN) + executor.runAllReady() + + verify(windowManager).updateViewLayout(any(), overlayViewParamsCaptor.capture()) + + val lpFlags = overlayViewParamsCaptor.value.privateFlags + + assertThat((lpFlags and PRIVATE_FLAG_TRUSTED_OVERLAY) != 0).isTrue() + } } private fun insetsForSmallNavbar() = insetsWithBottom(60)