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:
Bill Lin
2022-08-01 23:49:11 +08:00
parent 7c85779ae9
commit 5f84f0e106
2 changed files with 43 additions and 1 deletions

View File

@@ -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 {

View File

@@ -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)