|
60 | 60 | import android.util.Printer; |
61 | 61 | import android.util.Slog; |
62 | 62 | import android.util.Xml; |
| 63 | +import android.view.IWindowManager; |
63 | 64 | import android.view.WindowManagerPolicy; |
64 | 65 |
|
65 | 66 | import java.io.File; |
@@ -96,6 +97,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { |
96 | 97 | final PowerManager.WakeLock mWakeLock; |
97 | 98 |
|
98 | 99 | IPowerManager mIPowerManager; |
| 100 | + IWindowManager mIWindowManager; |
99 | 101 |
|
100 | 102 | int mActivePasswordQuality = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; |
101 | 103 | int mActivePasswordLength = 0; |
@@ -506,6 +508,14 @@ private IPowerManager getIPowerManager() { |
506 | 508 | return mIPowerManager; |
507 | 509 | } |
508 | 510 |
|
| 511 | + private IWindowManager getWindowManager() { |
| 512 | + if (mIWindowManager == null) { |
| 513 | + IBinder b = ServiceManager.getService(Context.WINDOW_SERVICE); |
| 514 | + mIWindowManager = IWindowManager.Stub.asInterface(b); |
| 515 | + } |
| 516 | + return mIWindowManager; |
| 517 | + } |
| 518 | + |
509 | 519 | ActiveAdmin getActiveAdminUncheckedLocked(ComponentName who) { |
510 | 520 | ActiveAdmin admin = mAdminMap.get(who); |
511 | 521 | if (admin != null |
@@ -1649,8 +1659,11 @@ public void lockNow() { |
1649 | 1659 | DeviceAdminInfo.USES_POLICY_FORCE_LOCK); |
1650 | 1660 | long ident = Binder.clearCallingIdentity(); |
1651 | 1661 | try { |
| 1662 | + // Power off the display |
1652 | 1663 | mIPowerManager.goToSleepWithReason(SystemClock.uptimeMillis(), |
1653 | 1664 | WindowManagerPolicy.OFF_BECAUSE_OF_ADMIN); |
| 1665 | + // Ensure the device is locked |
| 1666 | + getWindowManager().lockNow(); |
1654 | 1667 | } catch (RemoteException e) { |
1655 | 1668 | } finally { |
1656 | 1669 | Binder.restoreCallingIdentity(ident); |
|
0 commit comments