diff options
| author | 2012-01-18 16:44:52 -0800 | |
|---|---|---|
| committer | 2012-01-18 16:44:52 -0800 | |
| commit | 230a709285abc5dfd92f05d91a8997d52a59d3c7 (patch) | |
| tree | 782118afed3a59641c740dc5a32559b80eccc3cc | |
| parent | db2e71635968f455ad4f41b2e24fb8b909c24ca0 (diff) | |
| parent | 93c518e4f8abd98f87cda1712b30a5a86cfa60dd (diff) | |
Merge "Fix 5863053: Add method to lock screen immediately." into ics-mr1
6 files changed, 37 insertions, 0 deletions
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index 93a9d50ac479..c54d09e168fc 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -229,4 +229,9 @@ interface IWindowManager * Device has a software navigation bar (separate from the status bar). */ boolean hasNavigationBar(); + + /** + * Lock the device immediately. + */ + void lockNow(); } diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java index 8ab468d44144..cbaa3dffd47e 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -1028,6 +1028,11 @@ public interface WindowManagerPolicy { public boolean hasNavigationBar(); /** + * Lock the device now. + */ + public void lockNow(); + + /** * Print the WindowManagerPolicy's state into the given stream. * * @param prefix Text to print at the front of each line. diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index eeade0528b73..7c9f0b5d4a42 100755 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -3488,6 +3488,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { } }; + public void lockNow() { + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); + mHandler.removeCallbacks(mScreenLockTimeout); + mHandler.post(mScreenLockTimeout); + } + private void updateLockScreenTimeout() { synchronized (mScreenLockTimeout) { boolean enable = (mAllowLockscreenWhenOn && mScreenOnEarly && mKeyguardMediator.isSecure()); diff --git a/services/java/com/android/server/DevicePolicyManagerService.java b/services/java/com/android/server/DevicePolicyManagerService.java index e8ca3ce8475d..d8e3d5963964 100644 --- a/services/java/com/android/server/DevicePolicyManagerService.java +++ b/services/java/com/android/server/DevicePolicyManagerService.java @@ -60,6 +60,7 @@ import android.util.PrintWriterPrinter; import android.util.Printer; import android.util.Slog; import android.util.Xml; +import android.view.IWindowManager; import android.view.WindowManagerPolicy; import java.io.File; @@ -96,6 +97,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { final PowerManager.WakeLock mWakeLock; IPowerManager mIPowerManager; + IWindowManager mIWindowManager; int mActivePasswordQuality = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; int mActivePasswordLength = 0; @@ -506,6 +508,14 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { return mIPowerManager; } + private IWindowManager getWindowManager() { + if (mIWindowManager == null) { + IBinder b = ServiceManager.getService(Context.WINDOW_SERVICE); + mIWindowManager = IWindowManager.Stub.asInterface(b); + } + return mIWindowManager; + } + ActiveAdmin getActiveAdminUncheckedLocked(ComponentName who) { ActiveAdmin admin = mAdminMap.get(who); if (admin != null @@ -1649,8 +1659,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { DeviceAdminInfo.USES_POLICY_FORCE_LOCK); long ident = Binder.clearCallingIdentity(); try { + // Power off the display mIPowerManager.goToSleepWithReason(SystemClock.uptimeMillis(), WindowManagerPolicy.OFF_BECAUSE_OF_ADMIN); + // Ensure the device is locked + getWindowManager().lockNow(); } catch (RemoteException e) { } finally { Binder.restoreCallingIdentity(ident); diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 47a7e16b0990..4dcf59b0564e 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -9415,6 +9415,10 @@ public class WindowManagerService extends IWindowManager.Stub return mPolicy.hasNavigationBar(); } + public void lockNow() { + mPolicy.lockNow(); + } + void dumpInput(FileDescriptor fd, PrintWriter pw, boolean dumpAll) { pw.println("WINDOW MANAGER INPUT (dumpsys window input)"); mInputManager.dump(pw); diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java index 1e66ca2ce1a0..516725e02174 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java @@ -471,4 +471,8 @@ public class BridgeWindowManager implements IWindowManager { public boolean hasNavigationBar() { return false; // should this return something else? } + + public void lockNow() { + // TODO Auto-generated method stub + } } |