LockIconContainer 是直接在super_notification_shade.xml 里面的:
lock_icon_container
<?xml version="1.0" encoding="utf-8"?>
<!-- This is the notification shade window. -->
<com.android.systemui.statusbar.phone.NotificationShadeWindowViewxmlns:android="http://schemas.android.com/apk/res/android"xmlns:sysui="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:fitsSystemWindows="true"><com.android.systemui.statusbar.BackDropViewandroid:id="@+id/backdrop"android:layout_width="match_parent"android:layout_height="match_parent"android:visibility="gone"sysui:ignoreRightInset="true"><ImageView android:id="@+id/backdrop_back"android:layout_width="match_parent"android:scaleType="centerCrop"android:layout_height="match_parent" /><ImageView android:id="@+id/backdrop_front"android:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="centerCrop"android:visibility="invisible" /></com.android.systemui.statusbar.BackDropView><com.android.systemui.statusbar.ScrimViewandroid:id="@+id/scrim_behind"android:layout_width="match_parent"android:layout_height="match_parent"android:importantForAccessibility="no"sysui:ignoreRightInset="true"/><include layout="@layout/status_bar_expanded"android:layout_width="match_parent"android:layout_height="match_parent"android:visibility="invisible" /><include layout="@layout/brightness_mirror" /><com.android.systemui.statusbar.ScrimViewandroid:id="@+id/scrim_in_front"android:layout_width="match_parent"android:layout_height="match_parent"android:importantForAccessibility="no" sysui:ignoreRightInset="true"/><LinearLayoutandroid:id="@+id/lock_icon_container"android:orientation="vertical"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="@dimen/status_bar_height"android:layout_gravity="top|center_horizontal"><com.android.systemui.statusbar.phone.LockIconandroid:id="@+id/lock_icon"android:layout_width="@dimen/keyguard_lock_width"android:layout_height="@dimen/keyguard_lock_height"android:layout_gravity="center_horizontal"android:layout_marginTop="@dimen/keyguard_lock_padding"android:contentDescription="@string/accessibility_unlock_button"android:src="@*android:drawable/ic_lock"android:scaleType="center" /><com.android.keyguard.KeyguardMessageAreaandroid:id="@+id/keyguard_message_area"style="@style/Keyguard.TextView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="@dimen/keyguard_lock_padding"android:gravity="center"android:singleLine="true"android:ellipsize="marquee"android:focusable="true" /></LinearLayout>
</com.android.systemui.statusbar.phone.NotificationShadeWindowView>
控制显示与否:
会基于StatusBarState的状态来更新 updateLockIcon
状态有:
/*** The status bar is in the "normal" shade mode.*/public static final int SHADE = 0;/*** Status bar is currently the Keyguard.*/public static final int KEYGUARD = 1;/*** Status bar is in the special mode, where it is fully interactive but still locked. So* dismissing the shade will still show the bouncer.*/public static final int SHADE_LOCKED = 2;/*** Status bar is locked and shows the full screen user switcher.*/public static final int FULLSCREEN_USER_SWITCHER = 3;