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();