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:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user