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
This commit is contained in:
Hawkwood Glazier
2023-05-16 14:27:00 +00:00
parent be5b49dc06
commit cfaedc5090
4 changed files with 31 additions and 14 deletions

View File

@@ -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)
}
}
}

View File

@@ -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) {

View File

@@ -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) }
}
}

View File

@@ -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;
});
}
}