diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml index 4b9470728dc64..3fc0965f4a813 100644 --- a/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml +++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml @@ -25,7 +25,7 @@ android:layout_height="wrap_content" android:clipChildren="false" android:layout_gravity="center_horizontal|top"> - - - - + diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockFrame.kt b/packages/SystemUI/src/com/android/keyguard/KeyguardClockFrame.kt new file mode 100644 index 0000000000000..d821d309adde7 --- /dev/null +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockFrame.kt @@ -0,0 +1,39 @@ +package com.android.keyguard + +import android.content.Context +import android.graphics.Canvas +import android.util.AttributeSet +import android.view.View +import android.widget.FrameLayout + +class KeyguardClockFrame( + context: Context, + attrs: AttributeSet, +) : FrameLayout(context, attrs) { + private var drawAlpha: Int = 255 + + protected override fun onSetAlpha(alpha: Int): Boolean { + drawAlpha = alpha + return true + } + + protected override fun dispatchDraw(canvas: Canvas) { + val restoreTo = saveCanvasAlpha(this, canvas, drawAlpha) + super.dispatchDraw(canvas) + canvas.restoreToCount(restoreTo) + } + + companion object { + @JvmStatic + fun saveCanvasAlpha(view: View, canvas: Canvas, alpha: Int): Int { + var (x, y) = + run { + val locationOnScreen = IntArray(2) + view.getLocationOnScreen(locationOnScreen) + Pair(locationOnScreen[0].toFloat(), locationOnScreen[1].toFloat()) + } + + return canvas.saveLayerAlpha(-1f * x, -1f * y, x + view.width, y + view.height, alpha) + } + } +} diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java index 644a9bcdd588f..05a8f9fc9ae2d 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java @@ -5,11 +5,11 @@ import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.content.Context; +import android.graphics.Canvas; import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; -import android.widget.FrameLayout; import android.widget.RelativeLayout; import androidx.annotation.IntDef; @@ -69,12 +69,13 @@ public class KeyguardClockSwitch extends RelativeLayout { /** * Frame for small/large clocks */ - private FrameLayout mSmallClockFrame; - private FrameLayout mLargeClockFrame; + private KeyguardClockFrame mSmallClockFrame; + private KeyguardClockFrame mLargeClockFrame; private ClockController mClock; private View mStatusArea; private int mSmartspaceTopOffset; + private int mDrawAlpha = 255; /** * Maintain state so that a newly connected plugin can be initialized. @@ -121,6 +122,19 @@ public class KeyguardClockSwitch extends RelativeLayout { onDensityOrFontScaleChanged(); } + @Override + protected boolean onSetAlpha(int alpha) { + mDrawAlpha = alpha; + return true; + } + + @Override + protected void dispatchDraw(Canvas canvas) { + int restoreTo = KeyguardClockFrame.saveCanvasAlpha(this, canvas, mDrawAlpha); + super.dispatchDraw(canvas); + canvas.restoreToCount(restoreTo); + } + public void setLogBuffer(LogBuffer logBuffer) { mLogBuffer = logBuffer; } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java index 676f342775efa..d8bf570954df6 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java @@ -178,20 +178,6 @@ public class KeyguardClockSwitchController extends ViewController