diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml index d7106762d17bc..e214666713631 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded.xml @@ -132,21 +132,6 @@ android:id="@+id/lock_icon_view" android:layout_width="wrap_content" android:layout_height="wrap_content"> - - - - - + + diff --git a/packages/SystemUI/src/com/android/keyguard/LockIconView.java b/packages/SystemUI/src/com/android/keyguard/LockIconView.java index abad0be637cab..d1fffaa926ea6 100644 --- a/packages/SystemUI/src/com/android/keyguard/LockIconView.java +++ b/packages/SystemUI/src/com/android/keyguard/LockIconView.java @@ -16,6 +16,8 @@ package com.android.keyguard; +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; + import android.content.Context; import android.content.res.ColorStateList; import android.graphics.Color; @@ -23,6 +25,7 @@ import android.graphics.Point; import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.util.AttributeSet; +import android.view.Gravity; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; @@ -68,13 +71,9 @@ public class LockIconView extends FrameLayout implements Dumpable { public LockIconView(Context context, AttributeSet attrs) { super(context, attrs); mSensorRect = new RectF(); - } - @Override - public void onFinishInflate() { - super.onFinishInflate(); - mLockIcon = findViewById(R.id.lock_icon); - mBgView = findViewById(R.id.lock_icon_bg); + addBgImageView(context, attrs); + addLockIconImageView(context, attrs); } void setDozeAmount(float dozeAmount) { @@ -184,6 +183,30 @@ public class LockIconView extends FrameLayout implements Dumpable { mLockIcon.setImageState(getLockIconState(mIconType, mAod), true); } + private void addLockIconImageView(Context context, AttributeSet attrs) { + mLockIcon = new ImageView(context, attrs); + mLockIcon.setId(R.id.lock_icon); + mLockIcon.setScaleType(ImageView.ScaleType.CENTER_CROP); + addView(mLockIcon); + LayoutParams lp = (LayoutParams) mLockIcon.getLayoutParams(); + lp.height = MATCH_PARENT; + lp.width = MATCH_PARENT; + lp.gravity = Gravity.CENTER; + mLockIcon.setLayoutParams(lp); + } + + private void addBgImageView(Context context, AttributeSet attrs) { + mBgView = new ImageView(context, attrs); + mBgView.setId(R.id.lock_icon_bg); + mBgView.setImageDrawable(context.getDrawable(R.drawable.fingerprint_bg)); + mBgView.setVisibility(View.INVISIBLE); + addView(mBgView); + LayoutParams lp = (LayoutParams) mBgView.getLayoutParams(); + lp.height = MATCH_PARENT; + lp.width = MATCH_PARENT; + mBgView.setLayoutParams(lp); + } + private static int[] getLockIconState(@IconType int icon, boolean aod) { if (icon == ICON_NONE) { return new int[0]; diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt index 7b66565be5268..98d4481505cdc 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt +++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt @@ -249,11 +249,19 @@ object Flags { @JvmField val DELAY_BOUNCER = unreleasedFlag(235, "delay_bouncer", teamfood = true) + + /** Keyguard Migration */ + /** Migrate the indication area to the new keyguard root view. */ // TODO(b/280067944): Tracking bug. @JvmField val MIGRATE_INDICATION_AREA = unreleasedFlag(236, "migrate_indication_area", teamfood = true) + /** Migrate the lock icon view to the new keyguard root view. */ + // TODO(b/286552209): Tracking bug. + @JvmField + val MIGRATE_LOCK_ICON = unreleasedFlag(238, "migrate_lock_icon") + /** Whether to listen for fingerprint authentication over keyguard occluding activities. */ // TODO(b/283260512): Tracking bug. @JvmField diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt index 05c23aefe974d..e8881a4827656 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt @@ -47,9 +47,10 @@ constructor( private var indicationAreaHandle: DisposableHandle? = null override fun start() { - bindIndicationArea( + val notificationPanel = notificationShadeWindowView.requireViewById(R.id.notification_panel) as ViewGroup - ) + bindIndicationArea(notificationPanel) + bindLockIconView(notificationPanel) } fun bindIndicationArea(legacyParent: ViewGroup) { @@ -74,4 +75,16 @@ constructor( indicationController ) } + + private fun bindLockIconView(legacyParent: ViewGroup) { + if (featureFlags.isEnabled(Flags.MIGRATE_LOCK_ICON)) { + legacyParent.requireViewById(R.id.lock_icon_view).let { + legacyParent.removeView(it) + } + } else { + keyguardRootView.findViewById(R.id.lock_icon_view)?.let { + keyguardRootView.removeView(it) + } + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardRootView.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardRootView.kt index abf0e80bd87a7..a62f383ed7042 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardRootView.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardRootView.kt @@ -23,6 +23,7 @@ import android.view.Gravity import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.widget.FrameLayout +import com.android.keyguard.LockIconView import com.android.systemui.R /** Provides a container for all keyguard ui content. */ @@ -37,6 +38,7 @@ class KeyguardRootView( init { addIndicationTextArea() + addLockIconView() } private fun addIndicationTextArea() { @@ -54,6 +56,17 @@ class KeyguardRootView( ) } + private fun addLockIconView() { + val view = LockIconView(context, attrs).apply { id = R.id.lock_icon_view } + addView( + view, + LayoutParams( + WRAP_CONTENT, + WRAP_CONTENT, + ) + ) + } + private fun Int.dp(): Int { return context.resources.getDimensionPixelSize(this) }