Merge changes from topic "b150393918-lock-icon-controller" into rvc-dev am: 831ddd860f
Change-Id: Iec745f6b05722d68424c8346d046d9b1cbcbde77
This commit is contained in:
@@ -26,7 +26,6 @@ import android.graphics.Color;
|
||||
import android.graphics.drawable.Animatable2;
|
||||
import android.graphics.drawable.AnimatedVectorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.hardware.biometrics.BiometricSourceType;
|
||||
import android.os.Trace;
|
||||
import android.provider.Settings;
|
||||
import android.text.TextUtils;
|
||||
@@ -34,22 +33,17 @@ import android.util.AttributeSet;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.internal.graphics.ColorUtils;
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.Interpolators;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.dock.DockManager;
|
||||
import com.android.systemui.statusbar.KeyguardAffordanceView;
|
||||
import com.android.systemui.statusbar.StatusBarState;
|
||||
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
|
||||
import com.android.systemui.statusbar.phone.ScrimController.ScrimVisibility;
|
||||
import com.android.systemui.statusbar.policy.AccessibilityController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
@@ -61,8 +55,7 @@ import javax.inject.Named;
|
||||
* Manages the different states and animations of the unlock icon.
|
||||
*/
|
||||
public class LockIcon extends KeyguardAffordanceView implements
|
||||
KeyguardStateController.Callback, NotificationWakeUpCoordinator.WakeUpListener,
|
||||
ViewTreeObserver.OnPreDrawListener, OnHeadsUpChangedListener {
|
||||
ViewTreeObserver.OnPreDrawListener {
|
||||
|
||||
private static final int STATE_LOCKED = 0;
|
||||
private static final int STATE_LOCK_OPEN = 1;
|
||||
@@ -70,7 +63,6 @@ public class LockIcon extends KeyguardAffordanceView implements
|
||||
private static final int STATE_BIOMETRICS_ERROR = 3;
|
||||
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||
private final AccessibilityController mAccessibilityController;
|
||||
private final DockManager mDockManager;
|
||||
private final KeyguardStateController mKeyguardStateController;
|
||||
private final KeyguardBypassController mBypassController;
|
||||
private final NotificationWakeUpCoordinator mWakeUpCoordinator;
|
||||
@@ -130,43 +122,6 @@ public class LockIcon extends KeyguardAffordanceView implements
|
||||
update();
|
||||
}
|
||||
};
|
||||
private final DockManager.DockEventListener mDockEventListener =
|
||||
new DockManager.DockEventListener() {
|
||||
@Override
|
||||
public void onEvent(int event) {
|
||||
boolean docked = event == DockManager.STATE_DOCKED
|
||||
|| event == DockManager.STATE_DOCKED_HIDE;
|
||||
if (docked != mDocked) {
|
||||
mDocked = docked;
|
||||
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();
|
||||
}
|
||||
};
|
||||
|
||||
@Inject
|
||||
public LockIcon(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
|
||||
@@ -174,7 +129,6 @@ public class LockIcon extends KeyguardAffordanceView implements
|
||||
KeyguardBypassController bypassController,
|
||||
NotificationWakeUpCoordinator wakeUpCoordinator,
|
||||
KeyguardStateController keyguardStateController,
|
||||
@Nullable DockManager dockManager,
|
||||
HeadsUpManagerPhone headsUpManager) {
|
||||
super(context, attrs);
|
||||
mContext = context;
|
||||
@@ -183,7 +137,6 @@ public class LockIcon extends KeyguardAffordanceView implements
|
||||
mBypassController = bypassController;
|
||||
mWakeUpCoordinator = wakeUpCoordinator;
|
||||
mKeyguardStateController = keyguardStateController;
|
||||
mDockManager = dockManager;
|
||||
mHeadsUpManager = headsUpManager;
|
||||
}
|
||||
|
||||
@@ -191,24 +144,14 @@ public class LockIcon extends KeyguardAffordanceView implements
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
mKeyguardStateController.addCallback(mKeyguardMonitorCallback);
|
||||
mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
|
||||
mWakeUpCoordinator.addListener(this);
|
||||
mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure();
|
||||
if (mDockManager != null) {
|
||||
mDockManager.addListener(mDockEventListener);
|
||||
}
|
||||
update();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow();
|
||||
mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback);
|
||||
mKeyguardStateController.removeCallback(mKeyguardMonitorCallback);
|
||||
mWakeUpCoordinator.removeListener(this);
|
||||
if (mDockManager != null) {
|
||||
mDockManager.removeListener(mDockEventListener);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -306,7 +249,7 @@ public class LockIcon extends KeyguardAffordanceView implements
|
||||
* Update the icon visibility
|
||||
* @return true if the visibility changed
|
||||
*/
|
||||
private boolean updateIconVisibility() {
|
||||
boolean updateIconVisibility() {
|
||||
boolean onAodNotPulsingOrDocked = mDozing && (!mPulsing || mDocked);
|
||||
boolean invisible = onAodNotPulsingOrDocked || mWakeAndUnlockRunning
|
||||
|| mShowingLaunchAffordance;
|
||||
@@ -424,16 +367,6 @@ public class LockIcon extends KeyguardAffordanceView implements
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFullyHiddenChanged(boolean isFullyHidden) {
|
||||
if (mBypassController.getBypassEnabled()) {
|
||||
boolean changed = updateIconVisibility();
|
||||
if (changed) {
|
||||
update();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setBouncerShowingScrimmed(boolean bouncerShowing) {
|
||||
mBouncerShowingScrimmed = bouncerShowing;
|
||||
if (mBypassController.getBypassEnabled()) {
|
||||
@@ -454,6 +387,18 @@ public class LockIcon extends KeyguardAffordanceView implements
|
||||
updateDarkTint();
|
||||
}
|
||||
|
||||
void setSimLocked(boolean simLocked) {
|
||||
mSimLocked = simLocked;
|
||||
}
|
||||
|
||||
/** Set if the device is docked. */
|
||||
public void setDocked(boolean docked) {
|
||||
if (mDocked != docked) {
|
||||
mDocked = docked;
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef({ERROR, UNLOCK, LOCK, SCANNING})
|
||||
@interface LockAnimIndex {}
|
||||
|
||||
@@ -18,20 +18,29 @@ package com.android.systemui.statusbar.phone;
|
||||
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Color;
|
||||
import android.hardware.biometrics.BiometricSourceType;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
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.systemui.R;
|
||||
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.notification.NotificationWakeUpCoordinator;
|
||||
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator.WakeUpListener;
|
||||
import com.android.systemui.statusbar.policy.AccessibilityController;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
@@ -47,6 +56,9 @@ public class LockscreenLockIconController {
|
||||
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 LockIcon mLockIcon;
|
||||
|
||||
private View.OnAttachStateChangeListener mOnAttachStateChangeListener =
|
||||
@@ -55,6 +67,10 @@ public class LockscreenLockIconController {
|
||||
public void onViewAttachedToWindow(View v) {
|
||||
mStatusBarStateController.addCallback(mSBStateListener);
|
||||
mConfigurationController.addCallback(mConfigurationListener);
|
||||
mNotificationWakeUpCoordinator.addListener(mWakeUpListener);
|
||||
mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
|
||||
|
||||
mDockManager.ifPresent(dockManager -> dockManager.addListener(mDockEventListener));
|
||||
|
||||
mConfigurationListener.onThemeChanged();
|
||||
}
|
||||
@@ -63,6 +79,11 @@ public class LockscreenLockIconController {
|
||||
public void onViewDetachedFromWindow(View v) {
|
||||
mStatusBarStateController.removeCallback(mSBStateListener);
|
||||
mConfigurationController.removeCallback(mConfigurationListener);
|
||||
mNotificationWakeUpCoordinator.removeListener(mWakeUpListener);
|
||||
mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback);
|
||||
|
||||
|
||||
mDockManager.ifPresent(dockManager -> dockManager.removeListener(mDockEventListener));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -115,6 +136,47 @@ public class LockscreenLockIconController {
|
||||
}
|
||||
};
|
||||
|
||||
private final WakeUpListener mWakeUpListener = new WakeUpListener() {
|
||||
@Override
|
||||
public void onFullyHiddenChanged(boolean isFullyHidden) {
|
||||
if (mKeyguardBypassController.getBypassEnabled()) {
|
||||
boolean changed = mLockIcon.updateIconVisibility();
|
||||
if (changed) {
|
||||
mLockIcon.update();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback =
|
||||
new KeyguardUpdateMonitorCallback() {
|
||||
@Override
|
||||
public void onSimStateChanged(int subId, int slotId, int simState) {
|
||||
mLockIcon.setSimLocked(mKeyguardUpdateMonitor.isSimPinSecure());
|
||||
mLockIcon.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onKeyguardVisibilityChanged(boolean showing) {
|
||||
mLockIcon.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBiometricRunningStateChanged(boolean running,
|
||||
BiometricSourceType biometricSourceType) {
|
||||
mLockIcon.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStrongAuthStateChanged(int userId) {
|
||||
mLockIcon.update();
|
||||
}
|
||||
};
|
||||
|
||||
private final DockManager.DockEventListener mDockEventListener =
|
||||
event -> mLockIcon.setDocked(event == DockManager.STATE_DOCKED
|
||||
|| event == DockManager.STATE_DOCKED_HIDE);
|
||||
|
||||
@Inject
|
||||
public LockscreenLockIconController(LockscreenGestureLogger lockscreenGestureLogger,
|
||||
KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||
@@ -123,7 +185,10 @@ public class LockscreenLockIconController {
|
||||
AccessibilityController accessibilityController,
|
||||
KeyguardIndicationController keyguardIndicationController,
|
||||
StatusBarStateController statusBarStateController,
|
||||
ConfigurationController configurationController) {
|
||||
ConfigurationController configurationController,
|
||||
NotificationWakeUpCoordinator notificationWakeUpCoordinator,
|
||||
KeyguardBypassController keyguardBypassController,
|
||||
@Nullable DockManager dockManager) {
|
||||
mLockscreenGestureLogger = lockscreenGestureLogger;
|
||||
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
||||
mLockPatternUtils = lockPatternUtils;
|
||||
@@ -132,6 +197,9 @@ public class LockscreenLockIconController {
|
||||
mKeyguardIndicationController = keyguardIndicationController;
|
||||
mStatusBarStateController = statusBarStateController;
|
||||
mConfigurationController = configurationController;
|
||||
mNotificationWakeUpCoordinator = notificationWakeUpCoordinator;
|
||||
mKeyguardBypassController = keyguardBypassController;
|
||||
mDockManager = dockManager == null ? Optional.empty() : Optional.of(dockManager);
|
||||
|
||||
mKeyguardIndicationController.setLockIconController(this);
|
||||
}
|
||||
|
||||
@@ -29,8 +29,10 @@ 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.notification.NotificationWakeUpCoordinator;
|
||||
import com.android.systemui.statusbar.policy.AccessibilityController;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
|
||||
@@ -63,6 +65,13 @@ public class LockscreenIconControllerTest extends SysuiTestCase {
|
||||
private StatusBarStateController mStatusBarStateController;
|
||||
@Mock
|
||||
private ConfigurationController mConfigurationController;
|
||||
@Mock
|
||||
private NotificationWakeUpCoordinator mNotificationWakeUpCoordinator;
|
||||
@Mock
|
||||
private KeyguardBypassController mKeyguardBypassController;
|
||||
@Mock
|
||||
private DockManager mDockManager;
|
||||
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -71,7 +80,8 @@ public class LockscreenIconControllerTest extends SysuiTestCase {
|
||||
mLockIconController = new LockscreenLockIconController(
|
||||
mLockscreenGestureLogger, mKeyguardUpdateMonitor, mLockPatternUtils,
|
||||
mShadeController, mAccessibilityController, mKeyguardIndicationController,
|
||||
mStatusBarStateController, mConfigurationController);
|
||||
mStatusBarStateController, mConfigurationController, mNotificationWakeUpCoordinator,
|
||||
mKeyguardBypassController, mDockManager);
|
||||
|
||||
mLockIconController.attach(mLockIcon);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user