Merge "[Status Bar Refactor] Move PanelBar#updateScrimFraction into ScrimController."
This commit is contained in:
commit
638a07e506
@ -3489,9 +3489,9 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
* cases, such as if there's a heads-up notification.
|
||||
*/
|
||||
public void setPanelScrimMinFraction(float minFraction) {
|
||||
mBar.onPanelMinFractionChanged(minFraction);
|
||||
mMinFraction = minFraction;
|
||||
mDepthController.setPanelPullDownMinFraction(mMinFraction);
|
||||
mScrimController.setPanelScrimMinFraction(mMinFraction);
|
||||
}
|
||||
|
||||
public void clearNotificationEffects() {
|
||||
|
@ -145,11 +145,6 @@ public abstract class PanelBar extends FrameLayout {
|
||||
return mPanel == null || mPanel.getView().dispatchTouchEvent(event);
|
||||
}
|
||||
|
||||
/**
|
||||
* Percentage of panel expansion offset, caused by pulling down on a heads-up.
|
||||
*/
|
||||
abstract void onPanelMinFractionChanged(float minFraction);
|
||||
|
||||
/**
|
||||
* @param frac the fraction from the expansion in [0, 1]
|
||||
* @param expanded whether the panel is currently expanded; this is independent from the
|
||||
|
@ -18,8 +18,6 @@ package com.android.systemui.statusbar.phone;
|
||||
|
||||
import static com.android.systemui.ScreenDecorations.DisplayCutoutView.boundsFromDirection;
|
||||
|
||||
import static java.lang.Float.isNaN;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
@ -57,7 +55,6 @@ public class PhoneStatusBarView extends PanelBar {
|
||||
StatusBar mBar;
|
||||
|
||||
private ScrimController mScrimController;
|
||||
private float mMinFraction;
|
||||
private Runnable mHideExpandedRunnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
@ -267,21 +264,9 @@ public class PhoneStatusBarView extends PanelBar {
|
||||
return mBar.interceptTouchEvent(event) || super.onInterceptTouchEvent(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPanelMinFractionChanged(float minFraction) {
|
||||
if (isNaN(minFraction)) {
|
||||
throw new IllegalArgumentException("minFraction cannot be NaN");
|
||||
}
|
||||
if (mMinFraction != minFraction) {
|
||||
mMinFraction = minFraction;
|
||||
updateScrimFraction();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void panelExpansionChanged(float frac, boolean expanded) {
|
||||
super.panelExpansionChanged(frac, expanded);
|
||||
updateScrimFraction();
|
||||
if ((frac == 0 || frac == 1)) {
|
||||
if (mPanelExpansionStateChangedListener != null) {
|
||||
mPanelExpansionStateChangedListener.onPanelExpansionStateChanged();
|
||||
@ -302,15 +287,6 @@ public class PhoneStatusBarView extends PanelBar {
|
||||
mPanelEnabledProvider = panelEnabledProvider;
|
||||
}
|
||||
|
||||
private void updateScrimFraction() {
|
||||
float scrimFraction = mPanelFraction;
|
||||
if (mMinFraction < 1.0f) {
|
||||
scrimFraction = Math.max((mPanelFraction - mMinFraction) / (1.0f - mMinFraction),
|
||||
0);
|
||||
}
|
||||
mScrimController.setPanelExpansion(scrimFraction);
|
||||
}
|
||||
|
||||
public void updateResources() {
|
||||
mCutoutSideNudge = getResources().getDimensionPixelSize(
|
||||
R.dimen.display_cutout_margin_consumption);
|
||||
|
@ -34,6 +34,7 @@ import android.view.ViewTreeObserver;
|
||||
import android.view.animation.DecelerateInterpolator;
|
||||
import android.view.animation.Interpolator;
|
||||
|
||||
import androidx.annotation.FloatRange;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
@ -183,8 +184,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
private float mScrimBehindAlphaKeyguard = KEYGUARD_SCRIM_ALPHA;
|
||||
private final float mDefaultScrimAlpha;
|
||||
|
||||
// Assuming the shade is expanded during initialization
|
||||
private float mPanelExpansion = 1f;
|
||||
private float mRawPanelExpansionFraction;
|
||||
private float mPanelScrimMinFraction;
|
||||
// Calculated based on mRawPanelExpansionFraction and mPanelScrimMinFraction
|
||||
private float mPanelExpansionFraction = 1f; // Assume shade is expanded during initialization
|
||||
private float mQsExpansion;
|
||||
private boolean mQsBottomVisible;
|
||||
|
||||
@ -483,14 +486,39 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
*
|
||||
* The expansion fraction is tied to the scrim opacity.
|
||||
*
|
||||
* @param fraction From 0 to 1 where 0 means collapsed and 1 expanded.
|
||||
* See {@link PanelBar#panelExpansionChanged}.
|
||||
*
|
||||
* @param rawPanelExpansionFraction From 0 to 1 where 0 means collapsed and 1 expanded.
|
||||
*/
|
||||
public void setPanelExpansion(float fraction) {
|
||||
if (isNaN(fraction)) {
|
||||
throw new IllegalArgumentException("Fraction should not be NaN");
|
||||
public void setRawPanelExpansionFraction(
|
||||
@FloatRange(from = 0.0, to = 1.0) float rawPanelExpansionFraction) {
|
||||
if (isNaN(rawPanelExpansionFraction)) {
|
||||
throw new IllegalArgumentException("rawPanelExpansionFraction should not be NaN");
|
||||
}
|
||||
if (mPanelExpansion != fraction) {
|
||||
mPanelExpansion = fraction;
|
||||
mRawPanelExpansionFraction = rawPanelExpansionFraction;
|
||||
calculateAndUpdatePanelExpansion();
|
||||
}
|
||||
|
||||
/** See {@link NotificationPanelViewController#setPanelScrimMinFraction(float)}. */
|
||||
public void setPanelScrimMinFraction(float minFraction) {
|
||||
if (isNaN(minFraction)) {
|
||||
throw new IllegalArgumentException("minFraction should not be NaN");
|
||||
}
|
||||
mPanelScrimMinFraction = minFraction;
|
||||
calculateAndUpdatePanelExpansion();
|
||||
}
|
||||
|
||||
private void calculateAndUpdatePanelExpansion() {
|
||||
float panelExpansionFraction = mRawPanelExpansionFraction;
|
||||
if (mPanelScrimMinFraction < 1.0f) {
|
||||
panelExpansionFraction = Math.max(
|
||||
(mRawPanelExpansionFraction - mPanelScrimMinFraction)
|
||||
/ (1.0f - mPanelScrimMinFraction),
|
||||
0);
|
||||
}
|
||||
|
||||
if (mPanelExpansionFraction != panelExpansionFraction) {
|
||||
mPanelExpansionFraction = panelExpansionFraction;
|
||||
|
||||
boolean relevantState = (mState == ScrimState.UNLOCKED
|
||||
|| mState == ScrimState.KEYGUARD
|
||||
@ -892,7 +920,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
}
|
||||
|
||||
private float getInterpolatedFraction() {
|
||||
return Interpolators.getNotificationScrimAlpha(mPanelExpansion, false /* notification */);
|
||||
return Interpolators.getNotificationScrimAlpha(
|
||||
mPanelExpansionFraction, false /* notification */);
|
||||
}
|
||||
|
||||
private void setScrimAlpha(ScrimView scrim, float alpha) {
|
||||
@ -1228,8 +1257,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
pw.println(mTracking);
|
||||
pw.print(" mDefaultScrimAlpha=");
|
||||
pw.println(mDefaultScrimAlpha);
|
||||
pw.print(" mExpansionFraction=");
|
||||
pw.println(mPanelExpansion);
|
||||
pw.print(" mPanelExpansionFraction=");
|
||||
pw.println(mPanelExpansionFraction);
|
||||
pw.print(" mExpansionAffectsAlpha=");
|
||||
pw.println(mExpansionAffectsAlpha);
|
||||
|
||||
|
@ -899,6 +899,8 @@ public class StatusBar extends SystemUI implements
|
||||
lockscreenShadeTransitionController.setStatusbar(this);
|
||||
|
||||
mExpansionChangedListeners = new ArrayList<>();
|
||||
addExpansionChangedListener(
|
||||
(expansion, expanded) -> mScrimController.setRawPanelExpansionFraction(expansion));
|
||||
|
||||
mBubbleExpandListener =
|
||||
(isExpanding, key) -> mContext.getMainExecutor().execute(() -> {
|
||||
@ -1404,6 +1406,12 @@ public class StatusBar extends SystemUI implements
|
||||
mDeviceProvisionedController.addCallback(mUserSetupObserver);
|
||||
mUserSetupObserver.onUserSetupChanged();
|
||||
|
||||
for (ExpansionChangedListener listener : mExpansionChangedListeners) {
|
||||
// The initial expansion amount comes from mNotificationPanelViewController, so we
|
||||
// should send the amount once we've fully set up that controller.
|
||||
sendInitialExpansionAmount(listener);
|
||||
}
|
||||
|
||||
// disable profiling bars, since they overlap and clutter the output on app windows
|
||||
ThreadedRenderer.overrideProperty("disableProfileBars", "true");
|
||||
|
||||
@ -4233,9 +4241,11 @@ public class StatusBar extends SystemUI implements
|
||||
}
|
||||
|
||||
private void sendInitialExpansionAmount(ExpansionChangedListener expansionChangedListener) {
|
||||
expansionChangedListener.onExpansionChanged(
|
||||
mNotificationPanelViewController.getExpandedFraction(),
|
||||
mNotificationPanelViewController.isExpanded());
|
||||
if (mNotificationPanelViewController != null) {
|
||||
expansionChangedListener.onExpansionChanged(
|
||||
mNotificationPanelViewController.getExpandedFraction(),
|
||||
mNotificationPanelViewController.isExpanded());
|
||||
}
|
||||
}
|
||||
|
||||
public void removeExpansionChangedListener(@NonNull ExpansionChangedListener listener) {
|
||||
|
@ -623,7 +623,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void transitionToUnlocked() {
|
||||
mScrimController.setPanelExpansion(0f);
|
||||
mScrimController.setRawPanelExpansionFraction(0f);
|
||||
mScrimController.transitionTo(ScrimState.UNLOCKED);
|
||||
finishAnimationsImmediately();
|
||||
assertScrimAlpha(Map.of(
|
||||
@ -638,7 +638,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
));
|
||||
|
||||
// Back scrim should be visible after start dragging
|
||||
mScrimController.setPanelExpansion(0.3f);
|
||||
mScrimController.setRawPanelExpansionFraction(0.3f);
|
||||
assertScrimAlpha(Map.of(
|
||||
mScrimInFront, TRANSPARENT,
|
||||
mNotificationsScrim, SEMI_TRANSPARENT,
|
||||
@ -663,20 +663,20 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void panelExpansion() {
|
||||
mScrimController.setPanelExpansion(0f);
|
||||
mScrimController.setPanelExpansion(0.5f);
|
||||
mScrimController.setRawPanelExpansionFraction(0f);
|
||||
mScrimController.setRawPanelExpansionFraction(0.5f);
|
||||
mScrimController.transitionTo(ScrimState.UNLOCKED);
|
||||
finishAnimationsImmediately();
|
||||
|
||||
reset(mScrimBehind);
|
||||
mScrimController.setPanelExpansion(0f);
|
||||
mScrimController.setPanelExpansion(1.0f);
|
||||
mScrimController.setRawPanelExpansionFraction(0f);
|
||||
mScrimController.setRawPanelExpansionFraction(1.0f);
|
||||
finishAnimationsImmediately();
|
||||
|
||||
assertEquals("Scrim alpha should change after setPanelExpansion",
|
||||
mScrimBehindAlpha, mScrimBehind.getViewAlpha(), 0.01f);
|
||||
|
||||
mScrimController.setPanelExpansion(0f);
|
||||
mScrimController.setRawPanelExpansionFraction(0f);
|
||||
finishAnimationsImmediately();
|
||||
|
||||
assertEquals("Scrim alpha should change after setPanelExpansion",
|
||||
@ -723,21 +723,21 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void panelExpansionAffectsAlpha() {
|
||||
mScrimController.setPanelExpansion(0f);
|
||||
mScrimController.setPanelExpansion(0.5f);
|
||||
mScrimController.setRawPanelExpansionFraction(0f);
|
||||
mScrimController.setRawPanelExpansionFraction(0.5f);
|
||||
mScrimController.transitionTo(ScrimState.UNLOCKED);
|
||||
finishAnimationsImmediately();
|
||||
|
||||
final float scrimAlpha = mScrimBehind.getViewAlpha();
|
||||
reset(mScrimBehind);
|
||||
mScrimController.setExpansionAffectsAlpha(false);
|
||||
mScrimController.setPanelExpansion(0.8f);
|
||||
mScrimController.setRawPanelExpansionFraction(0.8f);
|
||||
verifyZeroInteractions(mScrimBehind);
|
||||
assertEquals("Scrim opacity shouldn't change when setExpansionAffectsAlpha "
|
||||
+ "is false", scrimAlpha, mScrimBehind.getViewAlpha(), 0.01f);
|
||||
|
||||
mScrimController.setExpansionAffectsAlpha(true);
|
||||
mScrimController.setPanelExpansion(0.1f);
|
||||
mScrimController.setRawPanelExpansionFraction(0.1f);
|
||||
finishAnimationsImmediately();
|
||||
Assert.assertNotEquals("Scrim opacity should change when setExpansionAffectsAlpha "
|
||||
+ "is true", scrimAlpha, mScrimBehind.getViewAlpha(), 0.01f);
|
||||
@ -747,7 +747,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
public void transitionToUnlockedFromOff() {
|
||||
// Simulate unlock with fingerprint without AOD
|
||||
mScrimController.transitionTo(ScrimState.OFF);
|
||||
mScrimController.setPanelExpansion(0f);
|
||||
mScrimController.setRawPanelExpansionFraction(0f);
|
||||
finishAnimationsImmediately();
|
||||
mScrimController.transitionTo(ScrimState.UNLOCKED);
|
||||
|
||||
@ -769,7 +769,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
public void transitionToUnlockedFromAod() {
|
||||
// Simulate unlock with fingerprint
|
||||
mScrimController.transitionTo(ScrimState.AOD);
|
||||
mScrimController.setPanelExpansion(0f);
|
||||
mScrimController.setRawPanelExpansionFraction(0f);
|
||||
finishAnimationsImmediately();
|
||||
mScrimController.transitionTo(ScrimState.UNLOCKED);
|
||||
|
||||
@ -948,7 +948,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void testConservesExpansionOpacityAfterTransition() {
|
||||
mScrimController.transitionTo(ScrimState.UNLOCKED);
|
||||
mScrimController.setPanelExpansion(0.5f);
|
||||
mScrimController.setRawPanelExpansionFraction(0.5f);
|
||||
finishAnimationsImmediately();
|
||||
|
||||
final float expandedAlpha = mScrimBehind.getViewAlpha();
|
||||
@ -1075,7 +1075,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void testScrimsOpaque_whenShadeFullyExpanded() {
|
||||
mScrimController.transitionTo(ScrimState.UNLOCKED);
|
||||
mScrimController.setPanelExpansion(1);
|
||||
mScrimController.setRawPanelExpansionFraction(1);
|
||||
// notifications scrim alpha change require calling setQsPosition
|
||||
mScrimController.setQsPosition(0, 300);
|
||||
finishAnimationsImmediately();
|
||||
@ -1089,7 +1089,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void testScrimsVisible_whenShadeVisible() {
|
||||
mScrimController.transitionTo(ScrimState.UNLOCKED);
|
||||
mScrimController.setPanelExpansion(0.3f);
|
||||
mScrimController.setRawPanelExpansionFraction(0.3f);
|
||||
// notifications scrim alpha change require calling setQsPosition
|
||||
mScrimController.setQsPosition(0, 300);
|
||||
finishAnimationsImmediately();
|
||||
@ -1124,7 +1124,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
public void testScrimsVisible_whenShadeVisible_clippingQs() {
|
||||
mScrimController.setClipsQsScrim(true);
|
||||
mScrimController.transitionTo(ScrimState.UNLOCKED);
|
||||
mScrimController.setPanelExpansion(0.3f);
|
||||
mScrimController.setRawPanelExpansionFraction(0.3f);
|
||||
// notifications scrim alpha change require calling setQsPosition
|
||||
mScrimController.setQsPosition(0.5f, 300);
|
||||
finishAnimationsImmediately();
|
||||
@ -1150,7 +1150,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
public void testNotificationScrimTransparent_whenOnLockscreen() {
|
||||
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
||||
// even if shade is not pulled down, panel has expansion of 1 on the lockscreen
|
||||
mScrimController.setPanelExpansion(1);
|
||||
mScrimController.setRawPanelExpansionFraction(1);
|
||||
mScrimController.setQsPosition(0f, /*qs panel bottom*/ 0);
|
||||
|
||||
assertScrimAlpha(Map.of(
|
||||
@ -1160,7 +1160,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void testNotificationScrimVisible_afterOpeningShadeFromLockscreen() {
|
||||
mScrimController.setPanelExpansion(1);
|
||||
mScrimController.setRawPanelExpansionFraction(1);
|
||||
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
||||
finishAnimationsImmediately();
|
||||
|
||||
@ -1203,11 +1203,11 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void testNotificationTransparency_followsTransitionToFullShade() {
|
||||
mScrimController.transitionTo(ScrimState.SHADE_LOCKED);
|
||||
mScrimController.setPanelExpansion(1.0f);
|
||||
mScrimController.setRawPanelExpansionFraction(1.0f);
|
||||
finishAnimationsImmediately();
|
||||
float shadeLockedAlpha = mNotificationsScrim.getViewAlpha();
|
||||
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
||||
mScrimController.setPanelExpansion(1.0f);
|
||||
mScrimController.setRawPanelExpansionFraction(1.0f);
|
||||
finishAnimationsImmediately();
|
||||
float keyguardAlpha = mNotificationsScrim.getViewAlpha();
|
||||
|
||||
@ -1227,7 +1227,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
}
|
||||
|
||||
private void assertAlphaAfterExpansion(ScrimView scrim, float expectedAlpha, float expansion) {
|
||||
mScrimController.setPanelExpansion(expansion);
|
||||
mScrimController.setRawPanelExpansionFraction(expansion);
|
||||
finishAnimationsImmediately();
|
||||
// alpha is not changing linearly thus 0.2 of leeway when asserting
|
||||
assertEquals(expectedAlpha, mNotificationsScrim.getViewAlpha(), 0.2);
|
||||
|
Loading…
x
Reference in New Issue
Block a user