diff options
author | Mike Lockwood <lockwood@android.com> | 2009-09-28 19:08:53 -0400 |
---|---|---|
committer | Mike Lockwood <lockwood@android.com> | 2009-09-28 19:21:07 -0400 |
commit | 733fdf34b6a8a8e3983ff7663828a928d3c19944 (patch) | |
tree | 22538d8c3637e1296e297492b7f1ae1f9fa07514 /services | |
parent | c031981f2320aa592aa819f4b0a22d0da6e7d5e4 (diff) | |
download | frameworks_base-733fdf34b6a8a8e3983ff7663828a928d3c19944.zip frameworks_base-733fdf34b6a8a8e3983ff7663828a928d3c19944.tar.gz frameworks_base-733fdf34b6a8a8e3983ff7663828a928d3c19944.tar.bz2 |
Disable keyguard while docked when the lock screen is insecure.
Change-Id: If6e11bb49a2cbbe904517e6037d1e8b99fe2717c
Signed-off-by: Mike Lockwood <lockwood@android.com>
Diffstat (limited to 'services')
-rw-r--r-- | services/java/com/android/server/DockObserver.java | 29 | ||||
-rw-r--r-- | services/java/com/android/server/WindowManagerService.java | 6 |
2 files changed, 31 insertions, 4 deletions
diff --git a/services/java/com/android/server/DockObserver.java b/services/java/com/android/server/DockObserver.java index a70134d..aa9c243 100644 --- a/services/java/com/android/server/DockObserver.java +++ b/services/java/com/android/server/DockObserver.java @@ -17,6 +17,7 @@ package com.android.server; import android.app.Activity; +import android.app.KeyguardManager; import android.content.ActivityNotFoundException; import android.content.BroadcastReceiver; import android.content.Context; @@ -27,6 +28,8 @@ import android.os.SystemClock; import android.os.UEventObserver; import android.util.Log; +import com.android.internal.widget.LockPatternUtils; + import java.io.FileReader; import java.io.FileNotFoundException; @@ -46,7 +49,11 @@ class DockObserver extends UEventObserver { private final Context mContext; private PowerManagerService mPowerManager; - + + private KeyguardManager.KeyguardLock mKeyguardLock; + private boolean mKeyguardDisabled; + private LockPatternUtils mLockPatternUtils; + // 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 // code of RESULT_OK. If any of the registered broadcast receivers changes this value, e.g., @@ -88,6 +95,7 @@ class DockObserver extends UEventObserver { public DockObserver(Context context, PowerManagerService pm) { mContext = context; mPowerManager = pm; + mLockPatternUtils = new LockPatternUtils(context.getContentResolver()); init(); // set initial status startObserving(DOCK_UEVENT_MATCH); } @@ -130,6 +138,10 @@ class DockObserver extends UEventObserver { void systemReady() { synchronized (this) { + KeyguardManager keyguardManager = + (KeyguardManager)mContext.getSystemService(Context.KEYGUARD_SERVICE); + mKeyguardLock = keyguardManager.newKeyguardLock(TAG); + // don't bother broadcasting undocked here if (mDockState != Intent.EXTRA_DOCK_STATE_UNDOCKED) { update(); @@ -142,10 +154,25 @@ class DockObserver extends UEventObserver { mHandler.sendEmptyMessage(0); } + private final void updateKeyguardLocked() { + if (!mLockPatternUtils.isLockPatternEnabled()) { + if (!mKeyguardDisabled && mDockState != Intent.EXTRA_DOCK_STATE_UNDOCKED) { + Log.d(TAG, "calling mKeyguardLock.disableKeyguard"); + mKeyguardLock.disableKeyguard(); + mKeyguardDisabled = true; + } else if (mKeyguardDisabled && mDockState == Intent.EXTRA_DOCK_STATE_UNDOCKED) { + Log.d(TAG, "calling mKeyguardLock.reenableKeyguard"); + mKeyguardLock.reenableKeyguard(); + mKeyguardDisabled = false; + } + } + } + private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { synchronized (this) { + updateKeyguardLocked(); Log.d(TAG, "Broadcasting dock state " + mDockState); // Pack up the values and broadcast them to everyone mPowerManager.userActivityWithForce(SystemClock.uptimeMillis(), false, true); diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java index 30855b1..01a4122 100644 --- a/services/java/com/android/server/WindowManagerService.java +++ b/services/java/com/android/server/WindowManagerService.java @@ -3965,7 +3965,7 @@ public class WindowManagerService extends IWindowManager.Stub // ------------------------------------------------------------- public void disableKeyguard(IBinder token, String tag) { - if (mContext.checkCallingPermission(android.Manifest.permission.DISABLE_KEYGUARD) + if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DISABLE_KEYGUARD) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Requires DISABLE_KEYGUARD permission"); } @@ -3973,7 +3973,7 @@ public class WindowManagerService extends IWindowManager.Stub } public void reenableKeyguard(IBinder token) { - if (mContext.checkCallingPermission(android.Manifest.permission.DISABLE_KEYGUARD) + if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DISABLE_KEYGUARD) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Requires DISABLE_KEYGUARD permission"); } @@ -3999,7 +3999,7 @@ public class WindowManagerService extends IWindowManager.Stub * @see android.app.KeyguardManager#exitKeyguardSecurely */ public void exitKeyguardSecurely(final IOnKeyguardExitResult callback) { - if (mContext.checkCallingPermission(android.Manifest.permission.DISABLE_KEYGUARD) + if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DISABLE_KEYGUARD) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Requires DISABLE_KEYGUARD permission"); } |