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 9b6ad19d3dc53..1675e3b55998d 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")
+
+ /** 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")
+ /** 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)
}