diff --git a/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleAnimation.kt b/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleAnimation.kt index 7897934fa2645..442c6fadb7c12 100644 --- a/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleAnimation.kt +++ b/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleAnimation.kt @@ -66,11 +66,28 @@ class RippleAnimation(private val config: RippleAnimationConfig) { fun isPlaying(): Boolean = animator.isRunning private fun applyConfigToShader() { - rippleShader.setCenter(config.centerX, config.centerY) - rippleShader.setMaxSize(config.maxWidth, config.maxHeight) - rippleShader.rippleFill = config.shouldFillRipple - rippleShader.pixelDensity = config.pixelDensity - rippleShader.color = ColorUtils.setAlphaComponent(config.color, config.opacity) - rippleShader.sparkleStrength = config.sparkleStrength + with(rippleShader) { + setCenter(config.centerX, config.centerY) + setMaxSize(config.maxWidth, config.maxHeight) + pixelDensity = config.pixelDensity + color = ColorUtils.setAlphaComponent(config.color, config.opacity) + sparkleStrength = config.sparkleStrength + + assignFadeParams(baseRingFadeParams, config.baseRingFadeParams) + assignFadeParams(sparkleRingFadeParams, config.sparkleRingFadeParams) + assignFadeParams(centerFillFadeParams, config.centerFillFadeParams) + } + } + + private fun assignFadeParams( + destFadeParams: RippleShader.FadeParams, + srcFadeParams: RippleShader.FadeParams? + ) { + srcFadeParams?.let { + destFadeParams.fadeInStart = it.fadeInStart + destFadeParams.fadeInEnd = it.fadeInEnd + destFadeParams.fadeOutStart = it.fadeOutStart + destFadeParams.fadeOutEnd = it.fadeOutEnd + } } } diff --git a/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleAnimationConfig.kt b/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleAnimationConfig.kt index 773ac55130d4e..1786d139e9663 100644 --- a/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleAnimationConfig.kt +++ b/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleAnimationConfig.kt @@ -20,8 +20,11 @@ data class RippleAnimationConfig( val pixelDensity: Float = 1f, var color: Int = Color.WHITE, val opacity: Int = RIPPLE_DEFAULT_ALPHA, - val shouldFillRipple: Boolean = false, val sparkleStrength: Float = RIPPLE_SPARKLE_STRENGTH, + // Null means it uses default fade parameter values. + val baseRingFadeParams: RippleShader.FadeParams? = null, + val sparkleRingFadeParams: RippleShader.FadeParams? = null, + val centerFillFadeParams: RippleShader.FadeParams? = null, val shouldDistort: Boolean = true ) { companion object { diff --git a/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleShader.kt b/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleShader.kt index 74bc9105c4f3c..83909652b495e 100644 --- a/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleShader.kt +++ b/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleShader.kt @@ -270,38 +270,6 @@ class RippleShader(rippleShape: RippleShape = RippleShape.CIRCLE) : var currentHeight: Float = 0f private set - /** - * True if the ripple should stayed filled in as it expands to give a filled-in circle effect. - * False for a ring effect. - * - *
You must reset fade params after changing this. - * - * TODO(b/265326983): Remove this and only expose fade params. - */ - var rippleFill: Boolean = false - set(value) { - if (value) { - baseRingFadeParams.fadeOutStart = 1f - baseRingFadeParams.fadeOutEnd = 1f - - centerFillFadeParams.fadeInStart = 0f - centerFillFadeParams.fadeInEnd = 0f - centerFillFadeParams.fadeOutStart = 1f - centerFillFadeParams.fadeOutEnd = 1f - } else { - // Set back to the original fade parameters. - // Ideally this should be set by the client as they know the initial value. - baseRingFadeParams.fadeOutStart = DEFAULT_BASE_RING_FADE_OUT_START - baseRingFadeParams.fadeOutEnd = DEFAULT_FADE_OUT_END - - centerFillFadeParams.fadeInStart = DEFAULT_FADE_IN_START - centerFillFadeParams.fadeInEnd = DEFAULT_CENTER_FILL_FADE_IN_END - centerFillFadeParams.fadeOutStart = DEFAULT_CENTER_FILL_FADE_OUT_START - centerFillFadeParams.fadeOutEnd = DEFAULT_CENTER_FILL_FADE_OUT_END - } - field = value - } - /** Parameters that are used to fade in/ out of the sparkle ring. */ val sparkleRingFadeParams = FadeParams( @@ -324,12 +292,7 @@ class RippleShader(rippleShape: RippleShape = RippleShape.CIRCLE) : DEFAULT_FADE_OUT_END ) - /** - * Parameters that are used to fade in/ out of the center fill. - * - *
Note that if [rippleFill] is set to true, those will be ignored and the center fill will - * be always full alpha. - */ + /** Parameters that are used to fade in/ out of the center fill. */ val centerFillFadeParams = FadeParams( DEFAULT_FADE_IN_START, diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java index 0b4b668a04027..7f420a8d1055a 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java @@ -1136,8 +1136,10 @@ public class MediaControlPanel { /* pixelDensity= */ getContext().getResources().getDisplayMetrics().density, mColorSchemeTransition.getAccentPrimary().getCurrentColor(), /* opacity= */ 100, - /* shouldFillRipple= */ false, /* sparkleStrength= */ 0f, + /* baseRingFadeParams= */ null, + /* sparkleRingFadeParams= */ null, + /* centerFillFadeParams= */ null, /* shouldDistort= */ false ) ); diff --git a/packages/SystemUI/tests/src/com/android/systemui/surfaceeffects/ripple/RippleAnimationTest.kt b/packages/SystemUI/tests/src/com/android/systemui/surfaceeffects/ripple/RippleAnimationTest.kt index 756397a30e436..74ed7fb2c6992 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/surfaceeffects/ripple/RippleAnimationTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/surfaceeffects/ripple/RippleAnimationTest.kt @@ -42,13 +42,35 @@ class RippleAnimationTest : SysuiTestCase() { pixelDensity = 2f, color = Color.RED, opacity = 30, - shouldFillRipple = true, + baseRingFadeParams = + RippleShader.FadeParams( + fadeInStart = 0f, + fadeInEnd = 0.3f, + fadeOutStart = 0.5f, + fadeOutEnd = 1f + ), + sparkleRingFadeParams = + RippleShader.FadeParams( + fadeInStart = 0.1f, + fadeInEnd = 0.2f, + fadeOutStart = 0.7f, + fadeOutEnd = 0.9f + ), + centerFillFadeParams = + RippleShader.FadeParams( + fadeInStart = 0f, + fadeInEnd = 0.1f, + fadeOutStart = 0.2f, + fadeOutEnd = 0.3f + ), sparkleStrength = 0.3f ) val rippleAnimation = RippleAnimation(config) with(rippleAnimation.rippleShader) { - assertThat(rippleFill).isEqualTo(config.shouldFillRipple) + assertThat(baseRingFadeParams).isEqualTo(config.baseRingFadeParams) + assertThat(sparkleRingFadeParams).isEqualTo(config.sparkleRingFadeParams) + assertThat(centerFillFadeParams).isEqualTo(config.centerFillFadeParams) assertThat(pixelDensity).isEqualTo(config.pixelDensity) assertThat(color).isEqualTo(ColorUtils.setAlphaComponent(config.color, config.opacity)) assertThat(sparkleStrength).isEqualTo(config.sparkleStrength)