Disable the keyguard when in car mode
BUG: 2367912
Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/services/java/com/android/server/UiModeManagerService.java b/services/java/com/android/server/UiModeManagerService.java
index e225edb..90a0e58 100644
--- a/services/java/com/android/server/UiModeManagerService.java
+++ b/services/java/com/android/server/UiModeManagerService.java
@@ -20,6 +20,7 @@
import android.app.ActivityManagerNative;
import android.app.AlarmManager;
import android.app.IActivityManager;
+import android.app.KeyguardManager;
import android.app.IUiModeManager;
import android.app.Notification;
import android.app.NotificationManager;
@@ -94,6 +95,7 @@
private LocationManager mLocationManager;
private Location mLocation;
private StatusBarManager mStatusBarManager;
+ private KeyguardManager.KeyguardLock mKeyguardLock;
// The broadcast receiver which receives the result of the ordered broadcast sent when
// the dock state changes. The original ordered broadcast is sent with an initial result
@@ -242,6 +244,9 @@
public void disableCarMode() {
synchronized (mLock) {
setCarModeLocked(false);
+ if (mSystemReady) {
+ updateLocked();
+ }
}
}
@@ -251,6 +256,9 @@
"Need ENABLE_CAR_MODE permission");
synchronized (mLock) {
setCarModeLocked(true);
+ if (mSystemReady) {
+ updateLocked();
+ }
}
}
@@ -301,7 +309,22 @@
void setCarModeLocked(boolean enabled) {
if (mCarModeEnabled != enabled) {
mCarModeEnabled = enabled;
- updateLocked();
+
+ // Disable keyguard when in car mode
+ if (mKeyguardLock == null) {
+ KeyguardManager km =
+ (KeyguardManager)mContext.getSystemService(Context.KEYGUARD_SERVICE);
+ if (km != null) {
+ mKeyguardLock = km.newKeyguardLock(TAG);
+ }
+ }
+ if (mKeyguardLock != null) {
+ if (enabled) {
+ mKeyguardLock.disableKeyguard();
+ } else {
+ mKeyguardLock.reenableKeyguard();
+ }
+ }
}
}
@@ -309,7 +332,7 @@
synchronized (mLock) {
if (newState != mDockState) {
mDockState = newState;
- mCarModeEnabled = mDockState == Intent.EXTRA_DOCK_STATE_CAR;
+ setCarModeLocked(mDockState == Intent.EXTRA_DOCK_STATE_CAR);
if (mSystemReady) {
updateLocked();
}