summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--services/java/com/android/server/DevicePolicyManagerService.java71
-rw-r--r--services/java/com/android/server/PowerManagerService.java11
2 files changed, 48 insertions, 34 deletions
diff --git a/services/java/com/android/server/DevicePolicyManagerService.java b/services/java/com/android/server/DevicePolicyManagerService.java
index 7699de2..4ea3d90 100644
--- a/services/java/com/android/server/DevicePolicyManagerService.java
+++ b/services/java/com/android/server/DevicePolicyManagerService.java
@@ -112,6 +112,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
int mPasswordOwner = -1;
Handler mHandler = new Handler();
+ long mLastMaximumTimeToLock = -1;
+
final HashMap<ComponentName, ActiveAdmin> mAdminMap
= new HashMap<ComponentName, ActiveAdmin>();
final ArrayList<ActiveAdmin> mAdminList
@@ -595,7 +597,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- synchronized (this) {
+ synchronized (DevicePolicyManagerService.this) {
boolean doProxyCleanup = admin.info.usesPolicy(
DeviceAdminInfo.USES_POLICY_SETS_GLOBAL_PROXY);
mAdminList.remove(admin);
@@ -603,9 +605,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
validatePasswordOwnerLocked();
syncDeviceCapabilitiesLocked();
if (doProxyCleanup) {
- resetGlobalProxy();
+ resetGlobalProxyLocked();
}
saveSettingsLocked();
+ updateMaximumTimeToLockLocked();
}
}
});
@@ -826,16 +829,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
validatePasswordOwnerLocked();
syncDeviceCapabilitiesLocked();
-
- long timeMs = getMaximumTimeToLock(null);
- if (timeMs <= 0) {
- timeMs = Integer.MAX_VALUE;
- }
- try {
- getIPowerManager().setMaximumScreenOffTimeount((int)timeMs);
- } catch (RemoteException e) {
- Slog.w(TAG, "Failure talking with power manager", e);
- }
+ updateMaximumTimeToLockLocked();
}
static void validateQualityConstant(int quality) {
@@ -1606,25 +1600,38 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
DeviceAdminInfo.USES_POLICY_FORCE_LOCK);
if (ap.maximumTimeToUnlock != timeMs) {
ap.maximumTimeToUnlock = timeMs;
+ saveSettingsLocked();
+ updateMaximumTimeToLockLocked();
+ }
+ }
+ }
- long ident = Binder.clearCallingIdentity();
- try {
- saveSettingsLocked();
+ void updateMaximumTimeToLockLocked() {
+ long timeMs = getMaximumTimeToLock(null);
+ if (mLastMaximumTimeToLock == timeMs) {
+ return;
+ }
- timeMs = getMaximumTimeToLock(null);
- if (timeMs <= 0) {
- timeMs = Integer.MAX_VALUE;
- }
+ long ident = Binder.clearCallingIdentity();
+ try {
+ if (timeMs <= 0) {
+ timeMs = Integer.MAX_VALUE;
+ } else {
+ // Make sure KEEP_SCREEN_ON is disabled, since that
+ // would allow bypassing of the maximum time to lock.
+ Settings.System.putInt(mContext.getContentResolver(),
+ Settings.System.STAY_ON_WHILE_PLUGGED_IN, 0);
+ }
- try {
- getIPowerManager().setMaximumScreenOffTimeount((int)timeMs);
- } catch (RemoteException e) {
- Slog.w(TAG, "Failure talking with power manager", e);
- }
- } finally {
- Binder.restoreCallingIdentity(ident);
- }
+ mLastMaximumTimeToLock = timeMs;
+
+ try {
+ getIPowerManager().setMaximumScreenOffTimeount((int)timeMs);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failure talking with power manager", e);
}
+ } finally {
+ Binder.restoreCallingIdentity(ident);
}
}
@@ -1869,7 +1876,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
// Reset the global proxy accordingly
// Do this using system permissions, as apps cannot write to secure settings
long origId = Binder.clearCallingIdentity();
- resetGlobalProxy();
+ resetGlobalProxyLocked();
Binder.restoreCallingIdentity(origId);
return null;
}
@@ -1893,20 +1900,20 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
return null;
}
- private void resetGlobalProxy() {
+ private void resetGlobalProxyLocked() {
final int N = mAdminList.size();
for (int i = 0; i < N; i++) {
ActiveAdmin ap = mAdminList.get(i);
if (ap.specifiesGlobalProxy) {
- saveGlobalProxy(ap.globalProxySpec, ap.globalProxyExclusionList);
+ saveGlobalProxyLocked(ap.globalProxySpec, ap.globalProxyExclusionList);
return;
}
}
// No device admins defining global proxies - reset global proxy settings to none
- saveGlobalProxy(null, null);
+ saveGlobalProxyLocked(null, null);
}
- private void saveGlobalProxy(String proxySpec, String exclusionList) {
+ private void saveGlobalProxyLocked(String proxySpec, String exclusionList) {
if (exclusionList == null) {
exclusionList = "";
}
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index e9fbd3a..55a28a6 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -477,6 +477,11 @@ public class PowerManagerService extends IPowerManager.Stub
}
}
+ int getStayOnConditionsLocked() {
+ return mMaximumScreenOffTimeout <= 0 || mMaximumScreenOffTimeout == Integer.MAX_VALUE
+ ? mStayOnConditions : 0;
+ }
+
private class SettingsObserver implements Observer {
private int getInt(String name, int defValue) {
ContentValues values = mSettings.getValues(name);
@@ -760,7 +765,8 @@ public class PowerManagerService extends IPowerManager.Stub
}
private void updateWakeLockLocked() {
- if (mStayOnConditions != 0 && mBatteryService.isPowered(mStayOnConditions)) {
+ final int stayOnConditions = getStayOnConditionsLocked();
+ if (stayOnConditions != 0 && mBatteryService.isPowered(stayOnConditions)) {
// keep the device on if we're plugged in and mStayOnWhilePluggedIn is set.
mStayOnWhilePluggedInScreenDimLock.acquire();
mStayOnWhilePluggedInPartialLock.acquire();
@@ -2099,7 +2105,8 @@ public class PowerManagerService extends IPowerManager.Stub
// was dim
steps = (int)(ANIM_STEPS*ratio);
}
- if (mStayOnConditions != 0 && mBatteryService.isPowered(mStayOnConditions)) {
+ final int stayOnConditions = getStayOnConditionsLocked();
+ if (stayOnConditions != 0 && mBatteryService.isPowered(stayOnConditions)) {
// If the "stay on while plugged in" option is
// turned on, then the screen will often not
// automatically turn off while plugged in. To