Don't animate when state is immediate
Avoid extending animation for states that are
immediate. Also cleaning up a little bit and
avoiding unecessary repaint.
Change-Id: I1644ce0b539cf92083b47cf3587b01f92b239095
Test: atest packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
Test: brightness mirror
Test: receive notification on keyguard while dragging
Test: unlock with fp
Fixes: 73784491
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
index 168d8d3..3c9cca2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
@@ -77,7 +77,7 @@
mLightBarController = mock(LightBarController.class);
mScrimBehind = new ScrimView(getContext());
mScrimInFront = new ScrimView(getContext());
- mHeadsUpScrim = mock(View.class);
+ mHeadsUpScrim = new View(getContext());
mWakeLock = mock(WakeLock.class);
mAlarmManager = mock(AlarmManager.class);
mAlwaysOnEnabled = true;
@@ -384,6 +384,56 @@
testConservesNotificationDensity(3 /* count */, ScrimController.GRADIENT_SCRIM_ALPHA_BUSY);
}
+ @Test
+ public void testHeadsUpScrimOpacity() {
+ mScrimController.setPanelExpansion(0f);
+ mScrimController.onHeadsUpPinned(null /* row */);
+ mScrimController.finishAnimationsImmediately();
+
+ Assert.assertNotEquals("Heads-up scrim should be visible", 0f,
+ mHeadsUpScrim.getAlpha(), 0.01f);
+
+ mScrimController.onHeadsUpUnPinned(null /* row */);
+ mScrimController.finishAnimationsImmediately();
+
+ Assert.assertEquals("Heads-up scrim should have disappeared", 0f,
+ mHeadsUpScrim.getAlpha(), 0.01f);
+ }
+
+ @Test
+ public void testHeadsUpScrimCounting() {
+ mScrimController.setPanelExpansion(0f);
+ mScrimController.onHeadsUpPinned(null /* row */);
+ mScrimController.onHeadsUpPinned(null /* row */);
+ mScrimController.onHeadsUpPinned(null /* row */);
+ mScrimController.finishAnimationsImmediately();
+
+ Assert.assertNotEquals("Heads-up scrim should be visible", 0f,
+ mHeadsUpScrim.getAlpha(), 0.01f);
+
+ mScrimController.onHeadsUpUnPinned(null /* row */);
+ mScrimController.finishAnimationsImmediately();
+
+ Assert.assertEquals("Heads-up scrim should only disappear when counter reaches 0", 1f,
+ mHeadsUpScrim.getAlpha(), 0.01f);
+
+ mScrimController.onHeadsUpUnPinned(null /* row */);
+ mScrimController.onHeadsUpUnPinned(null /* row */);
+ mScrimController.finishAnimationsImmediately();
+ Assert.assertEquals("Heads-up scrim should have disappeared", 0f,
+ mHeadsUpScrim.getAlpha(), 0.01f);
+ }
+
+ @Test
+ public void testNoHeadsUpScrimExpanded() {
+ mScrimController.setPanelExpansion(1f);
+ mScrimController.onHeadsUpPinned(null /* row */);
+ mScrimController.finishAnimationsImmediately();
+
+ Assert.assertEquals("Heads-up scrim should not be visible when shade is expanded", 0f,
+ mHeadsUpScrim.getAlpha(), 0.01f);
+ }
+
/**
* Conserves old notification density after leaving state and coming back.
*
@@ -458,6 +508,7 @@
// Force finish all animations.
endAnimation(mScrimBehind, TAG_KEY_ANIM);
endAnimation(mScrimInFront, TAG_KEY_ANIM);
+ endAnimation(mHeadsUpScrim, TAG_KEY_ANIM);
if (!animationFinished[0]) {
throw new IllegalStateException("Animation never finished");
@@ -470,7 +521,7 @@
return wasCancelled;
}
- private void endAnimation(ScrimView scrimView, int tag) {
+ private void endAnimation(View scrimView, int tag) {
Animator animator = (Animator) scrimView.getTag(tag);
if (animator != null) {
animator.end();