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
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user