From cfaedc5090bc1333640def06a554cf8640ea2d62 Mon Sep 17 00:00:00 2001 From: Hawkwood Glazier Date: Tue, 16 May 2023 14:27:00 +0000 Subject: [PATCH] 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 --- .../android/keyguard/KeyguardClockFrame.kt | 23 +++++++++++++++---- .../android/keyguard/KeyguardClockSwitch.java | 9 +++++--- .../keyguard/KeyguardStatusContainer.kt | 4 +--- .../android/keyguard/KeyguardStatusView.java | 9 +++++--- 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 d821d309adde7..635f0fa442346 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 05a8f9fc9ae2d..e54d4739dc970 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 d885892ec0abb..298eff27060bc 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 553af5b8fa41e..a6252a39ee8a8 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; + }); } }