Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +37 −30 Original line number Diff line number Diff line Loading @@ -138,7 +138,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, protected float mScrimBehindAlphaKeyguard = SCRIM_BEHIND_ALPHA_KEYGUARD; protected float mScrimBehindAlphaUnlocking = SCRIM_BEHIND_ALPHA_UNLOCKING; private float mFraction; // Assuming the shade is expanded during initialization private float mExpansionFraction = 1f; private boolean mDarkenWhileDragging; protected boolean mAnimateChange; Loading Loading @@ -251,6 +252,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, mCurrentBehindTint = state.getBehindTint(); mCurrentInFrontAlpha = state.getFrontAlpha(); mCurrentBehindAlpha = state.getBehindAlpha(); applyExpansionToAlpha(); // Cancel blanking transitions that were pending before we requested a new state if (mPendingFrameCallback != null) { Loading Loading @@ -362,9 +364,28 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, * @param fraction From 0 to 1 where 0 means collapse and 1 expanded. */ public void setPanelExpansion(float fraction) { if (mFraction != fraction) { mFraction = fraction; if (mExpansionFraction != fraction) { mExpansionFraction = fraction; if (!(mState == ScrimState.UNLOCKED || mState == ScrimState.KEYGUARD)) { return; } applyExpansionToAlpha(); if (mUpdatePending) { return; } if (mPinnedHeadsUpCount != 0) { updateHeadsUpScrim(false); } updateScrim(false /* animate */, mScrimInFront, mCurrentInFrontAlpha); updateScrim(false /* animate */, mScrimBehind, mCurrentBehindAlpha); } } private void applyExpansionToAlpha() { if (mState == ScrimState.UNLOCKED) { // Darken scrim as you pull down the shade when unlocked float behindFraction = getInterpolatedFraction(); Loading @@ -372,10 +393,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, mCurrentBehindAlpha = behindFraction * mScrimBehindAlphaKeyguard; mCurrentInFrontAlpha = 0; } else if (mState == ScrimState.KEYGUARD) { if (mUpdatePending) { return; } // Either darken of make the scrim transparent when you // pull down the shade float interpolatedFract = getInterpolatedFraction(); Loading @@ -388,16 +405,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, interpolatedFract); mCurrentInFrontAlpha = 0; } } else { return; } if (mPinnedHeadsUpCount != 0) { updateHeadsUpScrim(false); } updateScrim(false /* animate */, mScrimInFront, mCurrentInFrontAlpha); updateScrim(false /* animate */, mScrimBehind, mCurrentBehindAlpha); } } Loading Loading @@ -496,7 +503,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, } private float getInterpolatedFraction() { float frac = mFraction; float frac = mExpansionFraction; // let's start this 20% of the way down the screen frac = frac * 1.2f - 0.2f; if (frac <= 0) { Loading Loading @@ -825,7 +832,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, } else { alpha = 1.0f - mTopHeadsUpDragAmount; } float expandFactor = (1.0f - mFraction); float expandFactor = (1.0f - mExpansionFraction); expandFactor = Math.max(expandFactor, 0.0f); return alpha * expandFactor; } Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +19 −0 Original line number Diff line number Diff line Loading @@ -180,6 +180,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void transitionToUnlocked() { mScrimController.setPanelExpansion(0f); mScrimController.transitionTo(ScrimState.UNLOCKED); mScrimController.finishAnimationsImmediately(); // Front scrim should be transparent Loading @@ -197,6 +198,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void transitionToUnlockedFromAod() { // Simulate unlock with fingerprint mScrimController.transitionTo(ScrimState.AOD); mScrimController.setPanelExpansion(0f); mScrimController.finishAnimationsImmediately(); mScrimController.transitionTo(ScrimState.UNLOCKED); // Immediately tinted after the transition starts Loading Loading @@ -324,6 +326,23 @@ public class ScrimControllerTest extends SysuiTestCase { verify(mAlarmManager).cancel(any(AlarmManager.OnAlarmListener.class)); } @Test public void testConservesExpansionOpacityAfterTransition() { mScrimController.transitionTo(ScrimState.UNLOCKED); mScrimController.setPanelExpansion(0.5f); mScrimController.finishAnimationsImmediately(); final float expandedAlpha = mScrimBehind.getViewAlpha(); mScrimController.transitionTo(ScrimState.BRIGHTNESS_MIRROR); mScrimController.finishAnimationsImmediately(); mScrimController.transitionTo(ScrimState.UNLOCKED); mScrimController.finishAnimationsImmediately(); Assert.assertEquals("Scrim expansion opacity wasn't conserved when transitioning back", expandedAlpha, mScrimBehind.getViewAlpha(), 0.01f); } private void assertScrimTint(ScrimView scrimView, boolean tinted) { final boolean viewIsTinted = scrimView.getTint() != Color.TRANSPARENT; final String name = scrimView == mScrimInFront ? "front" : "back"; Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +37 −30 Original line number Diff line number Diff line Loading @@ -138,7 +138,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, protected float mScrimBehindAlphaKeyguard = SCRIM_BEHIND_ALPHA_KEYGUARD; protected float mScrimBehindAlphaUnlocking = SCRIM_BEHIND_ALPHA_UNLOCKING; private float mFraction; // Assuming the shade is expanded during initialization private float mExpansionFraction = 1f; private boolean mDarkenWhileDragging; protected boolean mAnimateChange; Loading Loading @@ -251,6 +252,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, mCurrentBehindTint = state.getBehindTint(); mCurrentInFrontAlpha = state.getFrontAlpha(); mCurrentBehindAlpha = state.getBehindAlpha(); applyExpansionToAlpha(); // Cancel blanking transitions that were pending before we requested a new state if (mPendingFrameCallback != null) { Loading Loading @@ -362,9 +364,28 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, * @param fraction From 0 to 1 where 0 means collapse and 1 expanded. */ public void setPanelExpansion(float fraction) { if (mFraction != fraction) { mFraction = fraction; if (mExpansionFraction != fraction) { mExpansionFraction = fraction; if (!(mState == ScrimState.UNLOCKED || mState == ScrimState.KEYGUARD)) { return; } applyExpansionToAlpha(); if (mUpdatePending) { return; } if (mPinnedHeadsUpCount != 0) { updateHeadsUpScrim(false); } updateScrim(false /* animate */, mScrimInFront, mCurrentInFrontAlpha); updateScrim(false /* animate */, mScrimBehind, mCurrentBehindAlpha); } } private void applyExpansionToAlpha() { if (mState == ScrimState.UNLOCKED) { // Darken scrim as you pull down the shade when unlocked float behindFraction = getInterpolatedFraction(); Loading @@ -372,10 +393,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, mCurrentBehindAlpha = behindFraction * mScrimBehindAlphaKeyguard; mCurrentInFrontAlpha = 0; } else if (mState == ScrimState.KEYGUARD) { if (mUpdatePending) { return; } // Either darken of make the scrim transparent when you // pull down the shade float interpolatedFract = getInterpolatedFraction(); Loading @@ -388,16 +405,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, interpolatedFract); mCurrentInFrontAlpha = 0; } } else { return; } if (mPinnedHeadsUpCount != 0) { updateHeadsUpScrim(false); } updateScrim(false /* animate */, mScrimInFront, mCurrentInFrontAlpha); updateScrim(false /* animate */, mScrimBehind, mCurrentBehindAlpha); } } Loading Loading @@ -496,7 +503,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, } private float getInterpolatedFraction() { float frac = mFraction; float frac = mExpansionFraction; // let's start this 20% of the way down the screen frac = frac * 1.2f - 0.2f; if (frac <= 0) { Loading Loading @@ -825,7 +832,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, } else { alpha = 1.0f - mTopHeadsUpDragAmount; } float expandFactor = (1.0f - mFraction); float expandFactor = (1.0f - mExpansionFraction); expandFactor = Math.max(expandFactor, 0.0f); return alpha * expandFactor; } Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +19 −0 Original line number Diff line number Diff line Loading @@ -180,6 +180,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void transitionToUnlocked() { mScrimController.setPanelExpansion(0f); mScrimController.transitionTo(ScrimState.UNLOCKED); mScrimController.finishAnimationsImmediately(); // Front scrim should be transparent Loading @@ -197,6 +198,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void transitionToUnlockedFromAod() { // Simulate unlock with fingerprint mScrimController.transitionTo(ScrimState.AOD); mScrimController.setPanelExpansion(0f); mScrimController.finishAnimationsImmediately(); mScrimController.transitionTo(ScrimState.UNLOCKED); // Immediately tinted after the transition starts Loading Loading @@ -324,6 +326,23 @@ public class ScrimControllerTest extends SysuiTestCase { verify(mAlarmManager).cancel(any(AlarmManager.OnAlarmListener.class)); } @Test public void testConservesExpansionOpacityAfterTransition() { mScrimController.transitionTo(ScrimState.UNLOCKED); mScrimController.setPanelExpansion(0.5f); mScrimController.finishAnimationsImmediately(); final float expandedAlpha = mScrimBehind.getViewAlpha(); mScrimController.transitionTo(ScrimState.BRIGHTNESS_MIRROR); mScrimController.finishAnimationsImmediately(); mScrimController.transitionTo(ScrimState.UNLOCKED); mScrimController.finishAnimationsImmediately(); Assert.assertEquals("Scrim expansion opacity wasn't conserved when transitioning back", expandedAlpha, mScrimBehind.getViewAlpha(), 0.01f); } private void assertScrimTint(ScrimView scrimView, boolean tinted) { final boolean viewIsTinted = scrimView.getTint() != Color.TRANSPARENT; final String name = scrimView == mScrimInFront ? "front" : "back"; Loading