diff options
Diffstat (limited to 'services/java/com/android/server/DockObserver.java')
-rw-r--r-- | services/java/com/android/server/DockObserver.java | 29 |
1 files changed, 28 insertions, 1 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); |