diff options
| author | 2023-05-16 14:27:00 +0000 | |
|---|---|---|
| committer | 2023-05-16 15:54:16 +0000 | |
| commit | cfaedc5090bc1333640def06a554cf8640ea2d62 (patch) | |
| tree | ca3608e676b30207f9db3ad487b2c7bb96318d81 | |
| parent | be5b49dc06f8dc375768b268c0aa8ada76ad19b8 (diff) | |
Only call saveLayerAlpha when alpha is not at max or min values
Bug: 282226587
Bug: 282677494
Bug: 282769559
Test: Checked use cases on device
Change-Id: Id8dd5c61db6b654c30ebeba32d9d16e83c76c55c
4 files changed, 31 insertions, 14 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockFrame.kt b/packages/SystemUI/src/com/android/keyguard/KeyguardClockFrame.kt index d821d309adde..635f0fa44234 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockFrame.kt +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockFrame.kt @@ -18,14 +18,24 @@ class KeyguardClockFrame( } protected override fun dispatchDraw(canvas: Canvas) { - val restoreTo = saveCanvasAlpha(this, canvas, drawAlpha) - super.dispatchDraw(canvas) - canvas.restoreToCount(restoreTo) + saveCanvasAlpha(this, canvas, drawAlpha) { super.dispatchDraw(it) } } companion object { @JvmStatic - fun saveCanvasAlpha(view: View, canvas: Canvas, alpha: Int): Int { + fun saveCanvasAlpha(view: View, canvas: Canvas, alpha: Int, drawFunc: (Canvas) -> Unit) { + if (alpha <= 0) { + // Zero Alpha -> skip drawing phase + return + } + + if (alpha >= 255) { + // Max alpha -> no need for layer + drawFunc(canvas) + return + } + + // Find x & y of view on screen var (x, y) = run { val locationOnScreen = IntArray(2) @@ -33,7 +43,10 @@ class KeyguardClockFrame( Pair(locationOnScreen[0].toFloat(), locationOnScreen[1].toFloat()) } - return canvas.saveLayerAlpha(-1f * x, -1f * y, x + view.width, y + view.height, alpha) + val restoreTo = + canvas.saveLayerAlpha(-1f * x, -1f * y, x + view.width, y + view.height, alpha) + drawFunc(canvas) + canvas.restoreToCount(restoreTo) } } } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java index 05a8f9fc9ae2..e54d4739dc97 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java @@ -130,9 +130,12 @@ public class KeyguardClockSwitch extends RelativeLayout { @Override protected void dispatchDraw(Canvas canvas) { - int restoreTo = KeyguardClockFrame.saveCanvasAlpha(this, canvas, mDrawAlpha); - super.dispatchDraw(canvas); - canvas.restoreToCount(restoreTo); + KeyguardClockFrame.saveCanvasAlpha( + this, canvas, mDrawAlpha, + c -> { + super.dispatchDraw(c); + return kotlin.Unit.INSTANCE; + }); } public void setLogBuffer(LogBuffer logBuffer) { diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusContainer.kt b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusContainer.kt index d885892ec0ab..298eff27060b 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusContainer.kt +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusContainer.kt @@ -17,8 +17,6 @@ class KeyguardStatusContainer( } protected override fun dispatchDraw(canvas: Canvas) { - val restoreTo = KeyguardClockFrame.saveCanvasAlpha(this, canvas, drawAlpha) - super.dispatchDraw(canvas) - canvas.restoreToCount(restoreTo) + KeyguardClockFrame.saveCanvasAlpha(this, canvas, drawAlpha) { super.dispatchDraw(canvas) } } } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java index 553af5b8fa41..a6252a39ee8a 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java @@ -146,8 +146,11 @@ public class KeyguardStatusView extends GridLayout { @Override protected void dispatchDraw(Canvas canvas) { - int restoreTo = KeyguardClockFrame.saveCanvasAlpha(this, canvas, mDrawAlpha); - super.dispatchDraw(canvas); - canvas.restoreToCount(restoreTo); + KeyguardClockFrame.saveCanvasAlpha( + this, canvas, mDrawAlpha, + c -> { + super.dispatchDraw(c); + return kotlin.Unit.INSTANCE; + }); } } |