Merge changes from topic "b150393918-lock-icon-controller" into rvc-dev am: a40c4b47ef
Change-Id: I7dd935118ee13931994c7758af651a4e0578f2c3
This commit is contained in:
@@ -88,6 +88,7 @@ import com.android.systemui.shared.plugins.PluginManager;
|
|||||||
import com.android.systemui.stackdivider.Divider;
|
import com.android.systemui.stackdivider.Divider;
|
||||||
import com.android.systemui.statusbar.CommandQueue;
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
import com.android.systemui.statusbar.FlingAnimationUtils;
|
import com.android.systemui.statusbar.FlingAnimationUtils;
|
||||||
|
import com.android.systemui.statusbar.KeyguardIndicationController;
|
||||||
import com.android.systemui.statusbar.NavigationBarController;
|
import com.android.systemui.statusbar.NavigationBarController;
|
||||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
||||||
import com.android.systemui.statusbar.NotificationMediaManager;
|
import com.android.systemui.statusbar.NotificationMediaManager;
|
||||||
@@ -326,6 +327,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
|
|||||||
ExtensionController extensionController,
|
ExtensionController extensionController,
|
||||||
UserInfoControllerImpl userInfoControllerImpl,
|
UserInfoControllerImpl userInfoControllerImpl,
|
||||||
PhoneStatusBarPolicy phoneStatusBarPolicy,
|
PhoneStatusBarPolicy phoneStatusBarPolicy,
|
||||||
|
KeyguardIndicationController keyguardIndicationController,
|
||||||
DismissCallbackRegistry dismissCallbackRegistry,
|
DismissCallbackRegistry dismissCallbackRegistry,
|
||||||
StatusBarTouchableRegionManager statusBarTouchableRegionManager,
|
StatusBarTouchableRegionManager statusBarTouchableRegionManager,
|
||||||
/* Car Settings injected components. */
|
/* Car Settings injected components. */
|
||||||
@@ -410,6 +412,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
|
|||||||
extensionController,
|
extensionController,
|
||||||
userInfoControllerImpl,
|
userInfoControllerImpl,
|
||||||
phoneStatusBarPolicy,
|
phoneStatusBarPolicy,
|
||||||
|
keyguardIndicationController,
|
||||||
dismissCallbackRegistry,
|
dismissCallbackRegistry,
|
||||||
statusBarTouchableRegionManager);
|
statusBarTouchableRegionManager);
|
||||||
mUserSwitcherController = userSwitcherController;
|
mUserSwitcherController = userSwitcherController;
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ import com.android.systemui.shared.plugins.PluginManager;
|
|||||||
import com.android.systemui.stackdivider.Divider;
|
import com.android.systemui.stackdivider.Divider;
|
||||||
import com.android.systemui.statusbar.CommandQueue;
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
import com.android.systemui.statusbar.FlingAnimationUtils;
|
import com.android.systemui.statusbar.FlingAnimationUtils;
|
||||||
|
import com.android.systemui.statusbar.KeyguardIndicationController;
|
||||||
import com.android.systemui.statusbar.NavigationBarController;
|
import com.android.systemui.statusbar.NavigationBarController;
|
||||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
||||||
import com.android.systemui.statusbar.NotificationMediaManager;
|
import com.android.systemui.statusbar.NotificationMediaManager;
|
||||||
@@ -199,6 +200,7 @@ public class CarStatusBarModule {
|
|||||||
ExtensionController extensionController,
|
ExtensionController extensionController,
|
||||||
UserInfoControllerImpl userInfoControllerImpl,
|
UserInfoControllerImpl userInfoControllerImpl,
|
||||||
PhoneStatusBarPolicy phoneStatusBarPolicy,
|
PhoneStatusBarPolicy phoneStatusBarPolicy,
|
||||||
|
KeyguardIndicationController keyguardIndicationController,
|
||||||
DismissCallbackRegistry dismissCallbackRegistry,
|
DismissCallbackRegistry dismissCallbackRegistry,
|
||||||
StatusBarTouchableRegionManager statusBarTouchableRegionManager,
|
StatusBarTouchableRegionManager statusBarTouchableRegionManager,
|
||||||
CarServiceProvider carServiceProvider,
|
CarServiceProvider carServiceProvider,
|
||||||
@@ -281,6 +283,7 @@ public class CarStatusBarModule {
|
|||||||
extensionController,
|
extensionController,
|
||||||
userInfoControllerImpl,
|
userInfoControllerImpl,
|
||||||
phoneStatusBarPolicy,
|
phoneStatusBarPolicy,
|
||||||
|
keyguardIndicationController,
|
||||||
dismissCallbackRegistry,
|
dismissCallbackRegistry,
|
||||||
statusBarTouchableRegionManager,
|
statusBarTouchableRegionManager,
|
||||||
carServiceProvider,
|
carServiceProvider,
|
||||||
|
|||||||
@@ -34,14 +34,12 @@ import com.android.systemui.keyguard.DismissCallbackRegistry;
|
|||||||
import com.android.systemui.plugins.FalsingManager;
|
import com.android.systemui.plugins.FalsingManager;
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
import com.android.systemui.screenshot.ScreenshotNotificationSmartActionsProvider;
|
import com.android.systemui.screenshot.ScreenshotNotificationSmartActionsProvider;
|
||||||
import com.android.systemui.statusbar.KeyguardIndicationController;
|
|
||||||
import com.android.systemui.statusbar.NotificationListener;
|
import com.android.systemui.statusbar.NotificationListener;
|
||||||
import com.android.systemui.statusbar.NotificationMediaManager;
|
import com.android.systemui.statusbar.NotificationMediaManager;
|
||||||
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
|
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
|
||||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||||
import com.android.systemui.statusbar.phone.KeyguardBouncer;
|
import com.android.systemui.statusbar.phone.KeyguardBouncer;
|
||||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||||
import com.android.systemui.statusbar.phone.LockIcon;
|
|
||||||
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
|
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
|
||||||
import com.android.systemui.statusbar.phone.StatusBar;
|
import com.android.systemui.statusbar.phone.StatusBar;
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||||
@@ -158,11 +156,6 @@ public class SystemUIFactory {
|
|||||||
Dependency.get(DozeParameters.class));
|
Dependency.get(DozeParameters.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
public KeyguardIndicationController createKeyguardIndicationController(Context context,
|
|
||||||
ViewGroup indicationArea, LockIcon lockIcon) {
|
|
||||||
return new KeyguardIndicationController(context, indicationArea, lockIcon);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
public static class ContextHolder {
|
public static class ContextHolder {
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import android.content.res.Resources;
|
|||||||
import android.hardware.SensorPrivacyManager;
|
import android.hardware.SensorPrivacyManager;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
|
import android.os.BatteryStats;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.os.ServiceManager;
|
import android.os.ServiceManager;
|
||||||
@@ -51,6 +52,7 @@ import android.view.WindowManager;
|
|||||||
import android.view.WindowManagerGlobal;
|
import android.view.WindowManagerGlobal;
|
||||||
import android.view.accessibility.AccessibilityManager;
|
import android.view.accessibility.AccessibilityManager;
|
||||||
|
|
||||||
|
import com.android.internal.app.IBatteryStats;
|
||||||
import com.android.internal.statusbar.IStatusBarService;
|
import com.android.internal.statusbar.IStatusBarService;
|
||||||
import com.android.internal.util.LatencyTracker;
|
import com.android.internal.util.LatencyTracker;
|
||||||
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
||||||
@@ -123,6 +125,13 @@ public class SystemServicesModule {
|
|||||||
return ActivityManager.getService();
|
return ActivityManager.getService();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
static IBatteryStats provideIBatteryStats() {
|
||||||
|
return IBatteryStats.Stub.asInterface(
|
||||||
|
ServiceManager.getService(BatteryStats.SERVICE_NAME));
|
||||||
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
static IDreamManager provideIDreamManager() {
|
static IDreamManager provideIDreamManager() {
|
||||||
|
|||||||
@@ -25,12 +25,9 @@ import android.hardware.biometrics.BiometricSourceType;
|
|||||||
import android.hardware.face.FaceManager;
|
import android.hardware.face.FaceManager;
|
||||||
import android.hardware.fingerprint.FingerprintManager;
|
import android.hardware.fingerprint.FingerprintManager;
|
||||||
import android.os.BatteryManager;
|
import android.os.BatteryManager;
|
||||||
import android.os.BatteryStats;
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceManager;
|
|
||||||
import android.os.UserManager;
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.text.format.Formatter;
|
import android.text.format.Formatter;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -39,27 +36,20 @@ import android.view.ViewGroup;
|
|||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.app.IBatteryStats;
|
import com.android.internal.app.IBatteryStats;
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
|
||||||
import com.android.internal.widget.LockPatternUtils;
|
|
||||||
import com.android.internal.widget.ViewClippingUtil;
|
import com.android.internal.widget.ViewClippingUtil;
|
||||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||||
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||||
import com.android.settingslib.Utils;
|
import com.android.settingslib.Utils;
|
||||||
import com.android.settingslib.fuelgauge.BatteryStatus;
|
import com.android.settingslib.fuelgauge.BatteryStatus;
|
||||||
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.dock.DockManager;
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
|
||||||
import com.android.systemui.statusbar.phone.KeyguardIndicationTextView;
|
import com.android.systemui.statusbar.phone.KeyguardIndicationTextView;
|
||||||
import com.android.systemui.statusbar.phone.LockIcon;
|
import com.android.systemui.statusbar.phone.LockscreenLockIconController;
|
||||||
import com.android.systemui.statusbar.phone.LockscreenGestureLogger;
|
|
||||||
import com.android.systemui.statusbar.phone.ShadeController;
|
|
||||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||||
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.UserInfoController;
|
|
||||||
import com.android.systemui.util.wakelock.SettableWakeLock;
|
import com.android.systemui.util.wakelock.SettableWakeLock;
|
||||||
import com.android.systemui.util.wakelock.WakeLock;
|
import com.android.systemui.util.wakelock.WakeLock;
|
||||||
|
|
||||||
@@ -68,9 +58,13 @@ import java.io.PrintWriter;
|
|||||||
import java.text.NumberFormat;
|
import java.text.NumberFormat;
|
||||||
import java.util.IllegalFormatConversionException;
|
import java.util.IllegalFormatConversionException;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controls the indications and error messages shown on the Keyguard
|
* Controls the indications and error messages shown on the Keyguard
|
||||||
*/
|
*/
|
||||||
|
@Singleton
|
||||||
public class KeyguardIndicationController implements StateListener,
|
public class KeyguardIndicationController implements StateListener,
|
||||||
KeyguardStateController.Callback {
|
KeyguardStateController.Callback {
|
||||||
|
|
||||||
@@ -84,22 +78,17 @@ public class KeyguardIndicationController implements StateListener,
|
|||||||
private static final float BOUNCE_ANIMATION_FINAL_Y = 0f;
|
private static final float BOUNCE_ANIMATION_FINAL_Y = 0f;
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final ShadeController mShadeController;
|
|
||||||
private final AccessibilityController mAccessibilityController;
|
|
||||||
private final KeyguardStateController mKeyguardStateController;
|
private final KeyguardStateController mKeyguardStateController;
|
||||||
private final StatusBarStateController mStatusBarStateController;
|
private final StatusBarStateController mStatusBarStateController;
|
||||||
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||||
private ViewGroup mIndicationArea;
|
private ViewGroup mIndicationArea;
|
||||||
private KeyguardIndicationTextView mTextView;
|
private KeyguardIndicationTextView mTextView;
|
||||||
private final UserManager mUserManager;
|
|
||||||
private final IBatteryStats mBatteryInfo;
|
private final IBatteryStats mBatteryInfo;
|
||||||
private final SettableWakeLock mWakeLock;
|
private final SettableWakeLock mWakeLock;
|
||||||
private final LockPatternUtils mLockPatternUtils;
|
|
||||||
private final DockManager mDockManager;
|
private final DockManager mDockManager;
|
||||||
|
|
||||||
private final LockIcon mLockIcon;
|
private LockscreenLockIconController mLockIconController;
|
||||||
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||||
private LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger();
|
|
||||||
|
|
||||||
private String mRestingIndication;
|
private String mRestingIndication;
|
||||||
private String mAlignmentIndication;
|
private String mAlignmentIndication;
|
||||||
@@ -132,55 +121,25 @@ public class KeyguardIndicationController implements StateListener,
|
|||||||
/**
|
/**
|
||||||
* Creates a new KeyguardIndicationController and registers callbacks.
|
* Creates a new KeyguardIndicationController and registers callbacks.
|
||||||
*/
|
*/
|
||||||
public KeyguardIndicationController(Context context, ViewGroup indicationArea,
|
@Inject
|
||||||
LockIcon lockIcon) {
|
KeyguardIndicationController(Context context,
|
||||||
this(context, indicationArea, lockIcon, new LockPatternUtils(context),
|
WakeLock.Builder wakeLockBuilder,
|
||||||
WakeLock.createPartial(context, "Doze:KeyguardIndication"),
|
|
||||||
Dependency.get(ShadeController.class),
|
|
||||||
Dependency.get(AccessibilityController.class),
|
|
||||||
Dependency.get(KeyguardStateController.class),
|
|
||||||
Dependency.get(StatusBarStateController.class),
|
|
||||||
Dependency.get(KeyguardUpdateMonitor.class),
|
|
||||||
Dependency.get(DockManager.class),
|
|
||||||
IBatteryStats.Stub.asInterface(
|
|
||||||
ServiceManager.getService(BatteryStats.SERVICE_NAME)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new KeyguardIndicationController for testing.
|
|
||||||
*/
|
|
||||||
@VisibleForTesting
|
|
||||||
KeyguardIndicationController(Context context, ViewGroup indicationArea, LockIcon lockIcon,
|
|
||||||
LockPatternUtils lockPatternUtils, WakeLock wakeLock, ShadeController shadeController,
|
|
||||||
AccessibilityController accessibilityController,
|
|
||||||
KeyguardStateController keyguardStateController,
|
KeyguardStateController keyguardStateController,
|
||||||
StatusBarStateController statusBarStateController,
|
StatusBarStateController statusBarStateController,
|
||||||
KeyguardUpdateMonitor keyguardUpdateMonitor,
|
KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||||
DockManager dockManager,
|
DockManager dockManager,
|
||||||
IBatteryStats iBatteryStats) {
|
IBatteryStats iBatteryStats) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mLockIcon = lockIcon;
|
|
||||||
mShadeController = shadeController;
|
|
||||||
mAccessibilityController = accessibilityController;
|
|
||||||
mKeyguardStateController = keyguardStateController;
|
mKeyguardStateController = keyguardStateController;
|
||||||
mStatusBarStateController = statusBarStateController;
|
mStatusBarStateController = statusBarStateController;
|
||||||
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
||||||
mDockManager = dockManager;
|
mDockManager = dockManager;
|
||||||
mDockManager.addAlignmentStateListener(
|
mDockManager.addAlignmentStateListener(
|
||||||
alignState -> mHandler.post(() -> handleAlignStateChanged(alignState)));
|
alignState -> mHandler.post(() -> handleAlignStateChanged(alignState)));
|
||||||
// lock icon is not used on all form factors.
|
mWakeLock = new SettableWakeLock(
|
||||||
if (mLockIcon != null) {
|
wakeLockBuilder.setTag("Doze:KeyguardIndication").build(), TAG);
|
||||||
mLockIcon.setOnLongClickListener(this::handleLockLongClick);
|
|
||||||
mLockIcon.setOnClickListener(this::handleLockClick);
|
|
||||||
}
|
|
||||||
mWakeLock = new SettableWakeLock(wakeLock, TAG);
|
|
||||||
mLockPatternUtils = lockPatternUtils;
|
|
||||||
|
|
||||||
mUserManager = context.getSystemService(UserManager.class);
|
|
||||||
mBatteryInfo = iBatteryStats;
|
mBatteryInfo = iBatteryStats;
|
||||||
|
|
||||||
setIndicationArea(indicationArea);
|
|
||||||
|
|
||||||
mKeyguardUpdateMonitor.registerCallback(getKeyguardCallback());
|
mKeyguardUpdateMonitor.registerCallback(getKeyguardCallback());
|
||||||
mKeyguardUpdateMonitor.registerCallback(mTickReceiver);
|
mKeyguardUpdateMonitor.registerCallback(mTickReceiver);
|
||||||
mStatusBarStateController.addCallback(this);
|
mStatusBarStateController.addCallback(this);
|
||||||
@@ -195,21 +154,8 @@ public class KeyguardIndicationController implements StateListener,
|
|||||||
updateIndication(false /* animate */);
|
updateIndication(false /* animate */);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean handleLockLongClick(View view) {
|
public void setLockIconController(LockscreenLockIconController lockIconController) {
|
||||||
mLockscreenGestureLogger.write(MetricsProto.MetricsEvent.ACTION_LS_LOCK,
|
mLockIconController = lockIconController;
|
||||||
0 /* lengthDp - N/A */, 0 /* velocityDp - N/A */);
|
|
||||||
showTransientIndication(R.string.keyguard_indication_trust_disabled);
|
|
||||||
mKeyguardUpdateMonitor.onLockIconPressed();
|
|
||||||
mLockPatternUtils.requireCredentialEntry(KeyguardUpdateMonitor.getCurrentUser());
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleLockClick(View view) {
|
|
||||||
if (!mAccessibilityController.isAccessibilityEnabled()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mShadeController.animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true /* force */);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleAlignStateChanged(int alignState) {
|
private void handleAlignStateChanged(int alignState) {
|
||||||
@@ -268,12 +214,6 @@ public class KeyguardIndicationController implements StateListener,
|
|||||||
updateIndication(false);
|
updateIndication(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the active controller managing changes and callbacks to user information.
|
|
||||||
*/
|
|
||||||
public void setUserInfoController(UserInfoController userInfoController) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the indication text indicating that trust has been granted.
|
* Returns the indication text indicating that trust has been granted.
|
||||||
*
|
*
|
||||||
@@ -545,7 +485,9 @@ public class KeyguardIndicationController implements StateListener,
|
|||||||
if (msg.what == MSG_HIDE_TRANSIENT) {
|
if (msg.what == MSG_HIDE_TRANSIENT) {
|
||||||
hideTransientIndication();
|
hideTransientIndication();
|
||||||
} else if (msg.what == MSG_CLEAR_BIOMETRIC_MSG) {
|
} else if (msg.what == MSG_CLEAR_BIOMETRIC_MSG) {
|
||||||
mLockIcon.setTransientBiometricsError(false);
|
if (mLockIconController != null) {
|
||||||
|
mLockIconController.setTransientBiometricsError(false);
|
||||||
|
}
|
||||||
} else if (msg.what == MSG_SWIPE_UP_TO_UNLOCK) {
|
} else if (msg.what == MSG_SWIPE_UP_TO_UNLOCK) {
|
||||||
showSwipeUpToUnlock();
|
showSwipeUpToUnlock();
|
||||||
}
|
}
|
||||||
@@ -694,7 +636,9 @@ public class KeyguardIndicationController implements StateListener,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void animatePadlockError() {
|
private void animatePadlockError() {
|
||||||
mLockIcon.setTransientBiometricsError(true);
|
if (mLockIconController != null) {
|
||||||
|
mLockIconController.setTransientBiometricsError(true);
|
||||||
|
}
|
||||||
mHandler.removeMessages(MSG_CLEAR_BIOMETRIC_MSG);
|
mHandler.removeMessages(MSG_CLEAR_BIOMETRIC_MSG);
|
||||||
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_CLEAR_BIOMETRIC_MSG),
|
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_CLEAR_BIOMETRIC_MSG),
|
||||||
TRANSIENT_BIOMETRIC_ERROR_TIMEOUT);
|
TRANSIENT_BIOMETRIC_ERROR_TIMEOUT);
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import android.view.ViewGroup;
|
|||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent;
|
import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent;
|
||||||
import com.android.systemui.statusbar.phone.LockIcon;
|
import com.android.systemui.statusbar.phone.LockIcon;
|
||||||
|
import com.android.systemui.statusbar.phone.LockscreenLockIconController;
|
||||||
import com.android.systemui.statusbar.phone.NotificationPanelView;
|
import com.android.systemui.statusbar.phone.NotificationPanelView;
|
||||||
import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
|
import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
|
||||||
import com.android.systemui.statusbar.phone.StatusBarWindowView;
|
import com.android.systemui.statusbar.phone.StatusBarWindowView;
|
||||||
@@ -41,6 +42,7 @@ public class SuperStatusBarViewFactory {
|
|||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final InjectionInflationController mInjectionInflationController;
|
private final InjectionInflationController mInjectionInflationController;
|
||||||
private final NotificationRowComponent.Builder mNotificationRowComponentBuilder;
|
private final NotificationRowComponent.Builder mNotificationRowComponentBuilder;
|
||||||
|
private final LockscreenLockIconController mLockIconController;
|
||||||
|
|
||||||
private NotificationShadeWindowView mNotificationShadeWindowView;
|
private NotificationShadeWindowView mNotificationShadeWindowView;
|
||||||
private StatusBarWindowView mStatusBarWindowView;
|
private StatusBarWindowView mStatusBarWindowView;
|
||||||
@@ -49,10 +51,12 @@ public class SuperStatusBarViewFactory {
|
|||||||
@Inject
|
@Inject
|
||||||
public SuperStatusBarViewFactory(Context context,
|
public SuperStatusBarViewFactory(Context context,
|
||||||
InjectionInflationController injectionInflationController,
|
InjectionInflationController injectionInflationController,
|
||||||
NotificationRowComponent.Builder notificationRowComponentBuilder) {
|
NotificationRowComponent.Builder notificationRowComponentBuilder,
|
||||||
|
LockscreenLockIconController lockIconController) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mInjectionInflationController = injectionInflationController;
|
mInjectionInflationController = injectionInflationController;
|
||||||
mNotificationRowComponentBuilder = notificationRowComponentBuilder;
|
mNotificationRowComponentBuilder = notificationRowComponentBuilder;
|
||||||
|
mLockIconController = lockIconController;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -73,12 +77,12 @@ public class SuperStatusBarViewFactory {
|
|||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"R.layout.super_notification_shade could not be properly inflated");
|
"R.layout.super_notification_shade could not be properly inflated");
|
||||||
}
|
}
|
||||||
return mNotificationShadeWindowView;
|
LockIcon lockIcon = mNotificationShadeWindowView.findViewById(R.id.lock_icon);
|
||||||
}
|
if (lockIcon != null) {
|
||||||
|
mLockIconController.attach(lockIcon);
|
||||||
|
}
|
||||||
|
|
||||||
/** Gets the {@link LockIcon} inside of {@link R.layout#super_status_bar}. */
|
return mNotificationShadeWindowView;
|
||||||
public LockIcon getLockIcon() {
|
|
||||||
return getNotificationShadeWindowView().findViewById(R.id.lock_icon);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import android.annotation.IntDef;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.TypedArray;
|
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.drawable.Animatable2;
|
import android.graphics.drawable.Animatable2;
|
||||||
import android.graphics.drawable.AnimatedVectorDrawable;
|
import android.graphics.drawable.AnimatedVectorDrawable;
|
||||||
@@ -32,7 +31,6 @@ import android.os.Trace;
|
|||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.view.ViewTreeObserver;
|
import android.view.ViewTreeObserver;
|
||||||
import android.view.accessibility.AccessibilityNodeInfo;
|
import android.view.accessibility.AccessibilityNodeInfo;
|
||||||
|
|
||||||
@@ -45,16 +43,13 @@ 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.dock.DockManager;
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
|
||||||
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.ConfigurationController;
|
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||||
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
|
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
|
||||||
import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChangedListener;
|
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
@@ -65,8 +60,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 OnUserInfoChangedListener,
|
public class LockIcon extends KeyguardAffordanceView implements
|
||||||
StatusBarStateController.StateListener, ConfigurationController.ConfigurationListener,
|
|
||||||
KeyguardStateController.Callback, NotificationWakeUpCoordinator.WakeUpListener,
|
KeyguardStateController.Callback, NotificationWakeUpCoordinator.WakeUpListener,
|
||||||
ViewTreeObserver.OnPreDrawListener, OnHeadsUpChangedListener {
|
ViewTreeObserver.OnPreDrawListener, OnHeadsUpChangedListener {
|
||||||
|
|
||||||
@@ -74,8 +68,6 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
|||||||
private static final int STATE_LOCK_OPEN = 1;
|
private static final int STATE_LOCK_OPEN = 1;
|
||||||
private static final int STATE_SCANNING_FACE = 2;
|
private static final int STATE_SCANNING_FACE = 2;
|
||||||
private static final int STATE_BIOMETRICS_ERROR = 3;
|
private static final int STATE_BIOMETRICS_ERROR = 3;
|
||||||
private final ConfigurationController mConfigurationController;
|
|
||||||
private final StatusBarStateController mStatusBarStateController;
|
|
||||||
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||||
private final AccessibilityController mAccessibilityController;
|
private final AccessibilityController mAccessibilityController;
|
||||||
private final DockManager mDockManager;
|
private final DockManager mDockManager;
|
||||||
@@ -103,6 +95,7 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
|||||||
private boolean mKeyguardJustShown;
|
private boolean mKeyguardJustShown;
|
||||||
private boolean mUpdatePending;
|
private boolean mUpdatePending;
|
||||||
private boolean mBouncerPreHideAnimation;
|
private boolean mBouncerPreHideAnimation;
|
||||||
|
private int mStatusBarState = StatusBarState.SHADE;
|
||||||
|
|
||||||
private final KeyguardStateController.Callback mKeyguardMonitorCallback =
|
private final KeyguardStateController.Callback mKeyguardMonitorCallback =
|
||||||
new KeyguardStateController.Callback() {
|
new KeyguardStateController.Callback() {
|
||||||
@@ -177,8 +170,6 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public LockIcon(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
|
public LockIcon(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
|
||||||
StatusBarStateController statusBarStateController,
|
|
||||||
ConfigurationController configurationController,
|
|
||||||
AccessibilityController accessibilityController,
|
AccessibilityController accessibilityController,
|
||||||
KeyguardBypassController bypassController,
|
KeyguardBypassController bypassController,
|
||||||
NotificationWakeUpCoordinator wakeUpCoordinator,
|
NotificationWakeUpCoordinator wakeUpCoordinator,
|
||||||
@@ -189,8 +180,6 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
|||||||
mContext = context;
|
mContext = context;
|
||||||
mKeyguardUpdateMonitor = Dependency.get(KeyguardUpdateMonitor.class);
|
mKeyguardUpdateMonitor = Dependency.get(KeyguardUpdateMonitor.class);
|
||||||
mAccessibilityController = accessibilityController;
|
mAccessibilityController = accessibilityController;
|
||||||
mConfigurationController = configurationController;
|
|
||||||
mStatusBarStateController = statusBarStateController;
|
|
||||||
mBypassController = bypassController;
|
mBypassController = bypassController;
|
||||||
mWakeUpCoordinator = wakeUpCoordinator;
|
mWakeUpCoordinator = wakeUpCoordinator;
|
||||||
mKeyguardStateController = keyguardStateController;
|
mKeyguardStateController = keyguardStateController;
|
||||||
@@ -201,8 +190,6 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
|||||||
@Override
|
@Override
|
||||||
protected void onAttachedToWindow() {
|
protected void onAttachedToWindow() {
|
||||||
super.onAttachedToWindow();
|
super.onAttachedToWindow();
|
||||||
mStatusBarStateController.addCallback(this);
|
|
||||||
mConfigurationController.addCallback(this);
|
|
||||||
mKeyguardStateController.addCallback(mKeyguardMonitorCallback);
|
mKeyguardStateController.addCallback(mKeyguardMonitorCallback);
|
||||||
mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
|
mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
|
||||||
mWakeUpCoordinator.addListener(this);
|
mWakeUpCoordinator.addListener(this);
|
||||||
@@ -210,15 +197,12 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
|||||||
if (mDockManager != null) {
|
if (mDockManager != null) {
|
||||||
mDockManager.addListener(mDockEventListener);
|
mDockManager.addListener(mDockEventListener);
|
||||||
}
|
}
|
||||||
onThemeChanged();
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDetachedFromWindow() {
|
protected void onDetachedFromWindow() {
|
||||||
super.onDetachedFromWindow();
|
super.onDetachedFromWindow();
|
||||||
mStatusBarStateController.removeCallback(this);
|
|
||||||
mConfigurationController.removeCallback(this);
|
|
||||||
mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback);
|
mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback);
|
||||||
mKeyguardStateController.removeCallback(mKeyguardMonitorCallback);
|
mKeyguardStateController.removeCallback(mKeyguardMonitorCallback);
|
||||||
mWakeUpCoordinator.removeListener(this);
|
mWakeUpCoordinator.removeListener(this);
|
||||||
@@ -227,20 +211,6 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onThemeChanged() {
|
|
||||||
TypedArray typedArray = mContext.getTheme().obtainStyledAttributes(
|
|
||||||
null, new int[]{ R.attr.wallpaperTextColor }, 0, 0);
|
|
||||||
mIconColor = typedArray.getColor(0, Color.WHITE);
|
|
||||||
typedArray.recycle();
|
|
||||||
updateDarkTint();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onUserInfoChanged(String name, Drawable picture, String userAccount) {
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If we're currently presenting an authentication error message.
|
* If we're currently presenting an authentication error message.
|
||||||
*/
|
*/
|
||||||
@@ -342,7 +312,7 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
|||||||
|| mShowingLaunchAffordance;
|
|| mShowingLaunchAffordance;
|
||||||
if (mBypassController.getBypassEnabled() && !mBouncerShowingScrimmed) {
|
if (mBypassController.getBypassEnabled() && !mBouncerShowingScrimmed) {
|
||||||
if ((mHeadsUpManager.isHeadsUpGoingAway() || mHeadsUpManager.hasPinnedHeadsUp()
|
if ((mHeadsUpManager.isHeadsUpGoingAway() || mHeadsUpManager.hasPinnedHeadsUp()
|
||||||
|| mStatusBarStateController.getState() == StatusBarState.KEYGUARD)
|
|| mStatusBarState == StatusBarState.KEYGUARD)
|
||||||
&& !mWakeUpCoordinator.getNotificationsFullyHidden()) {
|
&& !mWakeUpCoordinator.getNotificationsFullyHidden()) {
|
||||||
invisible = true;
|
invisible = true;
|
||||||
}
|
}
|
||||||
@@ -479,6 +449,11 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setIconColor(int iconColor) {
|
||||||
|
mIconColor = iconColor;
|
||||||
|
updateDarkTint();
|
||||||
|
}
|
||||||
|
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
@IntDef({ERROR, UNLOCK, LOCK, SCANNING})
|
@IntDef({ERROR, UNLOCK, LOCK, SCANNING})
|
||||||
@interface LockAnimIndex {}
|
@interface LockAnimIndex {}
|
||||||
@@ -538,12 +513,6 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDozeAmountChanged(float linear, float eased) {
|
|
||||||
mDozeAmount = eased;
|
|
||||||
updateDarkTint();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When keyguard is in pulsing (AOD2) state.
|
* When keyguard is in pulsing (AOD2) state.
|
||||||
* @param pulsing {@code true} when pulsing.
|
* @param pulsing {@code true} when pulsing.
|
||||||
@@ -553,38 +522,11 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the dozing state of the keyguard.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onDozingChanged(boolean dozing) {
|
|
||||||
mDozing = dozing;
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateDarkTint() {
|
private void updateDarkTint() {
|
||||||
int color = ColorUtils.blendARGB(mIconColor, Color.WHITE, mDozeAmount);
|
int color = ColorUtils.blendARGB(mIconColor, Color.WHITE, mDozeAmount);
|
||||||
setImageTintList(ColorStateList.valueOf(color));
|
setImageTintList(ColorStateList.valueOf(color));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDensityOrFontScaleChanged() {
|
|
||||||
ViewGroup.LayoutParams lp = getLayoutParams();
|
|
||||||
if (lp == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
lp.width = getResources().getDimensionPixelSize(R.dimen.keyguard_lock_width);
|
|
||||||
lp.height = getResources().getDimensionPixelSize(R.dimen.keyguard_lock_height);
|
|
||||||
setLayoutParams(lp);
|
|
||||||
update(true /* force */);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLocaleListChanged() {
|
|
||||||
setContentDescription(getContext().getText(R.string.accessibility_unlock_button));
|
|
||||||
update(true /* force */);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We need to hide the lock whenever there's a fingerprint unlock, otherwise you'll see the
|
* 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.
|
* icon on top of the black front scrim.
|
||||||
@@ -620,4 +562,20 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setDozing(boolean dozing) {
|
||||||
|
mDozing = dozing;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setDozeAmount(float dozeAmount) {
|
||||||
|
mDozeAmount = dozeAmount;
|
||||||
|
updateDarkTint();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set the StatusBarState. */
|
||||||
|
public void setStatusBarState(int statusBarState) {
|
||||||
|
mStatusBarState = statusBarState;
|
||||||
|
updateIconVisibility();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,21 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar.phone;
|
package com.android.systemui.statusbar.phone;
|
||||||
|
|
||||||
import com.android.systemui.statusbar.SuperStatusBarViewFactory;
|
import android.content.res.TypedArray;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
|
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||||
|
import com.android.systemui.R;
|
||||||
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
|
import com.android.systemui.statusbar.KeyguardIndicationController;
|
||||||
|
import com.android.systemui.statusbar.policy.AccessibilityController;
|
||||||
|
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||||
|
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
@@ -25,11 +39,121 @@ import javax.inject.Singleton;
|
|||||||
@Singleton
|
@Singleton
|
||||||
public class LockscreenLockIconController {
|
public class LockscreenLockIconController {
|
||||||
|
|
||||||
private final LockIcon mLockIcon;
|
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 LockIcon mLockIcon;
|
||||||
|
|
||||||
|
private View.OnAttachStateChangeListener mOnAttachStateChangeListener =
|
||||||
|
new View.OnAttachStateChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onViewAttachedToWindow(View v) {
|
||||||
|
mStatusBarStateController.addCallback(mSBStateListener);
|
||||||
|
mConfigurationController.addCallback(mConfigurationListener);
|
||||||
|
|
||||||
|
mConfigurationListener.onThemeChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onViewDetachedFromWindow(View v) {
|
||||||
|
mStatusBarStateController.removeCallback(mSBStateListener);
|
||||||
|
mConfigurationController.removeCallback(mConfigurationListener);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private final StatusBarStateController.StateListener mSBStateListener =
|
||||||
|
new StatusBarStateController.StateListener() {
|
||||||
|
@Override
|
||||||
|
public void onDozingChanged(boolean isDozing) {
|
||||||
|
mLockIcon.setDozing(isDozing);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDozeAmountChanged(float linear, float eased) {
|
||||||
|
mLockIcon.setDozeAmount(eased);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStateChanged(int newState) {
|
||||||
|
mLockIcon.setStatusBarState(newState);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private final ConfigurationListener mConfigurationListener = new ConfigurationListener() {
|
||||||
|
@Override
|
||||||
|
public void onThemeChanged() {
|
||||||
|
TypedArray typedArray = mLockIcon.getContext().getTheme().obtainStyledAttributes(
|
||||||
|
null, new int[]{ R.attr.wallpaperTextColor }, 0, 0);
|
||||||
|
int iconColor = typedArray.getColor(0, Color.WHITE);
|
||||||
|
typedArray.recycle();
|
||||||
|
mLockIcon.setIconColor(iconColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDensityOrFontScaleChanged() {
|
||||||
|
ViewGroup.LayoutParams lp = mLockIcon.getLayoutParams();
|
||||||
|
if (lp == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
lp.width = mLockIcon.getResources().getDimensionPixelSize(R.dimen.keyguard_lock_width);
|
||||||
|
lp.height = mLockIcon.getResources().getDimensionPixelSize(
|
||||||
|
R.dimen.keyguard_lock_height);
|
||||||
|
mLockIcon.setLayoutParams(lp);
|
||||||
|
mLockIcon.update(true /* force */);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLocaleListChanged() {
|
||||||
|
mLockIcon.setContentDescription(
|
||||||
|
mLockIcon.getResources().getText(R.string.accessibility_unlock_button));
|
||||||
|
mLockIcon.update(true /* force */);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public LockscreenLockIconController(SuperStatusBarViewFactory superStatusBarViewFactory) {
|
public LockscreenLockIconController(LockscreenGestureLogger lockscreenGestureLogger,
|
||||||
mLockIcon = superStatusBarViewFactory.getLockIcon();
|
KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||||
|
LockPatternUtils lockPatternUtils,
|
||||||
|
ShadeController shadeController,
|
||||||
|
AccessibilityController accessibilityController,
|
||||||
|
KeyguardIndicationController keyguardIndicationController,
|
||||||
|
StatusBarStateController statusBarStateController,
|
||||||
|
ConfigurationController configurationController) {
|
||||||
|
mLockscreenGestureLogger = lockscreenGestureLogger;
|
||||||
|
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
||||||
|
mLockPatternUtils = lockPatternUtils;
|
||||||
|
mShadeController = shadeController;
|
||||||
|
mAccessibilityController = accessibilityController;
|
||||||
|
mKeyguardIndicationController = keyguardIndicationController;
|
||||||
|
mStatusBarStateController = statusBarStateController;
|
||||||
|
mConfigurationController = configurationController;
|
||||||
|
|
||||||
|
mKeyguardIndicationController.setLockIconController(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Associate the controller with a {@link LockIcon}
|
||||||
|
*/
|
||||||
|
public void attach(LockIcon lockIcon) {
|
||||||
|
mLockIcon = lockIcon;
|
||||||
|
|
||||||
|
mLockIcon.setOnClickListener(this::handleClick);
|
||||||
|
mLockIcon.setOnLongClickListener(this::handleLongClick);
|
||||||
|
|
||||||
|
if (mLockIcon.isAttachedToWindow()) {
|
||||||
|
mOnAttachStateChangeListener.onViewAttachedToWindow(mLockIcon);
|
||||||
|
}
|
||||||
|
mLockIcon.addOnAttachStateChangeListener(mOnAttachStateChangeListener);
|
||||||
|
mLockIcon.setStatusBarState(mStatusBarStateController.getState());
|
||||||
|
}
|
||||||
|
|
||||||
|
public LockIcon getView() {
|
||||||
|
return mLockIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -86,4 +210,32 @@ public class LockscreenLockIconController {
|
|||||||
mLockIcon.onBouncerPreHideAnimation();
|
mLockIcon.onBouncerPreHideAnimation();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If we're currently presenting an authentication error message.
|
||||||
|
*/
|
||||||
|
public void setTransientBiometricsError(boolean transientBiometricsError) {
|
||||||
|
if (mLockIcon != null) {
|
||||||
|
mLockIcon.setTransientBiometricsError(transientBiometricsError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean handleLongClick(View view) {
|
||||||
|
mLockscreenGestureLogger.write(MetricsProto.MetricsEvent.ACTION_LS_LOCK,
|
||||||
|
0 /* lengthDp - N/A */, 0 /* velocityDp - N/A */);
|
||||||
|
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 */);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -678,6 +678,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
|||||||
ExtensionController extensionController,
|
ExtensionController extensionController,
|
||||||
UserInfoControllerImpl userInfoControllerImpl,
|
UserInfoControllerImpl userInfoControllerImpl,
|
||||||
PhoneStatusBarPolicy phoneStatusBarPolicy,
|
PhoneStatusBarPolicy phoneStatusBarPolicy,
|
||||||
|
KeyguardIndicationController keyguardIndicationController,
|
||||||
DismissCallbackRegistry dismissCallbackRegistry,
|
DismissCallbackRegistry dismissCallbackRegistry,
|
||||||
StatusBarTouchableRegionManager statusBarTouchableRegionManager) {
|
StatusBarTouchableRegionManager statusBarTouchableRegionManager) {
|
||||||
super(context);
|
super(context);
|
||||||
@@ -691,6 +692,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
|||||||
mKeyguardBypassController = keyguardBypassController;
|
mKeyguardBypassController = keyguardBypassController;
|
||||||
mKeyguardStateController = keyguardStateController;
|
mKeyguardStateController = keyguardStateController;
|
||||||
mHeadsUpManager = headsUpManagerPhone;
|
mHeadsUpManager = headsUpManagerPhone;
|
||||||
|
mKeyguardIndicationController = keyguardIndicationController;
|
||||||
mStatusBarTouchableRegionManager = statusBarTouchableRegionManager;
|
mStatusBarTouchableRegionManager = statusBarTouchableRegionManager;
|
||||||
mDynamicPrivacyController = dynamicPrivacyController;
|
mDynamicPrivacyController = dynamicPrivacyController;
|
||||||
mBypassHeadsUpNotifier = bypassHeadsUpNotifier;
|
mBypassHeadsUpNotifier = bypassHeadsUpNotifier;
|
||||||
@@ -1049,10 +1051,8 @@ public class StatusBar extends SystemUI implements DemoMode,
|
|||||||
mLockscreenWallpaper = mLockscreenWallpaperLazy.get();
|
mLockscreenWallpaper = mLockscreenWallpaperLazy.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
mKeyguardIndicationController =
|
mKeyguardIndicationController.setIndicationArea(
|
||||||
SystemUIFactory.getInstance().createKeyguardIndicationController(mContext,
|
mNotificationShadeWindowView.findViewById(R.id.keyguard_indication_area));
|
||||||
mNotificationShadeWindowView.findViewById(R.id.keyguard_indication_area),
|
|
||||||
mNotificationShadeWindowView.findViewById(R.id.lock_icon));
|
|
||||||
mNotificationPanelViewController.setKeyguardIndicationController(
|
mNotificationPanelViewController.setKeyguardIndicationController(
|
||||||
mKeyguardIndicationController);
|
mKeyguardIndicationController);
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ import com.android.systemui.recents.ScreenPinningRequest;
|
|||||||
import com.android.systemui.shared.plugins.PluginManager;
|
import com.android.systemui.shared.plugins.PluginManager;
|
||||||
import com.android.systemui.stackdivider.Divider;
|
import com.android.systemui.stackdivider.Divider;
|
||||||
import com.android.systemui.statusbar.CommandQueue;
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
|
import com.android.systemui.statusbar.KeyguardIndicationController;
|
||||||
import com.android.systemui.statusbar.NavigationBarController;
|
import com.android.systemui.statusbar.NavigationBarController;
|
||||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
||||||
import com.android.systemui.statusbar.NotificationMediaManager;
|
import com.android.systemui.statusbar.NotificationMediaManager;
|
||||||
@@ -195,6 +196,7 @@ public interface StatusBarPhoneModule {
|
|||||||
ExtensionController extensionController,
|
ExtensionController extensionController,
|
||||||
UserInfoControllerImpl userInfoControllerImpl,
|
UserInfoControllerImpl userInfoControllerImpl,
|
||||||
PhoneStatusBarPolicy phoneStatusBarPolicy,
|
PhoneStatusBarPolicy phoneStatusBarPolicy,
|
||||||
|
KeyguardIndicationController keyguardIndicationController,
|
||||||
DismissCallbackRegistry dismissCallbackRegistry,
|
DismissCallbackRegistry dismissCallbackRegistry,
|
||||||
StatusBarTouchableRegionManager statusBarTouchableRegionManager) {
|
StatusBarTouchableRegionManager statusBarTouchableRegionManager) {
|
||||||
return new StatusBar(
|
return new StatusBar(
|
||||||
@@ -272,6 +274,7 @@ public interface StatusBarPhoneModule {
|
|||||||
extensionController,
|
extensionController,
|
||||||
userInfoControllerImpl,
|
userInfoControllerImpl,
|
||||||
phoneStatusBarPolicy,
|
phoneStatusBarPolicy,
|
||||||
|
keyguardIndicationController,
|
||||||
dismissCallbackRegistry,
|
dismissCallbackRegistry,
|
||||||
statusBarTouchableRegionManager);
|
statusBarTouchableRegionManager);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ import androidx.annotation.VisibleForTesting;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
/** WakeLock wrapper for testability */
|
/** WakeLock wrapper for testability */
|
||||||
public interface WakeLock {
|
public interface WakeLock {
|
||||||
|
|
||||||
@@ -121,4 +123,32 @@ public interface WakeLock {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An injectable Builder that wraps {@link #createPartial(Context, String, long)}.
|
||||||
|
*/
|
||||||
|
class Builder {
|
||||||
|
private final Context mContext;
|
||||||
|
private String mTag;
|
||||||
|
private long mMaxTimeout = DEFAULT_MAX_TIMEOUT;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public Builder(Context context) {
|
||||||
|
mContext = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setTag(String tag) {
|
||||||
|
this.mTag = tag;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setMaxTimeout(long maxTimeout) {
|
||||||
|
this.mMaxTimeout = maxTimeout;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public WakeLock build() {
|
||||||
|
return WakeLock.createPartial(mContext, mTag, mMaxTimeout);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ import com.android.systemui.statusbar.notification.row.NotificationTestHelper;
|
|||||||
import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent;
|
import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent;
|
||||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||||
|
import com.android.systemui.statusbar.phone.LockscreenLockIconController;
|
||||||
import com.android.systemui.statusbar.phone.NotificationGroupManager;
|
import com.android.systemui.statusbar.phone.NotificationGroupManager;
|
||||||
import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
|
import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
|
||||||
import com.android.systemui.statusbar.phone.ShadeController;
|
import com.android.systemui.statusbar.phone.ShadeController;
|
||||||
@@ -170,6 +171,8 @@ public class BubbleControllerTest extends SysuiTestCase {
|
|||||||
private FeatureFlags mFeatureFlagsOldPipeline;
|
private FeatureFlags mFeatureFlagsOldPipeline;
|
||||||
@Mock
|
@Mock
|
||||||
private DumpManager mDumpManager;
|
private DumpManager mDumpManager;
|
||||||
|
@Mock
|
||||||
|
private LockscreenLockIconController mLockIconController;
|
||||||
|
|
||||||
private SuperStatusBarViewFactory mSuperStatusBarViewFactory;
|
private SuperStatusBarViewFactory mSuperStatusBarViewFactory;
|
||||||
private BubbleData mBubbleData;
|
private BubbleData mBubbleData;
|
||||||
@@ -198,7 +201,8 @@ public class BubbleControllerTest extends SysuiTestCase {
|
|||||||
public NotificationRowComponent build() {
|
public NotificationRowComponent build() {
|
||||||
return mNotificationRowComponent;
|
return mNotificationRowComponent;
|
||||||
}
|
}
|
||||||
});
|
},
|
||||||
|
mLockIconController);
|
||||||
|
|
||||||
// Bubbles get added to status bar window view
|
// Bubbles get added to status bar window view
|
||||||
mNotificationShadeWindowController = new NotificationShadeWindowController(mContext,
|
mNotificationShadeWindowController = new NotificationShadeWindowController(mContext,
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ import com.android.systemui.statusbar.notification.row.NotificationTestHelper;
|
|||||||
import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent;
|
import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent;
|
||||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||||
|
import com.android.systemui.statusbar.phone.LockscreenLockIconController;
|
||||||
import com.android.systemui.statusbar.phone.NotificationGroupManager;
|
import com.android.systemui.statusbar.phone.NotificationGroupManager;
|
||||||
import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
|
import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
|
||||||
import com.android.systemui.statusbar.phone.ShadeController;
|
import com.android.systemui.statusbar.phone.ShadeController;
|
||||||
@@ -164,6 +165,8 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
|
|||||||
private FeatureFlags mFeatureFlagsNewPipeline;
|
private FeatureFlags mFeatureFlagsNewPipeline;
|
||||||
@Mock
|
@Mock
|
||||||
private DumpManager mDumpManager;
|
private DumpManager mDumpManager;
|
||||||
|
@Mock
|
||||||
|
private LockscreenLockIconController mLockIconController;
|
||||||
|
|
||||||
private SuperStatusBarViewFactory mSuperStatusBarViewFactory;
|
private SuperStatusBarViewFactory mSuperStatusBarViewFactory;
|
||||||
private BubbleData mBubbleData;
|
private BubbleData mBubbleData;
|
||||||
@@ -192,7 +195,8 @@ public class NewNotifPipelineBubbleControllerTest extends SysuiTestCase {
|
|||||||
public NotificationRowComponent build() {
|
public NotificationRowComponent build() {
|
||||||
return mNotificationRowComponent;
|
return mNotificationRowComponent;
|
||||||
}
|
}
|
||||||
});
|
},
|
||||||
|
mLockIconController);
|
||||||
|
|
||||||
// Bubbles get added to status bar window view
|
// Bubbles get added to status bar window view
|
||||||
mNotificationShadeWindowController = new NotificationShadeWindowController(mContext,
|
mNotificationShadeWindowController = new NotificationShadeWindowController(mContext,
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ import android.os.BatteryManager;
|
|||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import androidx.test.InstrumentationRegistry;
|
import androidx.test.InstrumentationRegistry;
|
||||||
@@ -52,7 +51,6 @@ import androidx.test.filters.SmallTest;
|
|||||||
import androidx.test.runner.AndroidJUnit4;
|
import androidx.test.runner.AndroidJUnit4;
|
||||||
|
|
||||||
import com.android.internal.app.IBatteryStats;
|
import com.android.internal.app.IBatteryStats;
|
||||||
import com.android.internal.widget.LockPatternUtils;
|
|
||||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||||
import com.android.settingslib.Utils;
|
import com.android.settingslib.Utils;
|
||||||
import com.android.settingslib.fuelgauge.BatteryStatus;
|
import com.android.settingslib.fuelgauge.BatteryStatus;
|
||||||
@@ -61,10 +59,7 @@ import com.android.systemui.SysuiTestCase;
|
|||||||
import com.android.systemui.dock.DockManager;
|
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.phone.KeyguardIndicationTextView;
|
import com.android.systemui.statusbar.phone.KeyguardIndicationTextView;
|
||||||
import com.android.systemui.statusbar.phone.LockIcon;
|
|
||||||
import com.android.systemui.statusbar.phone.ShadeController;
|
|
||||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||||
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.util.wakelock.WakeLockFake;
|
import com.android.systemui.util.wakelock.WakeLockFake;
|
||||||
|
|
||||||
@@ -85,14 +80,6 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
|
|||||||
@Mock
|
@Mock
|
||||||
private ViewGroup mIndicationArea;
|
private ViewGroup mIndicationArea;
|
||||||
@Mock
|
@Mock
|
||||||
private LockIcon mLockIcon;
|
|
||||||
@Mock
|
|
||||||
private LockPatternUtils mLockPatternUtils;
|
|
||||||
@Mock
|
|
||||||
private ShadeController mShadeController;
|
|
||||||
@Mock
|
|
||||||
private AccessibilityController mAccessibilityController;
|
|
||||||
@Mock
|
|
||||||
private KeyguardStateController mKeyguardStateController;
|
private KeyguardStateController mKeyguardStateController;
|
||||||
@Mock
|
@Mock
|
||||||
private StatusBarStateController mStatusBarStateController;
|
private StatusBarStateController mStatusBarStateController;
|
||||||
@@ -111,6 +98,7 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
|
|||||||
private KeyguardIndicationTextView mTextView;
|
private KeyguardIndicationTextView mTextView;
|
||||||
|
|
||||||
private KeyguardIndicationController mController;
|
private KeyguardIndicationController mController;
|
||||||
|
private WakeLockFake.Builder mWakeLockBuilder;
|
||||||
private WakeLockFake mWakeLock;
|
private WakeLockFake mWakeLock;
|
||||||
private Instrumentation mInstrumentation;
|
private Instrumentation mInstrumentation;
|
||||||
|
|
||||||
@@ -131,16 +119,19 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
|
|||||||
when(mIndicationArea.findViewById(R.id.keyguard_indication_text)).thenReturn(mTextView);
|
when(mIndicationArea.findViewById(R.id.keyguard_indication_text)).thenReturn(mTextView);
|
||||||
|
|
||||||
mWakeLock = new WakeLockFake();
|
mWakeLock = new WakeLockFake();
|
||||||
|
mWakeLockBuilder = new WakeLockFake.Builder(mContext);
|
||||||
|
mWakeLockBuilder.setWakeLock(mWakeLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createController() {
|
private void createController() {
|
||||||
if (Looper.myLooper() == null) {
|
if (Looper.myLooper() == null) {
|
||||||
Looper.prepare();
|
Looper.prepare();
|
||||||
}
|
}
|
||||||
mController = new KeyguardIndicationController(mContext, mIndicationArea, mLockIcon,
|
|
||||||
mLockPatternUtils, mWakeLock, mShadeController, mAccessibilityController,
|
mController = new KeyguardIndicationController(mContext, mWakeLockBuilder,
|
||||||
mKeyguardStateController, mStatusBarStateController, mKeyguardUpdateMonitor,
|
mKeyguardStateController, mStatusBarStateController, mKeyguardUpdateMonitor,
|
||||||
mDockManager, mIBatteryStats);
|
mDockManager, mIBatteryStats);
|
||||||
|
mController.setIndicationArea(mIndicationArea);
|
||||||
mController.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager);
|
mController.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager);
|
||||||
clearInvocations(mIBatteryStats);
|
clearInvocations(mIBatteryStats);
|
||||||
}
|
}
|
||||||
@@ -318,26 +309,6 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
|
|||||||
verify(mStatusBarKeyguardViewManager).showBouncerMessage(eq(message), any());
|
verify(mStatusBarKeyguardViewManager).showBouncerMessage(eq(message), any());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void lockIcon_click() {
|
|
||||||
createController();
|
|
||||||
|
|
||||||
ArgumentCaptor<View.OnLongClickListener> longClickCaptor = ArgumentCaptor.forClass(
|
|
||||||
View.OnLongClickListener.class);
|
|
||||||
ArgumentCaptor<View.OnClickListener> clickCaptor = ArgumentCaptor.forClass(
|
|
||||||
View.OnClickListener.class);
|
|
||||||
verify(mLockIcon).setOnLongClickListener(longClickCaptor.capture());
|
|
||||||
verify(mLockIcon).setOnClickListener(clickCaptor.capture());
|
|
||||||
|
|
||||||
when(mAccessibilityController.isAccessibilityEnabled()).thenReturn(true);
|
|
||||||
clickCaptor.getValue().onClick(mLockIcon);
|
|
||||||
verify(mShadeController).animateCollapsePanels(anyInt(), eq(true));
|
|
||||||
|
|
||||||
longClickCaptor.getValue().onLongClick(mLockIcon);
|
|
||||||
verify(mLockPatternUtils).requireCredentialEntry(anyInt());
|
|
||||||
verify(mKeyguardUpdateMonitor).onLockIconPressed();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateMonitor_listenerUpdatesIndication() {
|
public void updateMonitor_listenerUpdatesIndication() {
|
||||||
createController();
|
createController();
|
||||||
|
|||||||
@@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
* 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.view.View;
|
||||||
|
|
||||||
|
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.plugins.statusbar.StatusBarStateController;
|
||||||
|
import com.android.systemui.statusbar.KeyguardIndicationController;
|
||||||
|
import com.android.systemui.statusbar.policy.AccessibilityController;
|
||||||
|
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.ArgumentCaptor;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.MockitoAnnotations;
|
||||||
|
|
||||||
|
@SmallTest
|
||||||
|
@RunWith(AndroidJUnit4.class)
|
||||||
|
public class LockscreenIconControllerTest extends SysuiTestCase {
|
||||||
|
private LockscreenLockIconController mLockIconController;
|
||||||
|
@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; // TODO: make this not a mock once inject is removed.
|
||||||
|
@Mock
|
||||||
|
private StatusBarStateController mStatusBarStateController;
|
||||||
|
@Mock
|
||||||
|
private ConfigurationController mConfigurationController;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
|
mLockIconController = new LockscreenLockIconController(
|
||||||
|
mLockscreenGestureLogger, mKeyguardUpdateMonitor, mLockPatternUtils,
|
||||||
|
mShadeController, mAccessibilityController, mKeyguardIndicationController,
|
||||||
|
mStatusBarStateController, mConfigurationController);
|
||||||
|
|
||||||
|
mLockIconController.attach(mLockIcon);
|
||||||
|
}
|
||||||
|
|
||||||
|
@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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -402,6 +402,7 @@ public class StatusBarTest extends SysuiTestCase {
|
|||||||
mExtensionController,
|
mExtensionController,
|
||||||
mUserInfoControllerImpl,
|
mUserInfoControllerImpl,
|
||||||
mPhoneStatusBarPolicy,
|
mPhoneStatusBarPolicy,
|
||||||
|
mKeyguardIndicationController,
|
||||||
mDismissCallbackRegistry,
|
mDismissCallbackRegistry,
|
||||||
mStatusBarTouchableRegionManager);
|
mStatusBarTouchableRegionManager);
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.systemui.util.wakelock;
|
package com.android.systemui.util.wakelock;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
import com.android.internal.util.Preconditions;
|
import com.android.internal.util.Preconditions;
|
||||||
|
|
||||||
public class WakeLockFake implements WakeLock {
|
public class WakeLockFake implements WakeLock {
|
||||||
@@ -48,4 +50,24 @@ public class WakeLockFake implements WakeLock {
|
|||||||
public boolean isHeld() {
|
public boolean isHeld() {
|
||||||
return mAcquired > 0;
|
return mAcquired > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class Builder extends WakeLock.Builder {
|
||||||
|
private WakeLock mWakeLock;
|
||||||
|
|
||||||
|
public Builder(Context context) {
|
||||||
|
super(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWakeLock(WakeLock wakeLock) {
|
||||||
|
mWakeLock = wakeLock;
|
||||||
|
}
|
||||||
|
|
||||||
|
public WakeLock build() {
|
||||||
|
if (mWakeLock != null) {
|
||||||
|
return mWakeLock;
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user