Fix 5863053: Add method to lock screen immediately.
This fixes a bug where the device fails to lock when DevicePolicyManagerService requests the device to be locked and the screen was off because the user hit the power button. The change allows DPMS to directly invoke screen lock, bypasssing the screen state. Change-Id: Iecdda6fc61e9c519119de495be23c69c3b983921
This commit is contained in:
@ -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);
|
||||
|
@ -9411,6 +9411,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);
|
||||
|
Reference in New Issue
Block a user