From 5501d76cc42817f86829fb04828f9e2e0f2cee97 Mon Sep 17 00:00:00 2001 From: Shan Huang Date: Thu, 1 Apr 2021 11:29:16 +0800 Subject: [PATCH] Increase the size of ripple sparkle Test: Manully Test: SysUITests Bug:183382912 Change-Id: I4c358ac37d6dec05fdff8474ebee32f4ba18de3e --- .../statusbar/charging/ChargingRippleView.kt | 13 ++++++++- .../statusbar/charging/RippleShader.kt | 29 ++++++++++++------- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt index 2f198d5002997..77b418670ca6e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt @@ -20,13 +20,14 @@ import android.animation.Animator import android.animation.AnimatorListenerAdapter import android.animation.ValueAnimator import android.content.Context +import android.content.res.Configuration import android.graphics.Canvas import android.graphics.Paint import android.graphics.PointF import android.util.AttributeSet import android.view.View -private const val RIPPLE_SPARKLE_STRENGTH: Float = 0.4f +private const val RIPPLE_SPARKLE_STRENGTH: Float = 0.3f /** * Expanding ripple effect that shows when charging begins. @@ -51,6 +52,16 @@ class ChargingRippleView(context: Context?, attrs: AttributeSet?) : View(context visibility = View.GONE } + override fun onConfigurationChanged(newConfig: Configuration?) { + rippleShader.pixelDensity = resources.displayMetrics.density + super.onConfigurationChanged(newConfig) + } + + override fun onAttachedToWindow() { + rippleShader.pixelDensity = resources.displayMetrics.density + super.onAttachedToWindow() + } + fun startRipple() { if (rippleInProgress) { return // Ignore if ripple effect is already playing diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt b/packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt index 296868a20dad9..146046b333751 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt @@ -42,6 +42,7 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) { uniform float in_fadeCircle; uniform float in_fadeRing; uniform float in_blur; + uniform float in_pixelDensity; uniform vec4 in_color; uniform float in_sparkle_strength;""" private const val SHADER_LIB = """float triangleNoise(vec2 n) { @@ -60,12 +61,13 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) { float n = triangleNoise(uv); float s = 0.0; for (float i = 0; i < 4; i += 1) { - float l = i * 0.25; - float h = l + 0.005; - float o = abs(sin(0.1 * PI * (t + i))); - s += threshold(n + o, l, h); + float l = i * 0.01; + float h = l + 0.1; + float o = smoothstep(n - l, h, n); + o *= abs(sin(PI * o * (t + 0.55 * i))); + s += o; } - return saturate(s); + return s; } float softCircle(vec2 uv, vec2 xy, float radius, float blur) { @@ -96,10 +98,11 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) { // Draw shapes float sparkleRing = softRing(p_distorted, in_origin, in_radius, in_blur); - float sparkle = sparkles(p, in_time * 0.000033) * sparkleRing * in_fadeSparkle; + float sparkle = sparkles(p - mod(p, in_pixelDensity * 0.8), in_time * 0.00175) + * sparkleRing * in_fadeSparkle; float circle = softCircle(p_distorted, in_origin, in_radius * 1.2, in_blur); float rippleAlpha = max(circle * in_fadeCircle, - softRing(p_distorted, in_origin, in_radius, in_blur) * in_fadeRing) * 0.36; + softRing(p_distorted, in_origin, in_radius, in_blur) * in_fadeRing) * 0.45; vec4 ripple = in_color * rippleAlpha; return mix(ripple, vec4(sparkle), sparkle * in_sparkle_strength); }""" @@ -139,12 +142,12 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) { field = value setUniform("in_progress", value) setUniform("in_radius", - (1 - (1 - value) * (1 - value) * (1 - value))* 1.2f * radius) + (1 - (1 - value) * (1 - value) * (1 - value))* radius) setUniform("in_blur", MathUtils.lerp(1.25f, 0.5f, value)) val fadeIn = subProgress(0f, 0.1f, value) - val fadeOutNoise = subProgress(0.8f, 1f, value) - val fadeOutRipple = subProgress(0.4f, 1f, value) + val fadeOutNoise = subProgress(0.4f, 1f, value) + val fadeOutRipple = subProgress(0.3f, 1f, value) val fadeCircle = subProgress(0f, 0.2f, value) setUniform("in_fadeSparkle", Math.min(fadeIn, 1 - fadeOutNoise)) setUniform("in_fadeCircle", 1 - fadeCircle) @@ -191,4 +194,10 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) { setUniform("in_distort_radial", 75 * progress * value) setUniform("in_distort_xy", 75 * value) } + + var pixelDensity: Float = 1.0f + set(value) { + field = value + setUniform("in_pixelDensity", value) + } }