Merge changes from topic "b150393918-lock-icon-controller" into rvc-dev am: 831ddd860f

Change-Id: Iec745f6b05722d68424c8346d046d9b1cbcbde77
This commit is contained in:
Automerger Merge Worker
2020-03-06 15:50:43 +00:00
3 changed files with 94 additions and 71 deletions

View File

@@ -26,7 +26,6 @@ import android.graphics.Color;
import android.graphics.drawable.Animatable2; import android.graphics.drawable.Animatable2;
import android.graphics.drawable.AnimatedVectorDrawable; import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.hardware.biometrics.BiometricSourceType;
import android.os.Trace; import android.os.Trace;
import android.provider.Settings; import android.provider.Settings;
import android.text.TextUtils; import android.text.TextUtils;
@@ -34,22 +33,17 @@ import android.util.AttributeSet;
import android.view.ViewTreeObserver; import android.view.ViewTreeObserver;
import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityNodeInfo;
import androidx.annotation.Nullable;
import com.android.internal.graphics.ColorUtils; import com.android.internal.graphics.ColorUtils;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.Dependency; import com.android.systemui.Dependency;
import com.android.systemui.Interpolators; import com.android.systemui.Interpolators;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.dock.DockManager;
import com.android.systemui.statusbar.KeyguardAffordanceView; import com.android.systemui.statusbar.KeyguardAffordanceView;
import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator; import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.phone.ScrimController.ScrimVisibility; import com.android.systemui.statusbar.phone.ScrimController.ScrimVisibility;
import com.android.systemui.statusbar.policy.AccessibilityController; import com.android.systemui.statusbar.policy.AccessibilityController;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
@@ -61,8 +55,7 @@ import javax.inject.Named;
* Manages the different states and animations of the unlock icon. * Manages the different states and animations of the unlock icon.
*/ */
public class LockIcon extends KeyguardAffordanceView implements public class LockIcon extends KeyguardAffordanceView implements
KeyguardStateController.Callback, NotificationWakeUpCoordinator.WakeUpListener, ViewTreeObserver.OnPreDrawListener {
ViewTreeObserver.OnPreDrawListener, OnHeadsUpChangedListener {
private static final int STATE_LOCKED = 0; private static final int STATE_LOCKED = 0;
private static final int STATE_LOCK_OPEN = 1; 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 static final int STATE_BIOMETRICS_ERROR = 3;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private final AccessibilityController mAccessibilityController; private final AccessibilityController mAccessibilityController;
private final DockManager mDockManager;
private final KeyguardStateController mKeyguardStateController; private final KeyguardStateController mKeyguardStateController;
private final KeyguardBypassController mBypassController; private final KeyguardBypassController mBypassController;
private final NotificationWakeUpCoordinator mWakeUpCoordinator; private final NotificationWakeUpCoordinator mWakeUpCoordinator;
@@ -130,43 +122,6 @@ public class LockIcon extends KeyguardAffordanceView implements
update(); 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 @Inject
public LockIcon(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs, public LockIcon(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
@@ -174,7 +129,6 @@ public class LockIcon extends KeyguardAffordanceView implements
KeyguardBypassController bypassController, KeyguardBypassController bypassController,
NotificationWakeUpCoordinator wakeUpCoordinator, NotificationWakeUpCoordinator wakeUpCoordinator,
KeyguardStateController keyguardStateController, KeyguardStateController keyguardStateController,
@Nullable DockManager dockManager,
HeadsUpManagerPhone headsUpManager) { HeadsUpManagerPhone headsUpManager) {
super(context, attrs); super(context, attrs);
mContext = context; mContext = context;
@@ -183,7 +137,6 @@ public class LockIcon extends KeyguardAffordanceView implements
mBypassController = bypassController; mBypassController = bypassController;
mWakeUpCoordinator = wakeUpCoordinator; mWakeUpCoordinator = wakeUpCoordinator;
mKeyguardStateController = keyguardStateController; mKeyguardStateController = keyguardStateController;
mDockManager = dockManager;
mHeadsUpManager = headsUpManager; mHeadsUpManager = headsUpManager;
} }
@@ -191,24 +144,14 @@ public class LockIcon extends KeyguardAffordanceView implements
protected void onAttachedToWindow() { protected void onAttachedToWindow() {
super.onAttachedToWindow(); super.onAttachedToWindow();
mKeyguardStateController.addCallback(mKeyguardMonitorCallback); mKeyguardStateController.addCallback(mKeyguardMonitorCallback);
mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
mWakeUpCoordinator.addListener(this);
mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure(); mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure();
if (mDockManager != null) {
mDockManager.addListener(mDockEventListener);
}
update(); update();
} }
@Override @Override
protected void onDetachedFromWindow() { protected void onDetachedFromWindow() {
super.onDetachedFromWindow(); super.onDetachedFromWindow();
mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback);
mKeyguardStateController.removeCallback(mKeyguardMonitorCallback); 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 * Update the icon visibility
* @return true if the visibility changed * @return true if the visibility changed
*/ */
private boolean updateIconVisibility() { boolean updateIconVisibility() {
boolean onAodNotPulsingOrDocked = mDozing && (!mPulsing || mDocked); boolean onAodNotPulsingOrDocked = mDozing && (!mPulsing || mDocked);
boolean invisible = onAodNotPulsingOrDocked || mWakeAndUnlockRunning boolean invisible = onAodNotPulsingOrDocked || mWakeAndUnlockRunning
|| mShowingLaunchAffordance; || mShowingLaunchAffordance;
@@ -424,16 +367,6 @@ public class LockIcon extends KeyguardAffordanceView implements
return -1; return -1;
} }
@Override
public void onFullyHiddenChanged(boolean isFullyHidden) {
if (mBypassController.getBypassEnabled()) {
boolean changed = updateIconVisibility();
if (changed) {
update();
}
}
}
public void setBouncerShowingScrimmed(boolean bouncerShowing) { public void setBouncerShowingScrimmed(boolean bouncerShowing) {
mBouncerShowingScrimmed = bouncerShowing; mBouncerShowingScrimmed = bouncerShowing;
if (mBypassController.getBypassEnabled()) { if (mBypassController.getBypassEnabled()) {
@@ -454,6 +387,18 @@ public class LockIcon extends KeyguardAffordanceView implements
updateDarkTint(); 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) @Retention(RetentionPolicy.SOURCE)
@IntDef({ERROR, UNLOCK, LOCK, SCANNING}) @IntDef({ERROR, UNLOCK, LOCK, SCANNING})
@interface LockAnimIndex {} @interface LockAnimIndex {}

View File

@@ -18,20 +18,29 @@ package com.android.systemui.statusbar.phone;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.graphics.Color; import android.graphics.Color;
import android.hardware.biometrics.BiometricSourceType;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.annotation.Nullable;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.dock.DockManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.KeyguardIndicationController; 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.AccessibilityController;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener; import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
import java.util.Optional;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
@@ -47,6 +56,9 @@ public class LockscreenLockIconController {
private final KeyguardIndicationController mKeyguardIndicationController; private final KeyguardIndicationController mKeyguardIndicationController;
private final StatusBarStateController mStatusBarStateController; private final StatusBarStateController mStatusBarStateController;
private final ConfigurationController mConfigurationController; private final ConfigurationController mConfigurationController;
private final NotificationWakeUpCoordinator mNotificationWakeUpCoordinator;
private final KeyguardBypassController mKeyguardBypassController;
private final Optional<DockManager> mDockManager;
private LockIcon mLockIcon; private LockIcon mLockIcon;
private View.OnAttachStateChangeListener mOnAttachStateChangeListener = private View.OnAttachStateChangeListener mOnAttachStateChangeListener =
@@ -55,6 +67,10 @@ public class LockscreenLockIconController {
public void onViewAttachedToWindow(View v) { public void onViewAttachedToWindow(View v) {
mStatusBarStateController.addCallback(mSBStateListener); mStatusBarStateController.addCallback(mSBStateListener);
mConfigurationController.addCallback(mConfigurationListener); mConfigurationController.addCallback(mConfigurationListener);
mNotificationWakeUpCoordinator.addListener(mWakeUpListener);
mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
mDockManager.ifPresent(dockManager -> dockManager.addListener(mDockEventListener));
mConfigurationListener.onThemeChanged(); mConfigurationListener.onThemeChanged();
} }
@@ -63,6 +79,11 @@ public class LockscreenLockIconController {
public void onViewDetachedFromWindow(View v) { public void onViewDetachedFromWindow(View v) {
mStatusBarStateController.removeCallback(mSBStateListener); mStatusBarStateController.removeCallback(mSBStateListener);
mConfigurationController.removeCallback(mConfigurationListener); 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 @Inject
public LockscreenLockIconController(LockscreenGestureLogger lockscreenGestureLogger, public LockscreenLockIconController(LockscreenGestureLogger lockscreenGestureLogger,
KeyguardUpdateMonitor keyguardUpdateMonitor, KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -123,7 +185,10 @@ public class LockscreenLockIconController {
AccessibilityController accessibilityController, AccessibilityController accessibilityController,
KeyguardIndicationController keyguardIndicationController, KeyguardIndicationController keyguardIndicationController,
StatusBarStateController statusBarStateController, StatusBarStateController statusBarStateController,
ConfigurationController configurationController) { ConfigurationController configurationController,
NotificationWakeUpCoordinator notificationWakeUpCoordinator,
KeyguardBypassController keyguardBypassController,
@Nullable DockManager dockManager) {
mLockscreenGestureLogger = lockscreenGestureLogger; mLockscreenGestureLogger = lockscreenGestureLogger;
mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mLockPatternUtils = lockPatternUtils; mLockPatternUtils = lockPatternUtils;
@@ -132,6 +197,9 @@ public class LockscreenLockIconController {
mKeyguardIndicationController = keyguardIndicationController; mKeyguardIndicationController = keyguardIndicationController;
mStatusBarStateController = statusBarStateController; mStatusBarStateController = statusBarStateController;
mConfigurationController = configurationController; mConfigurationController = configurationController;
mNotificationWakeUpCoordinator = notificationWakeUpCoordinator;
mKeyguardBypassController = keyguardBypassController;
mDockManager = dockManager == null ? Optional.empty() : Optional.of(dockManager);
mKeyguardIndicationController.setLockIconController(this); mKeyguardIndicationController.setLockIconController(this);
} }

View File

@@ -29,8 +29,10 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.dock.DockManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.KeyguardIndicationController; 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.AccessibilityController;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
@@ -63,6 +65,13 @@ public class LockscreenIconControllerTest extends SysuiTestCase {
private StatusBarStateController mStatusBarStateController; private StatusBarStateController mStatusBarStateController;
@Mock @Mock
private ConfigurationController mConfigurationController; private ConfigurationController mConfigurationController;
@Mock
private NotificationWakeUpCoordinator mNotificationWakeUpCoordinator;
@Mock
private KeyguardBypassController mKeyguardBypassController;
@Mock
private DockManager mDockManager;
@Before @Before
public void setUp() { public void setUp() {
@@ -71,7 +80,8 @@ public class LockscreenIconControllerTest extends SysuiTestCase {
mLockIconController = new LockscreenLockIconController( mLockIconController = new LockscreenLockIconController(
mLockscreenGestureLogger, mKeyguardUpdateMonitor, mLockPatternUtils, mLockscreenGestureLogger, mKeyguardUpdateMonitor, mLockPatternUtils,
mShadeController, mAccessibilityController, mKeyguardIndicationController, mShadeController, mAccessibilityController, mKeyguardIndicationController,
mStatusBarStateController, mConfigurationController); mStatusBarStateController, mConfigurationController, mNotificationWakeUpCoordinator,
mKeyguardBypassController, mDockManager);
mLockIconController.attach(mLockIcon); mLockIconController.attach(mLockIcon);
} }