diff options
| author | 2022-08-19 16:14:56 +0000 | |
|---|---|---|
| committer | 2022-08-19 16:14:56 +0000 | |
| commit | b61ef2b0fb8100bc39f15632d4fb79daa4df2d3a (patch) | |
| tree | b024897ff29ccf56bec96cd75557bf33a2e3d0b6 | |
| parent | 4141dae2122612228bb446022c271127e02ed66c (diff) | |
| parent | e73edf2ef1b74fa652cfad307756b3ed8660649b (diff) | |
Merge "Polish the rounded box ripple." into tm-qpr-dev am: e73edf2ef1
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19611097
Change-Id: Ic07e33e4b7da1302106d371b16f3afd8598f94a0
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
3 files changed, 33 insertions, 9 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java index 47ea27ff8ccb..08393386c27f 100644 --- a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java +++ b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java @@ -30,6 +30,8 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; +import androidx.core.graphics.ColorUtils; + import com.android.settingslib.Utils; import com.android.systemui.R; import com.android.systemui.animation.Interpolators; @@ -42,7 +44,8 @@ import java.text.NumberFormat; * @hide */ final class WirelessChargingLayout extends FrameLayout { - private static final long RIPPLE_ANIMATION_DURATION = 1500; + private static final long CIRCLE_RIPPLE_ANIMATION_DURATION = 1500; + private static final long ROUNDED_BOX_RIPPLE_ANIMATION_DURATION = 1750; private static final int SCRIM_COLOR = 0x4C000000; private static final int SCRIM_FADE_DURATION = 300; private RippleView mRippleView; @@ -131,17 +134,30 @@ final class WirelessChargingLayout extends FrameLayout { "backgroundColor", SCRIM_COLOR, Color.TRANSPARENT); scrimFadeOutAnimator.setDuration(SCRIM_FADE_DURATION); scrimFadeOutAnimator.setInterpolator(Interpolators.LINEAR); - scrimFadeOutAnimator.setStartDelay(RIPPLE_ANIMATION_DURATION - SCRIM_FADE_DURATION); + scrimFadeOutAnimator.setStartDelay((rippleShape == RippleShape.CIRCLE + ? CIRCLE_RIPPLE_ANIMATION_DURATION : ROUNDED_BOX_RIPPLE_ANIMATION_DURATION) + - SCRIM_FADE_DURATION); AnimatorSet animatorSetScrim = new AnimatorSet(); animatorSetScrim.playTogether(scrimFadeInAnimator, scrimFadeOutAnimator); animatorSetScrim.start(); mRippleView = findViewById(R.id.wireless_charging_ripple); mRippleView.setupShader(rippleShape); + if (mRippleView.getRippleShape() == RippleShape.ROUNDED_BOX) { + mRippleView.setDuration(ROUNDED_BOX_RIPPLE_ANIMATION_DURATION); + mRippleView.setSparkleStrength(0.22f); + int color = Utils.getColorAttr(mRippleView.getContext(), + android.R.attr.colorAccent).getDefaultColor(); + mRippleView.setColor(ColorUtils.setAlphaComponent(color, 28)); + } else { + mRippleView.setDuration(CIRCLE_RIPPLE_ANIMATION_DURATION); + mRippleView.setColor(Utils.getColorAttr(mRippleView.getContext(), + android.R.attr.colorAccent).getDefaultColor()); + } + OnAttachStateChangeListener listener = new OnAttachStateChangeListener() { @Override public void onViewAttachedToWindow(View view) { - mRippleView.setDuration(RIPPLE_ANIMATION_DURATION); mRippleView.startRipple(); mRippleView.removeOnAttachStateChangeListener(this); } @@ -232,13 +248,13 @@ final class WirelessChargingLayout extends FrameLayout { int height = getMeasuredHeight(); mRippleView.setCenter(width * 0.5f, height * 0.5f); if (mRippleView.getRippleShape() == RippleShape.ROUNDED_BOX) { - mRippleView.setMaxSize(width * 1.5f, height * 1.5f); + // Those magic numbers are introduced for visual polish. This aspect ratio maps with + // the tablet's docking station. + mRippleView.setMaxSize(width * 1.36f, height * 1.46f); } else { float maxSize = Math.max(width, height); mRippleView.setMaxSize(maxSize, maxSize); } - mRippleView.setColor(Utils.getColorAttr(mRippleView.getContext(), - android.R.attr.colorAccent).getDefaultColor()); } super.onLayout(changed, left, top, right, bottom); diff --git a/packages/SystemUI/src/com/android/systemui/ripple/RippleShader.kt b/packages/SystemUI/src/com/android/systemui/ripple/RippleShader.kt index 56a187429af6..db7c1fd86be0 100644 --- a/packages/SystemUI/src/com/android/systemui/ripple/RippleShader.kt +++ b/packages/SystemUI/src/com/android/systemui/ripple/RippleShader.kt @@ -67,7 +67,7 @@ class RippleShader internal constructor(rippleShape: RippleShape = RippleShape.C float rippleInsideAlpha = (1.-inside) * in_fadeFill; float rippleRingAlpha = (1.-sparkleRing) * in_fadeRing; - float rippleAlpha = max(rippleInsideAlpha, rippleRingAlpha) * 0.45; + float rippleAlpha = max(rippleInsideAlpha, rippleRingAlpha) * in_color.a; vec4 ripple = in_color * rippleAlpha; return mix(ripple, vec4(sparkle), sparkle * in_sparkle_strength); } @@ -83,7 +83,7 @@ class RippleShader internal constructor(rippleShape: RippleShape = RippleShape.C float rippleInsideAlpha = (1.-inside) * in_fadeFill; float rippleRingAlpha = (1.-sparkleRing) * in_fadeRing; - float rippleAlpha = max(rippleInsideAlpha, rippleRingAlpha) * 0.45; + float rippleAlpha = max(rippleInsideAlpha, rippleRingAlpha) * in_color.a; vec4 ripple = in_color * rippleAlpha; return mix(ripple, vec4(sparkle), sparkle * in_sparkle_strength); } @@ -99,7 +99,7 @@ class RippleShader internal constructor(rippleShape: RippleShape = RippleShape.C float rippleInsideAlpha = (1.-inside) * in_fadeFill; float rippleRingAlpha = (1.-sparkleRing) * in_fadeRing; - float rippleAlpha = max(rippleInsideAlpha, rippleRingAlpha) * 0.45; + float rippleAlpha = max(rippleInsideAlpha, rippleRingAlpha) * in_color.a; vec4 ripple = in_color * rippleAlpha; return mix(ripple, vec4(sparkle), sparkle * in_sparkle_strength); } diff --git a/packages/SystemUI/src/com/android/systemui/ripple/RippleView.kt b/packages/SystemUI/src/com/android/systemui/ripple/RippleView.kt index 8b0120177268..60c8f3719a2e 100644 --- a/packages/SystemUI/src/com/android/systemui/ripple/RippleView.kt +++ b/packages/SystemUI/src/com/android/systemui/ripple/RippleView.kt @@ -81,6 +81,7 @@ open class RippleView(context: Context?, attrs: AttributeSet?) : View(context, a rippleShader.color = RIPPLE_DEFAULT_COLOR rippleShader.progress = 0f rippleShader.sparkleStrength = RIPPLE_SPARKLE_STRENGTH + rippleShader.pixelDensity = resources.displayMetrics.density ripplePaint.shader = rippleShader } @@ -124,6 +125,13 @@ open class RippleView(context: Context?, attrs: AttributeSet?) : View(context, a rippleShader.rippleFill = rippleFill } + /** + * Set the intensity of the sparkles. + */ + fun setSparkleStrength(strength: Float) { + rippleShader.sparkleStrength = strength + } + override fun onDraw(canvas: Canvas?) { if (canvas == null || !canvas.isHardwareAccelerated) { // Drawing with the ripple shader requires hardware acceleration, so skip |