Merge "Hiding split shade status bar for heads up notifications" into sc-v2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
6366f4e22a
@@ -197,26 +197,6 @@ public class Interpolators {
|
||||
return MathUtils.max(0.0f, (float) (1.0f - Math.exp(-4 * progress)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Interpolate alpha for notifications background scrim during shade expansion.
|
||||
* @param fraction Shade expansion fraction
|
||||
* @param forUiContent If we want the alpha of the scrims, or ui that's on top of them.
|
||||
*/
|
||||
public static float getNotificationScrimAlpha(float fraction, boolean forUiContent) {
|
||||
if (forUiContent) {
|
||||
fraction = MathUtils.constrainedMap(0f, 1f, 0.3f, 1f, fraction);
|
||||
} else {
|
||||
fraction = MathUtils.constrainedMap(0f, 1f, 0f, 0.5f, fraction);
|
||||
}
|
||||
fraction = fraction * 1.2f - 0.2f;
|
||||
if (fraction <= 0) {
|
||||
return 0;
|
||||
} else {
|
||||
final float oneMinusFrac = 1f - fraction;
|
||||
return (float) (1f - 0.5f * (1f - Math.cos(3.14159f * oneMinusFrac * oneMinusFrac)));
|
||||
}
|
||||
}
|
||||
|
||||
// Create the default emphasized interpolator
|
||||
private static PathInterpolator createEmphasizedInterpolator() {
|
||||
Path path = new Path();
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.android.systemui.animation
|
||||
|
||||
import android.util.MathUtils
|
||||
|
||||
object ShadeInterpolation {
|
||||
|
||||
/**
|
||||
* Interpolate alpha for notification background scrim during shade expansion.
|
||||
* @param fraction Shade expansion fraction
|
||||
*/
|
||||
@JvmStatic
|
||||
fun getNotificationScrimAlpha(fraction: Float): Float {
|
||||
val mappedFraction = MathUtils.constrainedMap(0f, 1f, 0f, 0.5f, fraction)
|
||||
return interpolateEaseInOut(mappedFraction)
|
||||
}
|
||||
|
||||
/**
|
||||
* Interpolate alpha for shade content during shade expansion.
|
||||
* @param fraction Shade expansion fraction
|
||||
*/
|
||||
@JvmStatic
|
||||
fun getContentAlpha(fraction: Float): Float {
|
||||
val mappedFraction = MathUtils.constrainedMap(0f, 1f, 0.3f, 1f, fraction)
|
||||
return interpolateEaseInOut(mappedFraction)
|
||||
}
|
||||
|
||||
private fun interpolateEaseInOut(fraction: Float): Float {
|
||||
val mappedFraction = fraction * 1.2f - 0.2f
|
||||
return if (mappedFraction <= 0) {
|
||||
0f
|
||||
} else {
|
||||
val oneMinusFrac = 1f - mappedFraction
|
||||
(1f - 0.5f * (1f - Math.cos((3.14159f * oneMinusFrac * oneMinusFrac).toDouble())))
|
||||
.toFloat()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -39,6 +39,7 @@ import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.animation.Interpolators;
|
||||
import com.android.systemui.animation.ShadeInterpolation;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.media.MediaHost;
|
||||
import com.android.systemui.plugins.FalsingManager;
|
||||
@@ -573,7 +574,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
} else if (progress > 0 && view.getVisibility() != View.VISIBLE) {
|
||||
view.setVisibility((View.VISIBLE));
|
||||
}
|
||||
float alpha = Interpolators.getNotificationScrimAlpha(progress, true /* uiContent */);
|
||||
float alpha = ShadeInterpolation.getContentAlpha(progress);
|
||||
view.setAlpha(alpha);
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ import androidx.dynamicanimation.animation.SpringAnimation
|
||||
import androidx.dynamicanimation.animation.SpringForce
|
||||
import com.android.systemui.Dumpable
|
||||
import com.android.systemui.animation.Interpolators
|
||||
import com.android.systemui.animation.ShadeInterpolation
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.dump.DumpManager
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
||||
@@ -184,12 +185,12 @@ class NotificationShadeDepthController @Inject constructor(
|
||||
val animationRadius = MathUtils.constrain(shadeAnimation.radius,
|
||||
blurUtils.minBlurRadius.toFloat(), blurUtils.maxBlurRadius.toFloat())
|
||||
val expansionRadius = blurUtils.blurRadiusOfRatio(
|
||||
Interpolators.getNotificationScrimAlpha(
|
||||
if (shouldApplyShadeBlur()) shadeExpansion else 0f, false))
|
||||
ShadeInterpolation.getNotificationScrimAlpha(
|
||||
if (shouldApplyShadeBlur()) shadeExpansion else 0f))
|
||||
var combinedBlur = (expansionRadius * INTERACTION_BLUR_FRACTION +
|
||||
animationRadius * ANIMATION_BLUR_FRACTION)
|
||||
val qsExpandedRatio = Interpolators.getNotificationScrimAlpha(qsPanelExpansion,
|
||||
false /* notification */) * shadeExpansion
|
||||
val qsExpandedRatio = ShadeInterpolation.getNotificationScrimAlpha(qsPanelExpansion) *
|
||||
shadeExpansion
|
||||
combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(qsExpandedRatio))
|
||||
combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(transitionToFullShadeProgress))
|
||||
var shadeRadius = max(combinedBlur, wakeAndUnlockBlurRadius)
|
||||
|
||||
@@ -31,7 +31,7 @@ import android.view.animation.PathInterpolator;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.animation.Interpolators;
|
||||
import com.android.systemui.animation.ShadeInterpolation;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
|
||||
import com.android.systemui.statusbar.notification.NotificationUtils;
|
||||
import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
|
||||
@@ -168,8 +168,8 @@ public class NotificationShelf extends ActivatableNotificationView implements
|
||||
viewState.clipTopAmount = 0;
|
||||
|
||||
if (ambientState.isExpansionChanging() && !ambientState.isOnKeyguard()) {
|
||||
viewState.alpha = Interpolators.getNotificationScrimAlpha(
|
||||
ambientState.getExpansionFraction(), true /* notification */);
|
||||
float expansion = ambientState.getExpansionFraction();
|
||||
viewState.alpha = ShadeInterpolation.getContentAlpha(expansion);
|
||||
} else {
|
||||
viewState.alpha = 1f - ambientState.getHideAmount();
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ import android.view.ViewGroup;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.animation.Interpolators;
|
||||
import com.android.systemui.animation.ShadeInterpolation;
|
||||
import com.android.systemui.statusbar.NotificationShelf;
|
||||
import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
|
||||
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
|
||||
@@ -408,8 +408,8 @@ public class StackScrollAlgorithm {
|
||||
viewState.alpha = 1f - ambientState.getHideAmount();
|
||||
} else if (ambientState.isExpansionChanging()) {
|
||||
// Adjust alpha for shade open & close.
|
||||
viewState.alpha = Interpolators.getNotificationScrimAlpha(
|
||||
ambientState.getExpansionFraction(), true /* notification */);
|
||||
float expansion = ambientState.getExpansionFraction();
|
||||
viewState.alpha = ShadeInterpolation.getContentAlpha(expansion);
|
||||
}
|
||||
|
||||
if (ambientState.isShadeExpanded() && view.mustStayOnScreen()
|
||||
|
||||
@@ -1247,6 +1247,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
stackScrollerPadding = mClockPositionResult.stackScrollerPaddingExpanded;
|
||||
}
|
||||
|
||||
mSplitShadeHeaderController.setShadeExpandedFraction(getExpandedFraction());
|
||||
mNotificationStackScrollLayoutController.setIntrinsicPadding(stackScrollerPadding);
|
||||
mKeyguardBottomArea.setAntiBurnInOffsetX(mClockPositionResult.clockX);
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ import com.android.settingslib.Utils;
|
||||
import com.android.systemui.DejankUtils;
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.animation.Interpolators;
|
||||
import com.android.systemui.animation.ShadeInterpolation;
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.dock.DockManager;
|
||||
@@ -579,8 +579,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
if (isNaN(expansionFraction)) {
|
||||
return;
|
||||
}
|
||||
expansionFraction = Interpolators
|
||||
.getNotificationScrimAlpha(expansionFraction, false /* notification */);
|
||||
expansionFraction = ShadeInterpolation.getNotificationScrimAlpha(expansionFraction);
|
||||
boolean qsBottomVisible = qsPanelBottomY > 0;
|
||||
if (mQsExpansion != expansionFraction || mQsBottomVisible != qsBottomVisible) {
|
||||
mQsExpansion = expansionFraction;
|
||||
@@ -915,8 +914,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
}
|
||||
|
||||
private float getInterpolatedFraction() {
|
||||
return Interpolators.getNotificationScrimAlpha(
|
||||
mPanelExpansionFraction, false /* notification */);
|
||||
return ShadeInterpolation.getNotificationScrimAlpha(mPanelExpansionFraction);
|
||||
}
|
||||
|
||||
private void setScrimAlpha(ScrimView scrim, float alpha) {
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.phone
|
||||
|
||||
import android.view.View
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.animation.ShadeInterpolation
|
||||
import com.android.systemui.battery.BatteryMeterView
|
||||
import com.android.systemui.battery.BatteryMeterViewController
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
@@ -53,6 +54,14 @@ class SplitShadeHeaderController @Inject constructor(
|
||||
updateVisibility()
|
||||
}
|
||||
|
||||
var shadeExpandedFraction = -1f
|
||||
set(value) {
|
||||
if (visible && field != value) {
|
||||
statusBar.alpha = ShadeInterpolation.getContentAlpha(value)
|
||||
field = value
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
batteryMeterViewController.init()
|
||||
val batteryIcon: BatteryMeterView = statusBar.findViewById(R.id.batteryRemainingIcon)
|
||||
|
||||
@@ -24,7 +24,7 @@ import android.view.View
|
||||
import android.view.ViewRootImpl
|
||||
import androidx.test.filters.SmallTest
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.animation.Interpolators
|
||||
import com.android.systemui.animation.ShadeInterpolation
|
||||
import com.android.systemui.dump.DumpManager
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
||||
import com.android.systemui.statusbar.phone.BiometricUnlockController
|
||||
@@ -208,7 +208,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
|
||||
notificationShadeDepthController.onPanelExpansionChanged(1f, tracking = false)
|
||||
notificationShadeDepthController.updateBlurCallback.doFrame(0)
|
||||
verify(wallpaperController).setNotificationShadeZoom(
|
||||
eq(Interpolators.getNotificationScrimAlpha(0.25f, false /* notifications */)))
|
||||
eq(ShadeInterpolation.getNotificationScrimAlpha(0.25f)))
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user