Merge "Fix 5863053: Add method to lock screen immediately." into ics-mr1
This commit is contained in:
@ -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();
|
||||
}
|
||||
|
@ -1027,6 +1027,11 @@ public interface WindowManagerPolicy {
|
||||
*/
|
||||
public boolean hasNavigationBar();
|
||||
|
||||
/**
|
||||
* Lock the device now.
|
||||
*/
|
||||
public void lockNow();
|
||||
|
||||
/**
|
||||
* Print the WindowManagerPolicy's state into the given stream.
|
||||
*
|
||||
|
@ -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());
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user