summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/res/layout/status_bar_expanded.xml5
-rw-r--r--packages/SystemUI/res/layout/super_notification_shade.xml16
-rw-r--r--packages/SystemUI/res/values/config.xml7
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java28
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java3
-rw-r--r--packages/SystemUI/src/com/android/keyguard/LockIconView.java (renamed from packages/SystemUI/src/com/android/keyguard/DisabledUdfpsView.java)29
-rw-r--r--packages/SystemUI/src/com/android/keyguard/LockIconViewController.java (renamed from packages/SystemUI/src/com/android/keyguard/DisabledUdfpsController.java)129
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java23
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java23
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java565
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java82
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java25
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java98
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java7
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LockscreenIconControllerTest.java151
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java20
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java12
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java10
22 files changed, 206 insertions, 1054 deletions
diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml
index 6b9b36586f92..46a698a092e3 100644
--- a/packages/SystemUI/res/layout/status_bar_expanded.xml
+++ b/packages/SystemUI/res/layout/status_bar_expanded.xml
@@ -112,4 +112,9 @@
android:layout_width="match_parent" />
<include layout="@layout/status_bar_expanded_plugin_frame"/>
+
+ <com.android.keyguard.LockIconView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/lock_icon_view" />
</com.android.systemui.statusbar.phone.NotificationPanelView>
diff --git a/packages/SystemUI/res/layout/super_notification_shade.xml b/packages/SystemUI/res/layout/super_notification_shade.xml
index e46c6701684f..2e8b2991bb23 100644
--- a/packages/SystemUI/res/layout/super_notification_shade.xml
+++ b/packages/SystemUI/res/layout/super_notification_shade.xml
@@ -72,23 +72,13 @@
sysui:ignoreRightInset="true"
/>
- <LinearLayout
- android:id="@+id/lock_icon_container"
- android:orientation="vertical"
+ <!-- Keyguard messages -->
+ <FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/status_bar_height"
android:layout_gravity="top|center_horizontal"
android:gravity="center_horizontal">
- <com.android.systemui.statusbar.phone.LockIcon
- android: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.KeyguardMessageArea
android:id="@+id/keyguard_message_area"
style="@style/Keyguard.TextView"
@@ -99,7 +89,7 @@
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true" />
- </LinearLayout>
+ </FrameLayout>
<com.android.systemui.biometrics.AuthRippleView
android:id="@+id/auth_ripple"
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 0125144581aa..2355650907df 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -649,4 +649,11 @@
<!-- sensorLocationY -->
<!--sensorRadius -->
</integer-array>
+
+ <!-- The properties of the lock icon in pixels. -->
+ <integer-array name="config_lock_icon_props">
+ <!-- X -->
+ <!-- Y -->
+ <!-- radius -->
+ </integer-array>
</resources>
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 2219cf427498..3d6815c8e48f 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -315,6 +315,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
private boolean mLogoutEnabled;
// cached value to avoid IPCs
private boolean mIsUdfpsEnrolled;
+ private boolean mIsFaceEnrolled;
// If the user long pressed the lock icon, disabling face auth for the current session.
private boolean mLockIconPressed;
private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
@@ -1944,15 +1945,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
mIsUdfpsEnrolled = mAuthController.isUdfpsEnrolled(userId);
}
- /**
- * Whether to show the lock icon on lock screen and bouncer.
- */
- public boolean canShowLockIcon() {
- if (mLockScreenMode == LOCK_SCREEN_MODE_LAYOUT_1) {
- return isFaceAuthEnabledForUser(KeyguardUpdateMonitor.getCurrentUser())
- && !isUdfpsEnrolled();
- }
- return true;
+ private void updateFaceEnrolled(int userId) {
+ mIsFaceEnrolled = whitelistIpcs(
+ () -> mFaceManager != null && mFaceManager.isHardwareDetected()
+ && mFaceManager.hasEnrolledTemplates(userId)
+ && mFaceSettingEnabledForUser.get(userId));
}
/**
@@ -1962,6 +1959,13 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
return mIsUdfpsEnrolled;
}
+ /**
+ * @return true if there's at least one face enrolled
+ */
+ public boolean isFaceEnrolled() {
+ return mIsFaceEnrolled;
+ }
+
private final UserSwitchObserver mUserSwitchObserver = new UserSwitchObserver() {
@Override
public void onUserSwitching(int newUserId, IRemoteCallback reply) {
@@ -2279,10 +2283,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
* If face hardware is available, user has enrolled and enabled auth via setting.
*/
public boolean isFaceAuthEnabledForUser(int userId) {
- // TODO(b/140034352)
- return whitelistIpcs(() -> mFaceManager != null && mFaceManager.isHardwareDetected()
- && mFaceManager.hasEnrolledTemplates(userId)
- && mFaceSettingEnabledForUser.get(userId));
+ updateFaceEnrolled(userId);
+ return mIsFaceEnrolled;
}
private void stopListeningForFingerprint() {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
index 9766ee128f7c..015c4e44185b 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
@@ -182,7 +182,6 @@ public interface KeyguardViewController {
* @param container
* @param notificationPanelViewController
* @param biometricUnlockController
- * @param lockIconContainer
* @param notificationContainer
* @param bypassController
*/
@@ -190,6 +189,6 @@ public interface KeyguardViewController {
ViewGroup container,
NotificationPanelViewController notificationPanelViewController,
BiometricUnlockController biometricUnlockController,
- ViewGroup lockIconContainer, View notificationContainer,
+ View notificationContainer,
KeyguardBypassController bypassController);
}
diff --git a/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsView.java b/packages/SystemUI/src/com/android/keyguard/LockIconView.java
index 8ae753e7f3f7..2167876d9cb6 100644
--- a/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsView.java
+++ b/packages/SystemUI/src/com/android/keyguard/LockIconView.java
@@ -18,40 +18,41 @@ package com.android.keyguard;
import android.annotation.NonNull;
import android.content.Context;
+import android.graphics.PointF;
import android.graphics.RectF;
-import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.util.AttributeSet;
import android.view.Surface;
import android.widget.FrameLayout;
import android.widget.ImageView;
/**
- * A view positioned in the area of the UDPFS sensor.
+ * A view positioned under the notification shade.
*/
-public class DisabledUdfpsView extends ImageView {
+public class LockIconView extends ImageView {
@NonNull private final RectF mSensorRect;
@NonNull private final Context mContext;
- // Used to obtain the sensor location.
- @NonNull private FingerprintSensorPropertiesInternal mSensorProps;
+ @NonNull private PointF mLockIconCenter = new PointF(0f, 0f);
+ private int mRadius;
- public DisabledUdfpsView(Context context, AttributeSet attrs) {
+ public LockIconView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
mSensorRect = new RectF();
}
- public void setSensorProperties(@NonNull FingerprintSensorPropertiesInternal properties) {
- mSensorProps = properties;
+ void setLocation(@NonNull PointF center, int radius) {
+ mLockIconCenter = center;
+ mRadius = radius;
}
// The "h" and "w" are the display's height and width relative to its current rotation.
private void updateSensorRect(int h, int w) {
// mSensorProps coordinates assume portrait mode.
- mSensorRect.set(mSensorProps.sensorLocationX - mSensorProps.sensorRadius,
- mSensorProps.sensorLocationY - mSensorProps.sensorRadius,
- mSensorProps.sensorLocationX + mSensorProps.sensorRadius,
- mSensorProps.sensorLocationY + mSensorProps.sensorRadius);
+ mSensorRect.set(mLockIconCenter.x - mRadius,
+ mLockIconCenter.y - mRadius,
+ mLockIconCenter.x + mRadius,
+ mLockIconCenter.y + mRadius);
// Transform mSensorRect if the device is in landscape mode.
switch (mContext.getDisplay().getRotation()) {
@@ -85,4 +86,8 @@ public class DisabledUdfpsView extends ImageView {
final int h = getLayoutParams().height;
updateSensorRect(h, w);
}
+
+ float getLocationTop() {
+ return mLockIconCenter.y - mRadius;
+ }
}
diff --git a/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsController.java b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java
index c9dea46c2f95..7329071169cc 100644
--- a/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsController.java
+++ b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java
@@ -21,44 +21,56 @@ import static android.hardware.biometrics.BiometricSourceType.FINGERPRINT;
import static com.android.systemui.classifier.Classifier.DISABLED_UDFPS_AFFORDANCE;
import android.content.Context;
+import android.graphics.PointF;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.InsetDrawable;
import android.hardware.biometrics.BiometricSourceType;
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
+import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import com.android.settingslib.Utils;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
import com.android.systemui.biometrics.AuthController;
-import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.ViewController;
import java.io.FileDescriptor;
import java.io.PrintWriter;
+import javax.inject.Inject;
+
/**
- * Controls when to show the DisabledUdfpsView affordance (unlock icon or circle) on lock screen.
+ * Controls when to show the LockIcon affordance (lock/unlocked icon or circle) on lock screen.
*
- * This view only exists when:
- * - User has UDFPS enrolled
- * - UDFPS is currently unavailable see {@link KeyguardUpdateMonitor#shouldListenForUdfps}
+ * This view will only be shown if the user has UDFPS or FaceAuth enrolled
*/
-@SysUISingleton
-public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> implements Dumpable {
+@StatusBarComponent.StatusBarScope
+public class LockIconViewController extends ViewController<LockIconView> implements Dumpable {
@NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@NonNull private final KeyguardViewController mKeyguardViewController;
@NonNull private final StatusBarStateController mStatusBarStateController;
@NonNull private final KeyguardStateController mKeyguardStateController;
@NonNull private final FalsingManager mFalsingManager;
+ @NonNull private final AuthController mAuthController;
+
+ private boolean mHasUdfpsOrFaceAuthFeatures;
+ private boolean mUdfpsEnrolled;
+ private boolean mFaceAuthEnrolled;
+
@NonNull private final Drawable mButton;
@NonNull private final Drawable mUnlockIcon;
+ @NonNull private final Drawable mLockIcon;
private boolean mIsDozing;
private boolean mIsBouncerShowing;
@@ -66,26 +78,31 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
private boolean mCanDismissLockScreen;
private boolean mQsExpanded;
private int mStatusBarState;
+ private boolean mIsKeyguardShowing;
private boolean mShowButton;
private boolean mShowUnlockIcon;
+ private boolean mShowLockIcon;
- public DisabledUdfpsController(
- @NonNull DisabledUdfpsView view,
+ @Inject
+ public LockIconViewController(
+ @Nullable LockIconView view,
@NonNull StatusBarStateController statusBarStateController,
@NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
- @NonNull AuthController authController,
@NonNull KeyguardViewController keyguardViewController,
@NonNull KeyguardStateController keyguardStateController,
- @NonNull FalsingManager falsingManager
+ @NonNull FalsingManager falsingManager,
+ @NonNull AuthController authController,
+ @NonNull DumpManager dumpManager
) {
super(view);
- mView.setOnClickListener(v -> onAffordanceClick());
- mView.setOnLongClickListener(v -> onAffordanceClick());
- mView.setSensorProperties(authController.getUdfpsProps().get(0));
-
+ if (mView != null) {
+ mView.setOnClickListener(v -> onAffordanceClick());
+ mView.setOnLongClickListener(v -> onAffordanceClick());
+ }
mStatusBarStateController = statusBarStateController;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
+ mAuthController = authController;
mKeyguardViewController = keyguardViewController;
mKeyguardStateController = keyguardStateController;
mFalsingManager = falsingManager;
@@ -97,22 +114,57 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
com.android.internal.R.drawable.ic_lock_open, context.getTheme()),
context.getResources().getDimensionPixelSize(
com.android.systemui.R.dimen.udfps_unlock_icon_inset));
+ mLockIcon = new InsetDrawable(context.getResources().getDrawable(
+ com.android.internal.R.drawable.ic_lock, context.getTheme()),
+ context.getResources().getDimensionPixelSize(
+ com.android.systemui.R.dimen.udfps_unlock_icon_inset));
+ dumpManager.registerDumpable("LockIconViewController", this);
}
@Override
protected void onViewAttached() {
+ // we check this here instead of onInit since the FingeprintManager + FaceManager may not
+ // have started up yet onInit
+ final boolean hasFaceAuth = mAuthController.getFaceAuthSensorLocation() != null;
+ final boolean hasUdfps = mAuthController.getUdfpsSensorLocation() != null;
+ mHasUdfpsOrFaceAuthFeatures = hasFaceAuth || hasUdfps;
+ if (!mHasUdfpsOrFaceAuthFeatures) {
+ ((ViewGroup) mView.getParent()).removeView(mView);
+ return;
+ }
+
+ if (hasUdfps) {
+ FingerprintSensorPropertiesInternal props = mAuthController.getUdfpsProps().get(0);
+ mView.setLocation(new PointF(props.sensorLocationX, props.sensorLocationY),
+ props.sensorRadius);
+ } else {
+ int[] props = mView.getContext().getResources().getIntArray(
+ com.android.systemui.R.array.config_lock_icon_props);
+ if (props == null || props.length < 3) {
+ Log.e("LockIconViewController", "lock icon position should be "
+ + "setup in config under config_lock_icon_props");
+ props = new int[]{0, 0, 0};
+ }
+ mView.setLocation(new PointF(props[0], props[1]), props[2]);
+ }
+
+ mIsKeyguardShowing = mKeyguardViewController.isShowing();
mIsBouncerShowing = mKeyguardViewController.isBouncerShowing();
mIsDozing = mStatusBarStateController.isDozing();
mRunningFPS = mKeyguardUpdateMonitor.isFingerprintDetectionRunning();
mCanDismissLockScreen = mKeyguardStateController.canDismissLockScreen();
mStatusBarState = mStatusBarStateController.getState();
+
mUnlockIcon.setTint(Utils.getColorAttrDefaultColor(mView.getContext(),
R.attr.wallpaperTextColorAccent));
- updateVisibility();
+ mLockIcon.setTint(Utils.getColorAttrDefaultColor(mView.getContext(),
+ R.attr.wallpaperTextColorAccent));
mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback);
mStatusBarStateController.addCallback(mStatusBarStateListener);
mKeyguardStateController.addCallback(mKeyguardStateCallback);
+
+ updateVisibility();
}
@Override
@@ -122,25 +174,23 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
mKeyguardStateController.removeCallback(mKeyguardStateCallback);
}
+ public float getTop() {
+ return mView.getLocationTop();
+ }
+
private boolean onAffordanceClick() {
if (mFalsingManager.isFalseTouch(DISABLED_UDFPS_AFFORDANCE)) {
return false;
}
- mView.setVisibility(View.INVISIBLE);
+
+ // pre-emptively set to false to hide view
+ mIsKeyguardShowing = false;
+ updateVisibility();
mKeyguardViewController.showBouncer(/* scrim */ true);
return true;
}
/**
- * Call when this controller is no longer needed. This will remove the view from its parent.
- */
- public void destroy() {
- if (mView != null && mView.getParent() != null) {
- ((ViewGroup) mView.getParent()).removeView(mView);
- }
- }
-
- /**
* Set whether qs is expanded. When QS is expanded, don't show a DisabledUdfps affordance.
*/
public void setQsExpanded(boolean expanded) {
@@ -149,8 +199,16 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
}
private void updateVisibility() {
- mShowButton = !mCanDismissLockScreen && !mRunningFPS && isLockScreen();
+ if (!mIsKeyguardShowing) {
+ mView.setVisibility(View.INVISIBLE);
+ return;
+ }
+
+ // these three states are mutually exclusive:
+ mShowButton = mUdfpsEnrolled && !mCanDismissLockScreen && !mRunningFPS && isLockScreen();
mShowUnlockIcon = mCanDismissLockScreen && isLockScreen();
+ mShowLockIcon = !mUdfpsEnrolled && !mCanDismissLockScreen && isLockScreen()
+ && mFaceAuthEnrolled;
if (mShowButton) {
mView.setImageDrawable(mButton);
@@ -158,6 +216,9 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
} else if (mShowUnlockIcon) {
mView.setImageDrawable(mUnlockIcon);
mView.setVisibility(View.VISIBLE);
+ } else if (mShowLockIcon) {
+ mView.setImageDrawable(mLockIcon);
+ mView.setVisibility(View.VISIBLE);
} else {
mView.setVisibility(View.INVISIBLE);
}
@@ -172,9 +233,13 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
@Override
public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) {
- pw.println("DisabledUdfpsController state:");
pw.println(" mShowBouncerButton: " + mShowButton);
pw.println(" mShowUnlockIcon: " + mShowUnlockIcon);
+ pw.println(" mShowLockIcon: " + mShowLockIcon);
+ pw.println(" mHasUdfpsOrFaceAuthFeatures: " + mHasUdfpsOrFaceAuthFeatures);
+ pw.println(" mUdfpsEnrolled: " + mUdfpsEnrolled);
+ pw.println(" mFaceAuthEnrolled: " + mFaceAuthEnrolled);
+ pw.println(" mIsKeyguardShowing: " + mIsKeyguardShowing);
pw.println(" mIsDozing: " + mIsDozing);
pw.println(" mIsBouncerShowing: " + mIsBouncerShowing);
pw.println(" mRunningFPS: " + mRunningFPS);
@@ -203,6 +268,7 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
@Override
public void onKeyguardBouncerChanged(boolean bouncer) {
mIsBouncerShowing = bouncer;
+ mIsKeyguardShowing = mKeyguardStateController.isShowing();
updateVisibility();
}
@@ -224,5 +290,12 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
mCanDismissLockScreen = mKeyguardStateController.canDismissLockScreen();
updateVisibility();
}
+ @Override
+ public void onKeyguardShowingChanged() {
+ mIsKeyguardShowing = mKeyguardStateController.isShowing();
+ mUdfpsEnrolled = mKeyguardUpdateMonitor.isUdfpsEnrolled();
+ mFaceAuthEnrolled = mKeyguardUpdateMonitor.isFaceEnrolled();
+ updateVisibility();
+ }
};
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
index 28027427e245..ed8f32f31035 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
@@ -518,6 +518,17 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks,
mCurrentDialog = null;
}
+ /**
+ * Whether the passed userId has enrolled face auth.
+ */
+ public boolean isFaceAuthEnrolled(int userId) {
+ if (mFaceProps == null) {
+ return false;
+ }
+
+ return mFaceManager.hasEnrolledTemplates(userId);
+ }
+
/**
* Whether the passed userId has enrolled UDFPS.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index eef41e045948..b227c7dd131c 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -2280,18 +2280,16 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
* @param container
* @param panelView
* @param biometricUnlockController
- * @param lockIconContainer
* @param notificationContainer
* @param bypassController
* @return the View Controller for the Keyguard View this class is mediating.
*/
public KeyguardViewController registerStatusBar(StatusBar statusBar,
ViewGroup container, NotificationPanelViewController panelView,
- BiometricUnlockController biometricUnlockController, ViewGroup lockIconContainer,
+ BiometricUnlockController biometricUnlockController,
View notificationContainer, KeyguardBypassController bypassController) {
mKeyguardViewControllerLazy.get().registerStatusBar(statusBar, container, panelView,
- biometricUnlockController, lockIconContainer,
- notificationContainer, bypassController);
+ biometricUnlockController, notificationContainer, bypassController);
return mKeyguardViewControllerLazy.get();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
index a4e97a1dc6d5..9804b32376eb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
@@ -79,7 +79,6 @@ import com.android.systemui.keyguard.KeyguardIndication;
import com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.KeyguardIndicationTextView;
-import com.android.systemui.statusbar.phone.LockscreenLockIconController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.concurrency.DelayableExecutor;
@@ -102,8 +101,7 @@ public class KeyguardIndicationController implements KeyguardStateController.Cal
private static final boolean DEBUG_CHARGING_SPEED = false;
private static final int MSG_HIDE_TRANSIENT = 1;
- private static final int MSG_CLEAR_BIOMETRIC_MSG = 2;
- private static final int MSG_SWIPE_UP_TO_UNLOCK = 3;
+ private static final int MSG_SWIPE_UP_TO_UNLOCK = 2;
private static final long TRANSIENT_BIOMETRIC_ERROR_TIMEOUT = 1300;
private static final float BOUNCE_ANIMATION_FINAL_Y = 0f;
@@ -125,7 +123,6 @@ public class KeyguardIndicationController implements KeyguardStateController.Cal
protected KeyguardIndicationRotateTextViewController mRotateTextViewController;
private BroadcastReceiver mBroadcastReceiver;
- private LockscreenLockIconController mLockIconController;
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
private String mRestingIndication;
@@ -225,10 +222,6 @@ public class KeyguardIndicationController implements KeyguardStateController.Cal
}
}
- public void setLockIconController(LockscreenLockIconController lockIconController) {
- mLockIconController = lockIconController;
- }
-
private void handleAlignStateChanged(int alignState) {
String alignmentIndication = "";
if (alignState == DockManager.ALIGN_STATE_POOR) {
@@ -848,10 +841,6 @@ public class KeyguardIndicationController implements KeyguardStateController.Cal
public void handleMessage(Message msg) {
if (msg.what == MSG_HIDE_TRANSIENT) {
hideTransientIndication();
- } else if (msg.what == MSG_CLEAR_BIOMETRIC_MSG) {
- if (mLockIconController != null) {
- mLockIconController.setTransientBiometricsError(false);
- }
} else if (msg.what == MSG_SWIPE_UP_TO_UNLOCK) {
showSwipeUpToUnlock();
}
@@ -972,7 +961,6 @@ public class KeyguardIndicationController implements KeyguardStateController.Cal
if (shouldSuppressBiometricError(msgId, biometricSourceType, mKeyguardUpdateMonitor)) {
return;
}
- animatePadlockError();
if (msgId == FaceManager.FACE_ERROR_TIMEOUT) {
// The face timeout message is not very actionable, let's ask the user to
// manually retry.
@@ -988,15 +976,6 @@ public class KeyguardIndicationController implements KeyguardStateController.Cal
}
}
- private void animatePadlockError() {
- if (mLockIconController != null) {
- mLockIconController.setTransientBiometricsError(true);
- }
- mHandler.removeMessages(MSG_CLEAR_BIOMETRIC_MSG);
- mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_CLEAR_BIOMETRIC_MSG),
- TRANSIENT_BIOMETRIC_ERROR_TIMEOUT);
- }
-
private boolean shouldSuppressBiometricError(int msgId,
BiometricSourceType biometricSourceType, KeyguardUpdateMonitor updateMonitor) {
if (biometricSourceType == BiometricSourceType.FINGERPRINT)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
index d6380199e844..f12bf7b53a0a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
@@ -106,14 +106,9 @@ public class KeyguardClockPositionAlgorithm {
private int mMaxShadeBottom;
/**
- * Recommended distance from the status bar without the lock icon.
+ * Recommended distance from the status bar.
*/
- private int mContainerTopPaddingWithoutLockIcon;
-
- /**
- * Recommended distance from the status bar with the lock icon.
- */
- private int mContainerTopPaddingWithLockIcon;
+ private int mContainerTopPadding;
/**
* @see NotificationPanelViewController#getExpandedFraction()
@@ -167,15 +162,8 @@ public class KeyguardClockPositionAlgorithm {
mClockNotificationsMargin = res.getDimensionPixelSize(
R.dimen.keyguard_clock_notifications_margin);
- mContainerTopPaddingWithoutLockIcon =
+ mContainerTopPadding =
res.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin) / 2;
- // Consider the lock icon when determining the minimum top padding between the status bar
- // and top of the clock.
- mContainerTopPaddingWithLockIcon =
- Math.max(res.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin),
- res.getDimensionPixelSize(R.dimen.keyguard_lock_height)
- + res.getDimensionPixelSize(R.dimen.keyguard_lock_padding)
- + res.getDimensionPixelSize(R.dimen.keyguard_clock_lock_margin));
mBurnInPreventionOffsetX = res.getDimensionPixelSize(
R.dimen.burn_in_prevention_offset_x);
mBurnInPreventionOffsetY = res.getDimensionPixelSize(
@@ -192,9 +180,8 @@ public class KeyguardClockPositionAlgorithm {
int keyguardStatusHeight, int userSwitchHeight, int clockPreferredY,
int userSwitchPreferredY, boolean hasCustomClock, boolean hasVisibleNotifs, float dark,
float emptyDragAmount, boolean bypassEnabled, int unlockedStackScrollerPadding,
- boolean showLockIcon, float qsExpansion, int cutoutTopInset) {
- mMinTopMargin = keyguardStatusBarHeaderHeight + Math.max(showLockIcon
- ? mContainerTopPaddingWithLockIcon : mContainerTopPaddingWithoutLockIcon,
+ float qsExpansion, int cutoutTopInset) {
+ mMinTopMargin = keyguardStatusBarHeaderHeight + Math.max(mContainerTopPadding,
userSwitchHeight);
mMaxShadeBottom = maxShadeBottom;
mNotificationStackHeight = notificationStackHeight;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java
deleted file mode 100644
index 7011eee054bc..000000000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java
+++ /dev/null
@@ -1,565 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.phone;
-
-import static android.view.View.GONE;
-
-import static com.android.systemui.statusbar.phone.LockIcon.STATE_BIOMETRICS_ERROR;
-import static com.android.systemui.statusbar.phone.LockIcon.STATE_LOCKED;
-import static com.android.systemui.statusbar.phone.LockIcon.STATE_LOCK_OPEN;
-import static com.android.systemui.statusbar.phone.LockIcon.STATE_SCANNING_FACE;
-
-import android.animation.ArgbEvaluator;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.graphics.Color;
-import android.hardware.biometrics.BiometricSourceType;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.accessibility.AccessibilityNodeInfo;
-
-import androidx.annotation.Nullable;
-
-import com.android.internal.logging.nano.MetricsProto;
-import com.android.internal.widget.LockPatternUtils;
-import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.keyguard.KeyguardUpdateMonitorCallback;
-import com.android.settingslib.Utils;
-import com.android.systemui.R;
-import com.android.systemui.dagger.qualifiers.Main;
-import com.android.systemui.dock.DockManager;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.CommandQueue;
-import com.android.systemui.statusbar.KeyguardIndicationController;
-import com.android.systemui.statusbar.StatusBarState;
-import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
-import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator.WakeUpListener;
-import com.android.systemui.statusbar.phone.LockscreenGestureLogger.LockscreenUiEvent;
-import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
-import com.android.systemui.statusbar.policy.AccessibilityController;
-import com.android.systemui.statusbar.policy.ConfigurationController;
-import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
-import com.android.systemui.statusbar.policy.KeyguardStateController;
-import com.android.systemui.util.ViewController;
-
-import java.util.Optional;
-
-import javax.inject.Inject;
-
-/** Controls the {@link LockIcon} on the lockscreen. */
-@StatusBarComponent.StatusBarScope
-public class LockscreenLockIconController extends ViewController<LockIcon> {
-
- private final LockscreenGestureLogger mLockscreenGestureLogger;
- private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
- private final LockPatternUtils mLockPatternUtils;
- private final ShadeController mShadeController;
- private final AccessibilityController mAccessibilityController;
- private final KeyguardIndicationController mKeyguardIndicationController;
- private final StatusBarStateController mStatusBarStateController;
- private final ConfigurationController mConfigurationController;
- private final NotificationWakeUpCoordinator mNotificationWakeUpCoordinator;
- private final KeyguardBypassController mKeyguardBypassController;
- private final Optional<DockManager> mDockManager;
- private final KeyguardStateController mKeyguardStateController;
- private final Resources mResources;
- private final HeadsUpManagerPhone mHeadsUpManagerPhone;
- private boolean mKeyguardShowing;
- private boolean mKeyguardJustShown;
- private boolean mBlockUpdates;
- private boolean mSimLocked;
- private boolean mTransientBiometricsError;
- private boolean mDocked;
- private boolean mWakeAndUnlockRunning;
- private boolean mShowingLaunchAffordance;
- private float mBouncerHiddenAmount = KeyguardBouncer.EXPANSION_HIDDEN;
- private boolean mBouncerShowingScrimmed;
- private boolean mFingerprintUnlock;
- private int mStatusBarState = StatusBarState.SHADE;
- private int mLastState;
- private boolean mDozing;
-
- @Inject
- public LockscreenLockIconController(
- @Nullable LockIcon view,
- LockscreenGestureLogger lockscreenGestureLogger,
- KeyguardUpdateMonitor keyguardUpdateMonitor,
- LockPatternUtils lockPatternUtils,
- ShadeController shadeController,
- AccessibilityController accessibilityController,
- KeyguardIndicationController keyguardIndicationController,
- StatusBarStateController statusBarStateController,
- ConfigurationController configurationController,
- NotificationWakeUpCoordinator notificationWakeUpCoordinator,
- KeyguardBypassController keyguardBypassController,
- @Nullable DockManager dockManager,
- KeyguardStateController keyguardStateController,
- @Main Resources resources,
- HeadsUpManagerPhone headsUpManagerPhone) {
- super(view);
- mLockscreenGestureLogger = lockscreenGestureLogger;
- mKeyguardUpdateMonitor = keyguardUpdateMonitor;
- mLockPatternUtils = lockPatternUtils;
- mShadeController = shadeController;
- mAccessibilityController = accessibilityController;
- mKeyguardIndicationController = keyguardIndicationController;
- mStatusBarStateController = statusBarStateController;
- mConfigurationController = configurationController;
- mNotificationWakeUpCoordinator = notificationWakeUpCoordinator;
- mKeyguardBypassController = keyguardBypassController;
- mDockManager = dockManager == null ? Optional.empty() : Optional.of(dockManager);
- mKeyguardStateController = keyguardStateController;
- mResources = resources;
- mHeadsUpManagerPhone = headsUpManagerPhone;
-
- if (view != null) {
- mKeyguardIndicationController.setLockIconController(this);
- }
- }
-
- @Override
- protected void onInit() {
- if (mView == null) {
- return;
- }
- mView.setOnClickListener(this::handleClick);
- mView.setOnLongClickListener(this::handleLongClick);
- mView.setAccessibilityDelegate(mAccessibilityDelegate);
- }
-
- @Override
- protected void onViewAttached() {
- setStatusBarState(mStatusBarStateController.getState());
- mDozing = mStatusBarStateController.isDozing();
- mStatusBarStateController.addCallback(mSBStateListener);
- mConfigurationController.addCallback(mConfigurationListener);
- mNotificationWakeUpCoordinator.addListener(mWakeUpListener);
- mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
- mKeyguardStateController.addCallback(mKeyguardMonitorCallback);
-
- mDockManager.ifPresent(dockManager -> dockManager.addListener(mDockEventListener));
-
- mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure();
- mConfigurationListener.onThemeChanged();
-
- updateColor();
- update();
- }
-
- @Override
- protected void onViewDetached() {
- mStatusBarStateController.removeCallback(mSBStateListener);
- mConfigurationController.removeCallback(mConfigurationListener);
- mNotificationWakeUpCoordinator.removeListener(mWakeUpListener);
- mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback);
- mKeyguardStateController.removeCallback(mKeyguardMonitorCallback);
-
- mDockManager.ifPresent(dockManager -> dockManager.removeListener(mDockEventListener));
- }
-
- /**
- * Called whenever the scrims become opaque, transparent or semi-transparent.
- */
- public void onScrimVisibilityChanged(Integer scrimsVisible) {
- if (mWakeAndUnlockRunning
- && scrimsVisible == ScrimController.TRANSPARENT) {
- mWakeAndUnlockRunning = false;
- update();
- }
- }
-
- /**
- * We need to hide the lock whenever there's a fingerprint unlock, otherwise you'll see the
- * icon on top of the black front scrim.
- * We also want to halt padlock the animation when we're in face bypass mode or dismissing the
- * keyguard with fingerprint.
- * @param wakeAndUnlock are we wake and unlocking
- * @param isUnlock are we currently unlocking
- */
- public void onBiometricAuthModeChanged(boolean wakeAndUnlock, boolean isUnlock,
- BiometricSourceType type) {
- if (wakeAndUnlock) {
- mWakeAndUnlockRunning = true;
- }
- mFingerprintUnlock = type == BiometricSourceType.FINGERPRINT;
- if (isUnlock && (mFingerprintUnlock || mKeyguardBypassController.getBypassEnabled())
- && canBlockUpdates()) {
- // We don't want the icon to change while we are unlocking
- mBlockUpdates = true;
- }
- update();
- }
-
- /**
- * When we're launching an affordance, like double pressing power to open camera.
- */
- public void onShowingLaunchAffordanceChanged(Boolean showing) {
- mShowingLaunchAffordance = showing;
- update();
- }
-
- /** Sets whether the bouncer is showing. */
- public void setBouncerShowingScrimmed(boolean showing, boolean scrimmed) {
- mBouncerShowingScrimmed = scrimmed;
- update();
- }
-
- /**
- * Sets how hidden the bouncer is, where 0f is fully visible and 1f is fully hidden
- * See {@link KeyguardBouncer#EXPANSION_VISIBLE} and {@link KeyguardBouncer#EXPANSION_HIDDEN}.
- */
- public void setBouncerHideAmount(float hideAmount) {
- mBouncerHiddenAmount = hideAmount;
- updateColor();
- }
-
- private void updateColor() {
- if (mView == null) {
- return;
- }
- int iconColor = -1;
- if (mBouncerHiddenAmount == KeyguardBouncer.EXPANSION_VISIBLE) {
- TypedArray typedArray = mView.getContext().getTheme().obtainStyledAttributes(
- null, new int[]{ android.R.attr.textColorPrimary }, 0, 0);
- iconColor = typedArray.getColor(0, Color.WHITE);
- typedArray.recycle();
- } else if (mBouncerHiddenAmount == KeyguardBouncer.EXPANSION_HIDDEN) {
- iconColor = Utils.getColorAttrDefaultColor(
- mView.getContext(), com.android.systemui.R.attr.wallpaperTextColor);
- } else {
- // bouncer is transitioning
- TypedArray typedArray = mView.getContext().getTheme().obtainStyledAttributes(
- null, new int[]{ android.R.attr.textColorPrimary }, 0, 0);
- int bouncerIconColor = typedArray.getColor(0, Color.WHITE);
- typedArray.recycle();
- int keyguardIconColor = Utils.getColorAttrDefaultColor(
- mView.getContext(), com.android.systemui.R.attr.wallpaperTextColor);
- iconColor = (int) new ArgbEvaluator().evaluate(
- mBouncerHiddenAmount, bouncerIconColor, keyguardIconColor);
- }
- mView.updateColor(iconColor);
- }
-
- /**
- * Animate padlock opening when bouncer challenge is solved.
- */
- public void onBouncerPreHideAnimation() {
- update();
- }
-
- /**
- * If we're currently presenting an authentication error message.
- */
- public void setTransientBiometricsError(boolean transientBiometricsError) {
- mTransientBiometricsError = transientBiometricsError;
- update();
- }
-
- private boolean handleLongClick(View view) {
- mLockscreenGestureLogger.write(MetricsProto.MetricsEvent.ACTION_LS_LOCK,
- 0 /* lengthDp - N/A */, 0 /* velocityDp - N/A */);
- mLockscreenGestureLogger.log(LockscreenUiEvent.LOCKSCREEN_LOCK_TAP);
- mKeyguardIndicationController.showTransientIndication(
- R.string.keyguard_indication_trust_disabled);
- mKeyguardUpdateMonitor.onLockIconPressed();
- mLockPatternUtils.requireCredentialEntry(KeyguardUpdateMonitor.getCurrentUser());
-
- return true;
- }
-
-
- private void handleClick(View view) {
- if (!mAccessibilityController.isAccessibilityEnabled()) {
- return;
- }
- mShadeController.animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true /* force */);
- }
-
- private void update() {
- update(false /* force */);
- }
-
- private void update(boolean force) {
- if (mView == null) {
- return;
- }
- int state = getState();
- boolean shouldUpdate = mLastState != state || force;
- if (mBlockUpdates && canBlockUpdates()) {
- shouldUpdate = false;
- }
- if (shouldUpdate && mView.getVisibility() != GONE) {
- mView.update(state, mDozing, mKeyguardJustShown);
- }
- mLastState = state;
- mKeyguardJustShown = false;
- updateIconVisibility();
- updateClickability();
- }
-
- private int getState() {
- if ((mKeyguardStateController.canDismissLockScreen()
- || !mKeyguardStateController.isShowing()
- || mKeyguardStateController.isKeyguardGoingAway()
- || mKeyguardStateController.isKeyguardFadingAway()) && !mSimLocked) {
- return STATE_LOCK_OPEN;
- } else if (mTransientBiometricsError) {
- return STATE_BIOMETRICS_ERROR;
- } else if (mKeyguardUpdateMonitor.isFaceDetectionRunning()) {
- return STATE_SCANNING_FACE;
- } else {
- return STATE_LOCKED;
- }
- }
-
- private boolean canBlockUpdates() {
- return mKeyguardShowing || mKeyguardStateController.isKeyguardFadingAway();
- }
-
- /** Set the StatusBarState. */
- private void setStatusBarState(int statusBarState) {
- mStatusBarState = statusBarState;
- updateIconVisibility();
- }
-
- /**
- * Update the icon visibility
- * @return true if the visibility changed
- */
- private boolean updateIconVisibility() {
- if (mView == null) {
- return false;
- }
- if (!mKeyguardUpdateMonitor.canShowLockIcon()) {
- boolean changed = mView.getVisibility() != GONE;
- mView.setVisibility(GONE);
- return changed;
- }
-
- boolean onAodOrDocked = mDozing || mDocked;
- boolean invisible = onAodOrDocked || mWakeAndUnlockRunning || mShowingLaunchAffordance;
- boolean fingerprintOrBypass = mFingerprintUnlock
- || mKeyguardBypassController.getBypassEnabled();
- if (fingerprintOrBypass && !mBouncerShowingScrimmed) {
- if ((mHeadsUpManagerPhone.isHeadsUpGoingAway()
- || mHeadsUpManagerPhone.hasPinnedHeadsUp()
- || mStatusBarState == StatusBarState.KEYGUARD
- || mStatusBarState == StatusBarState.SHADE)
- && !mNotificationWakeUpCoordinator.getNotificationsFullyHidden()) {
- invisible = true;
- }
- }
- return mView.updateIconVisibility(!invisible);
- }
-
- private void updateClickability() {
- if (mView == null) {
- return;
- }
- boolean canLock = mKeyguardStateController.isMethodSecure()
- && mKeyguardStateController.canDismissLockScreen();
- boolean clickToUnlock = mAccessibilityController.isAccessibilityEnabled();
- mView.setClickable(clickToUnlock);
- mView.setLongClickable(canLock && !clickToUnlock);
- mView.setFocusable(mAccessibilityController.isAccessibilityEnabled());
- }
-
- private final StatusBarStateController.StateListener mSBStateListener =
- new StatusBarStateController.StateListener() {
- @Override
- public void onDozingChanged(boolean isDozing) {
- if (mDozing != isDozing) {
- mDozing = isDozing;
- update();
- }
- }
-
- @Override
- public void onDozeAmountChanged(float linear, float eased) {
- if (mView != null) {
- mView.setDozeAmount(eased);
- }
- }
-
- @Override
- public void onStateChanged(int newState) {
- setStatusBarState(newState);
- }
- };
-
- private final ConfigurationListener mConfigurationListener = new ConfigurationListener() {
- private int mDensity;
-
- @Override
- public void onUiModeChanged() {
- updateColor();
- }
-
- @Override
- public void onOverlayChanged() {
- updateColor();
- }
-
- @Override
- public void onDensityOrFontScaleChanged() {
- ViewGroup.LayoutParams lp = mView.getLayoutParams();
- if (lp == null) {
- return;
- }
- lp.width = mView.getResources().getDimensionPixelSize(R.dimen.keyguard_lock_width);
- lp.height = mView.getResources().getDimensionPixelSize(
- R.dimen.keyguard_lock_height);
- mView.setLayoutParams(lp);
- update(true /* force */);
- }
-
- @Override
- public void onLocaleListChanged() {
- mView.setContentDescription(
- mView.getResources().getText(R.string.accessibility_unlock_button));
- update(true /* force */);
- }
-
- @Override
- public void onConfigChanged(Configuration newConfig) {
- final int density = newConfig.densityDpi;
- if (density != mDensity) {
- mDensity = density;
- update();
- }
- }
- };
-
- private final WakeUpListener mWakeUpListener = new WakeUpListener() {
- @Override
- public void onPulseExpansionChanged(boolean expandingChanged) {
- }
-
- @Override
- public void onFullyHiddenChanged(boolean isFullyHidden) {
- if (mKeyguardBypassController.getBypassEnabled()) {
- boolean changed = updateIconVisibility();
- if (changed) {
- update();
- }
- }
- }
- };
-
- private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback =
- new KeyguardUpdateMonitorCallback() {
- @Override
- public void onSimStateChanged(int subId, int slotId, int simState) {
- mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure();
- update();
- }
-
- @Override
- public void onKeyguardVisibilityChanged(boolean showing) {
- update();
- }
-
- @Override
- public void onBiometricRunningStateChanged(boolean running,
- BiometricSourceType biometricSourceType) {
- update();
- }
-
- @Override
- public void onStrongAuthStateChanged(int userId) {
- update();
- }
- };
-
- private final DockManager.DockEventListener mDockEventListener =
- event -> {
- boolean docked =
- event == DockManager.STATE_DOCKED || event == DockManager.STATE_DOCKED_HIDE;
- if (docked != mDocked) {
- mDocked = docked;
- update();
- }
- };
-
- private final KeyguardStateController.Callback mKeyguardMonitorCallback =
- new KeyguardStateController.Callback() {
- @Override
- public void onKeyguardShowingChanged() {
- boolean force = false;
- boolean wasShowing = mKeyguardShowing;
- mKeyguardShowing = mKeyguardStateController.isShowing();
- if (!wasShowing && mKeyguardShowing && mBlockUpdates) {
- mBlockUpdates = false;
- force = true;
- }
- if (!wasShowing && mKeyguardShowing) {
- setBouncerHideAmount(KeyguardBouncer.EXPANSION_HIDDEN);
- mKeyguardJustShown = true;
- }
- update(force);
- }
-
- @Override
- public void onKeyguardFadingAwayChanged() {
- if (!mKeyguardStateController.isKeyguardFadingAway()) {
- if (mBlockUpdates) {
- mBlockUpdates = false;
- update(true /* force */);
- }
- }
- }
-
- @Override
- public void onUnlockedChanged() {
- update();
- }
- };
-
- private final View.AccessibilityDelegate mAccessibilityDelegate =
- new View.AccessibilityDelegate() {
- @Override
- public void onInitializeAccessibilityNodeInfo(View host,
- AccessibilityNodeInfo info) {
- super.onInitializeAccessibilityNodeInfo(host, info);
- boolean fingerprintRunning =
- mKeyguardUpdateMonitor.isFingerprintDetectionRunning();
- // Only checking if unlocking with Biometric is allowed (no matter strong or
- // non-strong as long as primary auth, i.e. PIN/pattern/password, is not
- // required), so it's ok to pass true for isStrongBiometric to
- // isUnlockingWithBiometricAllowed() to bypass the check of whether non-strong
- // biometric is allowed
- boolean unlockingAllowed = mKeyguardUpdateMonitor
- .isUnlockingWithBiometricAllowed(true /* isStrongBiometric */);
- if (fingerprintRunning && unlockingAllowed) {
- AccessibilityNodeInfo.AccessibilityAction unlock =
- new AccessibilityNodeInfo.AccessibilityAction(
- AccessibilityNodeInfo.ACTION_CLICK,
- mResources.getString(
- R.string.accessibility_unlock_without_fingerprint));
- info.addAction(unlock);
- info.setHintText(mResources.getString(
- R.string.accessibility_waiting_for_fingerprint));
- } else if (getState() == STATE_SCANNING_FACE) {
- //Avoid 'button' to be spoken for scanning face
- info.setClassName(LockIcon.class.getName());
- info.setContentDescription(mResources.getString(
- R.string.accessibility_scanning_face));
- }
- }
- };
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
index 606658910232..d29a1aebe5cd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
@@ -75,12 +75,12 @@ import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.util.LatencyTracker;
-import com.android.keyguard.DisabledUdfpsController;
import com.android.keyguard.KeyguardClockSwitchController;
import com.android.keyguard.KeyguardStatusView;
import com.android.keyguard.KeyguardStatusViewController;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
+import com.android.keyguard.LockIconViewController;
import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
import com.android.keyguard.dagger.KeyguardStatusViewComponent;
@@ -281,13 +281,6 @@ public class NotificationPanelViewController extends PanelViewController {
mFirstBypassAttempt = mKeyguardBypassController.getBypassEnabled();
mDelayShowingKeyguardStatusBar = false;
}
-
- @Override
- public void onKeyguardVisibilityChanged(boolean showing) {
- if (showing) {
- updateDisabledUdfpsController();
- }
- }
};
private final LayoutInflater mLayoutInflater;
@@ -325,7 +318,7 @@ public class NotificationPanelViewController extends PanelViewController {
private QS mQs;
private FrameLayout mQsFrame;
private KeyguardStatusViewController mKeyguardStatusViewController;
- private DisabledUdfpsController mDisabledUdfpsController;
+ private LockIconViewController mLockIconViewController;
private NotificationsQuickSettingsContainer mNotificationContainerParent;
private boolean mAnimateNextPositionUpdate;
@@ -493,7 +486,6 @@ public class NotificationPanelViewController extends PanelViewController {
*/
private int mThemeResId;
private KeyguardIndicationController mKeyguardIndicationController;
- private Consumer<Boolean> mAffordanceLaunchListener;
private int mShelfHeight;
private int mDarkIconSize;
private int mHeadsUpInset;
@@ -584,6 +576,7 @@ public class NotificationPanelViewController extends PanelViewController {
MediaDataManager mediaDataManager,
NotificationShadeDepthController notificationShadeDepthController,
AmbientState ambientState,
+ LockIconViewController lockIconViewController,
FeatureFlags featureFlags) {
super(view, falsingManager, dozeLog, keyguardStateController,
(SysuiStatusBarStateController) statusBarStateController, vibratorHelper,
@@ -668,6 +661,7 @@ public class NotificationPanelViewController extends PanelViewController {
mEntryManager = notificationEntryManager;
mConversationNotificationManager = conversationNotificationManager;
mAuthController = authController;
+ mLockIconViewController = lockIconViewController;
mView.setBackgroundColor(Color.TRANSPARENT);
OnAttachStateChangeListener onAttachStateChangeListener = new OnAttachStateChangeListener();
@@ -704,7 +698,8 @@ public class NotificationPanelViewController extends PanelViewController {
}
}
- updateViewControllers(mView.findViewById(R.id.keyguard_status_view),
+ updateViewControllers(
+ mView.findViewById(R.id.keyguard_status_view),
userAvatarView,
mKeyguardStatusBar,
keyguardUserSwitcherView);
@@ -849,13 +844,6 @@ public class NotificationPanelViewController extends PanelViewController {
mStatusBar = bar;
mKeyguardBottomArea.setStatusBar(mStatusBar);
}
- /**
- * @see #launchCamera(boolean, int)
- * @see #setLaunchingAffordance(boolean)
- */
- public void setLaunchAffordanceListener(Consumer<Boolean> listener) {
- mAffordanceLaunchListener = listener;
- }
public void updateResources() {
int qsWidth = mResources.getDimensionPixelSize(R.dimen.qs_panel_width);
@@ -1091,7 +1079,6 @@ public class NotificationPanelViewController extends PanelViewController {
clockPreferredY, userSwitcherPreferredY, hasCustomClock(),
hasVisibleNotifications, mInterpolatedDarkAmount, mEmptyDragAmount,
bypassEnabled, getUnlockedStackScrollerPadding(),
- mUpdateMonitor.canShowLockIcon(),
getQsExpansionFraction(),
mDisplayCutoutTopInset);
mClockPositionAlgorithm.run(mClockPositionResult);
@@ -1142,19 +1129,23 @@ public class NotificationPanelViewController extends PanelViewController {
mNotificationShelfController.getVisibility() == View.GONE
? 0
: mNotificationShelfController.getIntrinsicHeight() + notificationPadding;
- float availableSpace =
- mNotificationStackScrollLayoutController.getHeight() - minPadding - shelfSize
- - Math.max(mIndicationBottomPadding, mAmbientIndicationBottomPadding)
- - mKeyguardStatusViewController.getLogoutButtonHeight();
- if (mUpdateMonitor.isUdfpsEnrolled()) {
- availableSpace = mNotificationStackScrollLayoutController.getHeight()
- - minPadding - shelfSize
- - mKeyguardStatusViewController.getOwnerInfoHeight()
- - mKeyguardStatusViewController.getLogoutButtonHeight()
- - (mStatusBar.getDisplayHeight() - mAuthController.getUdfpsRegion().top);
+ float lockIconPadding = 0;
+ if (mLockIconViewController.getTop() != 0
+ && (mUpdateMonitor.isUdfpsEnrolled() || mUpdateMonitor.isFaceEnrolled())) {
+ lockIconPadding = mStatusBar.getDisplayHeight() - mLockIconViewController.getTop();
}
+ float bottomPadding = Math.max(mIndicationBottomPadding, mAmbientIndicationBottomPadding);
+ bottomPadding = Math.max(lockIconPadding, bottomPadding);
+
+ float availableSpace =
+ mNotificationStackScrollLayoutController.getHeight()
+ - minPadding
+ - shelfSize
+ - bottomPadding
+ - mKeyguardStatusViewController.getLogoutButtonHeight();
+
int count = 0;
ExpandableView previousView = null;
for (int i = 0; i < mNotificationStackScrollLayoutController.getChildCount(); i++) {
@@ -1851,10 +1842,7 @@ public class NotificationPanelViewController extends PanelViewController {
mPulseExpansionHandler.setQsExpanded(expanded);
mKeyguardBypassController.setQSExpanded(expanded);
mStatusBarKeyguardViewManager.setQsExpanded(expanded);
-
- if (mDisabledUdfpsController != null) {
- mDisabledUdfpsController.setQsExpanded(expanded);
- }
+ mLockIconViewController.setQsExpanded(expanded);
}
}
@@ -3045,9 +3033,6 @@ public class NotificationPanelViewController extends PanelViewController {
mKeyguardAffordanceHelperCallback.getRightIcon().setLaunchingAffordance(
launchingAffordance);
mKeyguardBypassController.setLaunchingAffordance(launchingAffordance);
- if (mAffordanceLaunchListener != null) {
- mAffordanceLaunchListener.accept(launchingAffordance);
- }
}
/**
@@ -3287,9 +3272,6 @@ public class NotificationPanelViewController extends PanelViewController {
if (mKeyguardStatusBar != null) {
mKeyguardStatusBar.dump(fd, pw, args);
}
- if (mDisabledUdfpsController != null) {
- mDisabledUdfpsController.dump(fd, pw, args);
- }
}
public boolean hasActiveClearableNotifications() {
@@ -3543,27 +3525,6 @@ public class NotificationPanelViewController extends PanelViewController {
return false;
}
- private void updateDisabledUdfpsController() {
- final boolean udfpsEnrolled = mAuthController.getUdfpsRegion() != null
- && mAuthController.isUdfpsEnrolled(
- KeyguardUpdateMonitor.getCurrentUser());
- if (mDisabledUdfpsController == null && udfpsEnrolled) {
- mLayoutInflater.inflate(R.layout.disabled_udfps_view, mView);
- mDisabledUdfpsController = new DisabledUdfpsController(
- mView.findViewById(R.id.disabled_udfps_view),
- mStatusBarStateController,
- mUpdateMonitor,
- mAuthController,
- mStatusBarKeyguardViewManager,
- mKeyguardStateController,
- mFalsingManager);
- mDisabledUdfpsController.init();
- } else if (mDisabledUdfpsController != null && !udfpsEnrolled) {
- mDisabledUdfpsController.destroy();
- mDisabledUdfpsController = null;
- }
- }
-
private class OnHeightChangedListener implements ExpandableView.OnHeightChangedListener {
@Override
public void onHeightChanged(ExpandableView view, boolean needsAnimation) {
@@ -3983,7 +3944,6 @@ public class NotificationPanelViewController extends PanelViewController {
FragmentHostManager.get(mView).addTagListener(QS.TAG, mFragmentListener);
mStatusBarStateController.addCallback(mStatusBarStateListener);
mConfigurationController.addCallback(mConfigurationListener);
- updateDisabledUdfpsController();
mUpdateMonitor.registerCallback(mKeyguardUpdateCallback);
// Theme might have changed between inflating this view and attaching it to the
// window, so
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index f66b7a898950..7a2d4bde3787 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -430,7 +430,6 @@ public class StatusBar extends SystemUI implements DemoMode,
// expanded notifications
// the sliding/resizing panel within the notification window
protected NotificationPanelViewController mNotificationPanelViewController;
- protected LockscreenLockIconController mLockscreenLockIconController;
// settings
private QSPanelController mQSPanelController;
@@ -1221,7 +1220,6 @@ public class StatusBar extends SystemUI implements DemoMode,
mScrimController.setScrimVisibleListener(scrimsVisible -> {
mNotificationShadeWindowController.setScrimsVisibility(scrimsVisible);
- mLockscreenLockIconController.onScrimVisibilityChanged(scrimsVisible);
});
mScrimController.attachViews(scrimBehind, scrimInFront, scrimForBubble);
@@ -1519,12 +1517,8 @@ public class StatusBar extends SystemUI implements DemoMode,
mStatusBarWindowController = statusBarComponent.getStatusBarWindowController();
mPhoneStatusBarWindow = mSuperStatusBarViewFactory.getStatusBarWindowView();
mNotificationPanelViewController = statusBarComponent.getNotificationPanelViewController();
- mLockscreenLockIconController = statusBarComponent.getLockscreenLockIconController();
- mLockscreenLockIconController.init();
+ statusBarComponent.getLockIconViewController().init();
statusBarComponent.getAuthRippleController().init();
-
- mNotificationPanelViewController.setLaunchAffordanceListener(
- mLockscreenLockIconController::onShowingLaunchAffordanceChanged);
}
protected void startKeyguard() {
@@ -1561,7 +1555,6 @@ public class StatusBar extends SystemUI implements DemoMode,
mStatusBarKeyguardViewManager.registerStatusBar(
/* statusBar= */ this, getBouncerContainer(),
mNotificationPanelViewController, mBiometricUnlockController,
- mNotificationShadeWindowView.findViewById(R.id.lock_icon_container),
mStackScroller, mKeyguardBypassController);
mKeyguardIndicationController
.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager);
@@ -3877,8 +3870,6 @@ public class StatusBar extends SystemUI implements DemoMode,
mBouncerShowing = bouncerShowing;
mKeyguardBypassController.setBouncerShowing(bouncerShowing);
mPulseExpansionHandler.setBouncerShowing(bouncerShowing);
- mLockscreenLockIconController.setBouncerShowingScrimmed(bouncerShowing,
- isBouncerShowingScrimmed());
if (mStatusBarView != null) mStatusBarView.setBouncerShowing(bouncerShowing);
updateHideIconsForBouncer(true /* animate */);
mCommandQueue.recomputeDisableFlags(mDisplayId, true /* animate */);
@@ -3889,14 +3880,6 @@ public class StatusBar extends SystemUI implements DemoMode,
}
/**
- * Sets how hidden the bouncer is, where 0f is fully visible and 1f is fully hidden
- * See {@link KeyguardBouncer#EXPANSION_VISIBLE} and {@link KeyguardBouncer#EXPANSION_HIDDEN}.
- */
- public void setBouncerHideAmount(float hideAmount) {
- mLockscreenLockIconController.setBouncerHideAmount(hideAmount);
- }
-
- /**
* Collapses the notification shade if it is tracking or expanded.
*/
public void collapseShade() {
@@ -4248,10 +4231,6 @@ public class StatusBar extends SystemUI implements DemoMode,
public void notifyBiometricAuthModeChanged() {
mDozeServiceHost.updateDozing();
updateScrimController();
- mLockscreenLockIconController.onBiometricAuthModeChanged(
- mBiometricUnlockController.isWakeAndUnlock(),
- mBiometricUnlockController.isBiometricUnlock(),
- mBiometricUnlockController.getBiometricType());
}
/**
@@ -4679,7 +4658,7 @@ public class StatusBar extends SystemUI implements DemoMode,
*/
public void onBouncerPreHideAnimation() {
mNotificationPanelViewController.onBouncerPreHideAnimation();
- mLockscreenLockIconController.onBouncerPreHideAnimation();
+
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
index 2815ce7002d0..18644a224fb5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -26,17 +26,13 @@ import static com.android.systemui.statusbar.phone.BiometricUnlockController.MOD
import android.content.ComponentCallbacks2;
import android.content.Context;
import android.content.res.ColorStateList;
-import android.content.res.Configuration;
import android.os.Bundle;
import android.os.SystemClock;
-import android.util.TypedValue;
-import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewRootImpl;
import android.view.WindowManagerGlobal;
-import android.widget.FrameLayout;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
@@ -47,7 +43,6 @@ import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.keyguard.KeyguardViewController;
import com.android.keyguard.ViewMediatorCallback;
-import com.android.settingslib.animation.AppearAnimationUtils;
import com.android.systemui.DejankUtils;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dock.DockManager;
@@ -56,11 +51,9 @@ import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.shared.system.SysUiStatsLog;
-import com.android.systemui.statusbar.CrossFadeHelper;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.RemoteInputController;
-import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.notification.ViewGroupFadeHelper;
import com.android.systemui.statusbar.phone.KeyguardBouncer.BouncerExpansionCallback;
@@ -112,7 +105,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
public void onFullyShown() {
updateStates();
mStatusBar.wakeUpIfDozing(SystemClock.uptimeMillis(), mContainer, "BOUNCER_VISIBLE");
- updateLockIcon();
}
@Override
@@ -123,18 +115,11 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
@Override
public void onStartingToShow() {
updateStates();
- updateLockIcon();
}
@Override
public void onFullyHidden() {
updateStates();
- updateLockIcon();
- }
-
- @Override
- public void onExpansionChanged(float hideAmount) {
- mStatusBar.setBouncerHideAmount(hideAmount);
}
};
private final DockManager.DockEventListener mDockEventListener =
@@ -157,7 +142,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
private BiometricUnlockController mBiometricUnlockController;
private ViewGroup mContainer;
- private ViewGroup mLockIconContainer;
private View mNotificationContainer;
protected KeyguardBouncer mBouncer;
@@ -170,8 +154,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
private boolean mPulsing;
private boolean mGesturalNav;
private boolean mIsDocked;
- private boolean mIsPortraitMode;
- private int mScreenWidthDp;
protected boolean mFirstUpdate = true;
protected boolean mLastShowing;
@@ -185,8 +167,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
private boolean mLastIsDocked;
private boolean mLastPulsing;
private int mLastBiometricMode;
- private boolean mLastLockVisible;
- private boolean mLastLockOrientationIsPortrait;
private boolean mQsExpanded;
private OnDismissAction mAfterKeyguardGoneAction;
@@ -251,14 +231,10 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
ViewGroup container,
NotificationPanelViewController notificationPanelViewController,
BiometricUnlockController biometricUnlockController,
- ViewGroup lockIconContainer, View notificationContainer,
+ View notificationContainer,
KeyguardBypassController bypassController) {
mStatusBar = statusBar;
mContainer = container;
- mLockIconContainer = lockIconContainer;
- if (mLockIconContainer != null) {
- mLastLockVisible = mLockIconContainer.getVisibility() == View.VISIBLE;
- }
mBiometricUnlockController = biometricUnlockController;
mBouncer = mKeyguardBouncerFactory.create(container, mExpansionCallback);
mNotificationPanelViewController = notificationPanelViewController;
@@ -282,9 +258,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
mKeyguardUpdateManager.registerCallback(mUpdateMonitorCallback);
mStatusBarStateController.addCallback(this);
mConfigurationController.addCallback(this);
- mIsPortraitMode = mContext.getResources().getConfiguration().orientation
- == Configuration.ORIENTATION_PORTRAIT;
- mScreenWidthDp = mContext.getResources().getConfiguration().screenWidthDp;
mGesturalNav = QuickStepContract.isGesturalMode(
mNavigationModeController.addListener(this));
if (mDockManager != null) {
@@ -299,13 +272,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
}
@Override
- public void onConfigChanged(Configuration newConfig) {
- mIsPortraitMode = newConfig.orientation == Configuration.ORIENTATION_PORTRAIT;
- mScreenWidthDp = newConfig.screenWidthDp;
- updateLockIcon();
- }
-
- @Override
public void onPanelExpansionChanged(float expansion, boolean tracking) {
// We don't want to translate the bounce when:
// • Keyguard is occluded, because we're in a FLAG_SHOW_WHEN_LOCKED activity and need to
@@ -333,11 +299,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
}
}
- @Override
- public void onQsExpansionChanged(float expansion) {
- updateLockIcon();
- }
-
/**
* Update the global actions visibility state in order to show the navBar when active.
*/
@@ -346,55 +307,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
updateStates();
}
- private void updateLockIcon() {
- // Not all form factors have a lock icon
- if (mLockIconContainer == null) {
- return;
- }
-
- boolean keyguardWithoutQs = mStatusBarStateController.getState() == StatusBarState.KEYGUARD
- && !mNotificationPanelViewController.isQsExpanded();
- boolean lockVisible = (mBouncer.isShowing() || keyguardWithoutQs)
- && !mBouncer.isAnimatingAway() && !mKeyguardStateController.isKeyguardFadingAway();
- boolean orientationChange =
- lockVisible && (mLastLockOrientationIsPortrait != mIsPortraitMode);
-
- if (mLastLockVisible != lockVisible || orientationChange) {
- mLastLockVisible = lockVisible;
- mLastLockOrientationIsPortrait = mIsPortraitMode;
- if (lockVisible) {
- FrameLayout.LayoutParams lp =
- (FrameLayout.LayoutParams) mLockIconContainer.getLayoutParams();
- if (mIsPortraitMode) {
- lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
- } else {
- final int width = (int) TypedValue.applyDimension(
- TypedValue.COMPLEX_UNIT_DIP,
- mScreenWidthDp,
- mContext.getResources().getDisplayMetrics()) / 3;
- mLockIconContainer.setMinimumWidth(width);
- lp.gravity = Gravity.TOP | Gravity.LEFT;
- }
- mLockIconContainer.setLayoutParams(lp);
-
- CrossFadeHelper.fadeIn(mLockIconContainer,
- AppearAnimationUtils.DEFAULT_APPEAR_DURATION /* duration */,
- 0 /* delay */);
- } else {
- final long duration;
- final int delay;
- if (needsBypassFading()) {
- duration = KeyguardBypassController.BYPASS_PANEL_FADE_DURATION;
- delay = 0;
- } else {
- duration = AppearAnimationUtils.DEFAULT_APPEAR_DURATION / 2;
- delay = 120;
- }
- CrossFadeHelper.fadeOut(mLockIconContainer, duration, delay, null /* runnable */);
- }
- }
- }
-
/**
* Show the keyguard. Will handle creating and attaching to the view manager
* lazily.
@@ -646,7 +558,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
finishRunnable.run();
}
mNotificationPanelViewController.blockExpansionForCurrentTouch();
- updateLockIcon();
}
@Override
@@ -736,7 +647,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
mBiometricUnlockController.finishKeyguardFadingAway();
}
}
- updateLockIcon();
updateStates();
mNotificationShadeWindowController.setKeyguardShowing(false);
mViewMediatorCallback.keyguardGone();
@@ -918,7 +828,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
if (bouncerShowing != mLastBouncerShowing || mFirstUpdate) {
mNotificationShadeWindowController.setBouncerShowing(bouncerShowing);
mStatusBar.setBouncerShowing(bouncerShowing);
- updateLockIcon();
}
if ((showing && !occluded) != (mLastShowing && !mLastOccluded) || mFirstUpdate) {
@@ -1119,11 +1028,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
}
@Override
- public void onStateChanged(int newState) {
- updateLockIcon();
- }
-
- @Override
public void onDozingChanged(boolean isDozing) {
setDozing(isDozing);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java
index e0cbbf0e0824..fb25ae37ea74 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java
@@ -18,8 +18,8 @@ package com.android.systemui.statusbar.phone.dagger;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import com.android.keyguard.LockIconViewController;
import com.android.systemui.biometrics.AuthRippleController;
-import com.android.systemui.statusbar.phone.LockscreenLockIconController;
import com.android.systemui.statusbar.phone.NotificationPanelViewController;
import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
import com.android.systemui.statusbar.phone.NotificationShadeWindowViewController;
@@ -76,13 +76,13 @@ public interface StatusBarComponent {
NotificationPanelViewController getNotificationPanelViewController();
/**
- * Creates a LockscreenLockIconController.
+ * Creates a LockIconViewController. Must be init after creation.
*/
@StatusBarScope
- LockscreenLockIconController getLockscreenLockIconController();
+ LockIconViewController getLockIconViewController();
/**
- * Creates an AuthRippleController
+ * Creates an AuthRippleViewController. Must be init after creation.
*/
@StatusBarScope
AuthRippleController getAuthRippleController();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java
index 0ce7538a6566..008c0aea7ce9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java
@@ -18,9 +18,9 @@ package com.android.systemui.statusbar.phone.dagger;
import android.annotation.Nullable;
+import com.android.keyguard.LockIconView;
import com.android.systemui.R;
import com.android.systemui.biometrics.AuthRippleView;
-import com.android.systemui.statusbar.phone.LockIcon;
import com.android.systemui.statusbar.phone.NotificationPanelView;
import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
@@ -40,10 +40,9 @@ public abstract class StatusBarViewModule {
/** */
@Provides
@StatusBarComponent.StatusBarScope
- @Nullable
- public static LockIcon getLockIcon(
+ public static LockIconView getLockIconView(
NotificationShadeWindowView notificationShadeWindowView) {
- return notificationShadeWindowView.findViewById(R.id.lock_icon);
+ return notificationShadeWindowView.findViewById(R.id.lock_icon_view);
}
/** */
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java
index 9b623f950505..02e2e4c793bc 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java
@@ -396,7 +396,7 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase {
mPanelExpansion, SCREEN_HEIGHT, mKeyguardStatusHeight,
0 /* userSwitchHeight */, mPreferredClockY, 0 /* userSwitchPreferredY */,
mHasCustomClock, mHasVisibleNotifs, mDark, ZERO_DRAG, false /* bypassEnabled */,
- 0 /* unlockedStackScrollerPadding */, false /* udfpsEnrolled */, mQsExpansion,
+ 0 /* unlockedStackScrollerPadding */, mQsExpansion,
mCutoutTopInset);
mClockPositionAlgorithm.run(mClockPosition);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LockscreenIconControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LockscreenIconControllerTest.java
deleted file mode 100644
index 60af16acbb7e..000000000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LockscreenIconControllerTest.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.phone;
-
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.res.Resources;
-import android.view.View;
-import android.view.View.OnAttachStateChangeListener;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.internal.widget.LockPatternUtils;
-import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.dock.DockManager;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.KeyguardIndicationController;
-import com.android.systemui.statusbar.StatusBarState;
-import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
-import com.android.systemui.statusbar.policy.AccessibilityController;
-import com.android.systemui.statusbar.policy.ConfigurationController;
-import com.android.systemui.statusbar.policy.KeyguardStateController;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class LockscreenIconControllerTest extends SysuiTestCase {
- @Mock
- private LockscreenGestureLogger mLockscreenGestureLogger;
- @Mock
- private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
- @Mock
- private LockPatternUtils mLockPatternUtils;
- @Mock
- private ShadeController mShadeController;
- @Mock
- private AccessibilityController mAccessibilityController;
- @Mock
- private KeyguardIndicationController mKeyguardIndicationController;
- @Mock
- private LockIcon mLockIcon;
- @Mock
- private StatusBarStateController mStatusBarStateController;
- @Mock
- private ConfigurationController mConfigurationController;
- @Mock
- private NotificationWakeUpCoordinator mNotificationWakeUpCoordinator;
- @Mock
- private KeyguardBypassController mKeyguardBypassController;
- @Mock
- private DockManager mDockManager;
- @Mock
- private KeyguardStateController mKeyguardStateController;
- @Mock
- private Resources mResources;
- @Mock
- private HeadsUpManagerPhone mHeadsUpManagerPhone;
-
- private LockscreenLockIconController mLockIconController;
-
- @Captor ArgumentCaptor<OnAttachStateChangeListener> mOnAttachStateChangeCaptor;
- @Captor ArgumentCaptor<StatusBarStateController.StateListener> mStateListenerCaptor;
-
- private OnAttachStateChangeListener mOnAttachStateChangeListener;
- private StatusBarStateController.StateListener mStatusBarStateListener;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
-
- when(mKeyguardUpdateMonitor.canShowLockIcon()).thenReturn(true);
- when(mLockIcon.getContext()).thenReturn(mContext);
- mLockIconController = new LockscreenLockIconController(mLockIcon,
- mLockscreenGestureLogger, mKeyguardUpdateMonitor, mLockPatternUtils,
- mShadeController, mAccessibilityController, mKeyguardIndicationController,
- mStatusBarStateController, mConfigurationController, mNotificationWakeUpCoordinator,
- mKeyguardBypassController, mDockManager, mKeyguardStateController, mResources,
- mHeadsUpManagerPhone);
-
- when(mLockIcon.isAttachedToWindow()).thenReturn(true);
- mLockIconController.init();
-
- verify(mLockIcon).addOnAttachStateChangeListener(
- mOnAttachStateChangeCaptor.capture());
- mOnAttachStateChangeListener = mOnAttachStateChangeCaptor.getValue();
- verify(mStatusBarStateController).addCallback(mStateListenerCaptor.capture());
- mStatusBarStateListener = mStateListenerCaptor.getValue();
- }
-
- @Test
- public void lockIcon_click() {
- ArgumentCaptor<View.OnLongClickListener> longClickCaptor = ArgumentCaptor.forClass(
- View.OnLongClickListener.class);
- ArgumentCaptor<View.OnClickListener> clickCaptor = ArgumentCaptor.forClass(
- View.OnClickListener.class);
-
- // TODO: once we use a real LockIcon instead of a mock, remove all this.
- verify(mLockIcon).setOnLongClickListener(longClickCaptor.capture());
- verify(mLockIcon).setOnClickListener(clickCaptor.capture());
-
- when(mAccessibilityController.isAccessibilityEnabled()).thenReturn(true);
- clickCaptor.getValue().onClick(new View(mContext));
- verify(mShadeController).animateCollapsePanels(anyInt(), eq(true));
-
- longClickCaptor.getValue().onLongClick(new View(mContext));
- verify(mLockPatternUtils).requireCredentialEntry(anyInt());
- verify(mKeyguardUpdateMonitor).onLockIconPressed();
- }
-
- @Test
- public void testVisibility_Dozing() {
- when(mStatusBarStateController.isDozing()).thenReturn(true);
- mStatusBarStateListener.onDozingChanged(true);
-
- verify(mLockIcon).updateIconVisibility(false);
- }
-
- @Test
- public void testVisibility_doNotShowLockIcon() {
- when(mKeyguardUpdateMonitor.canShowLockIcon()).thenReturn(false);
- mStatusBarStateListener.onStateChanged(StatusBarState.KEYGUARD);
-
- verify(mLockIcon).setVisibility(View.GONE);
- }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java
index 04ac1549e374..7d052b910cc6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java
@@ -29,13 +29,11 @@ import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.annotation.IdRes;
import android.app.ActivityManager;
-import android.app.StatusBarManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.hardware.biometrics.BiometricSourceType;
@@ -65,6 +63,7 @@ import com.android.keyguard.KeyguardClockSwitchController;
import com.android.keyguard.KeyguardStatusView;
import com.android.keyguard.KeyguardStatusViewController;
import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.LockIconViewController;
import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
import com.android.keyguard.dagger.KeyguardStatusViewComponent;
@@ -110,7 +109,6 @@ import org.mockito.MockitoAnnotations;
import org.mockito.stubbing.Answer;
import java.util.List;
-import java.util.function.Consumer;
@SmallTest
@RunWith(AndroidTestingRunner.class)
@@ -235,6 +233,8 @@ public class NotificationPanelViewTest extends SysuiTestCase {
private UserManager mUserManager;
@Mock
private UiEventLogger mUiEventLogger;
+ @Mock
+ private LockIconViewController mLockIconViewController;
private SysuiStatusBarStateController mStatusBarStateController;
private NotificationPanelViewController mNotificationPanelViewController;
@@ -338,6 +338,7 @@ public class NotificationPanelViewTest extends SysuiTestCase {
mMediaDataManager,
mNotificationShadeDepthController,
mAmbientState,
+ mLockIconViewController,
mFeatureFlags);
mNotificationPanelViewController.initDependencies(
mStatusBar,
@@ -371,19 +372,6 @@ public class NotificationPanelViewTest extends SysuiTestCase {
}
@Test
- public void testAffordanceLaunchingListener() {
- Consumer<Boolean> listener = spy((showing) -> { });
- mNotificationPanelViewController.setExpandedFraction(1f);
- mNotificationPanelViewController.setLaunchAffordanceListener(listener);
- mNotificationPanelViewController.launchCamera(false /* animate */,
- StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP);
- verify(listener).accept(eq(true));
-
- mNotificationPanelViewController.onAffordanceLaunchEnded();
- verify(listener).accept(eq(false));
- }
-
- @Test
public void testOnTouchEvent_expansionCanBeBlocked() {
onTouchEvent(MotionEvent.obtain(0L /* downTime */,
0L /* eventTime */, MotionEvent.ACTION_DOWN, 0f /* x */, 0f /* y */,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
index 20261e060601..1d4cbdc959c1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
@@ -20,7 +20,6 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -32,8 +31,6 @@ import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.View;
import android.view.ViewGroup;
-import android.view.ViewPropertyAnimator;
-import android.widget.FrameLayout;
import androidx.test.filters.SmallTest;
@@ -82,8 +79,6 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
@Mock
private DismissCallbackRegistry mDismissCallbackRegistry;
@Mock
- private ViewGroup mLockIconContainer;
- @Mock
private SysuiStatusBarStateController mStatusBarStateController;
@Mock
private View mNotificationContainer;
@@ -101,11 +96,6 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- when(mLockIconContainer.getParent()).thenReturn(mock(ViewGroup.class));
- when(mLockIconContainer.animate()).thenReturn(mock(ViewPropertyAnimator.class,
- RETURNS_DEEP_STUBS));
- when(mLockIconContainer.getLayoutParams()).thenReturn(mock(FrameLayout.LayoutParams.class));
-
when(mKeyguardBouncerFactory.create(
any(ViewGroup.class),
any(KeyguardBouncer.BouncerExpansionCallback.class)))
@@ -127,7 +117,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
mKeyguardBouncerFactory);
mStatusBarKeyguardViewManager.registerStatusBar(mStatusBar, mContainer,
mNotificationPanelView, mBiometrucUnlockController,
- mLockIconContainer, mNotificationContainer, mBypassController);
+ mNotificationContainer, mBypassController);
mStatusBarKeyguardViewManager.show(null);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
index 98a44875fbd7..08d6d2d7c72d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
@@ -65,7 +65,6 @@ import android.util.SparseArray;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
-import android.widget.LinearLayout;
import androidx.test.filters.SmallTest;
@@ -236,7 +235,6 @@ public class StatusBarTest extends SysuiTestCase {
@Mock private Lazy<LockscreenWallpaper> mLockscreenWallpaperLazy;
@Mock private LockscreenWallpaper mLockscreenWallpaper;
@Mock private DozeServiceHost mDozeServiceHost;
- @Mock private LinearLayout mLockIconContainer;
@Mock private ViewMediatorCallback mKeyguardVieMediatorCallback;
@Mock private KeyguardLiftController mKeyguardLiftController;
@Mock private VolumeComponent mVolumeComponent;
@@ -252,7 +250,6 @@ public class StatusBarTest extends SysuiTestCase {
@Mock private DismissCallbackRegistry mDismissCallbackRegistry;
@Mock private StatusBarTouchableRegionManager mStatusBarTouchableRegionManager;
@Mock private ScreenPinningRequest mScreenPinningRequest;
- @Mock private LockscreenLockIconController mLockscreenLockIconController;
@Mock private StatusBarNotificationActivityStarter.Builder
mStatusBarNotificationActivityStarterBuilder;
@Mock private DarkIconDispatcher mDarkIconDispatcher;
@@ -434,13 +431,9 @@ public class StatusBarTest extends SysuiTestCase {
mOngoingCallController,
mTunerService,
mFeatureFlags);
-
- when(mNotificationShadeWindowView.findViewById(R.id.lock_icon_container)).thenReturn(
- mLockIconContainer);
-
when(mKeyguardViewMediator.registerStatusBar(any(StatusBar.class), any(ViewGroup.class),
any(NotificationPanelViewController.class), any(BiometricUnlockController.class),
- any(ViewGroup.class), any(ViewGroup.class), any(KeyguardBypassController.class)))
+ any(ViewGroup.class), any(KeyguardBypassController.class)))
.thenReturn(mStatusBarKeyguardViewManager);
when(mKeyguardViewMediator.getViewMediatorCallback()).thenReturn(
@@ -450,7 +443,6 @@ public class StatusBarTest extends SysuiTestCase {
// initialized automatically.
mStatusBar.mNotificationShadeWindowView = mNotificationShadeWindowView;
mStatusBar.mNotificationPanelViewController = mNotificationPanelViewController;
- mStatusBar.mLockscreenLockIconController = mLockscreenLockIconController;
mStatusBar.mDozeScrimController = mDozeScrimController;
mStatusBar.mPresenter = mNotificationPresenter;
mStatusBar.mKeyguardIndicationController = mKeyguardIndicationController;