Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 60860192 authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android Git Automerger
Browse files

am d8bbf96a: Merge "Fix issue #6664140: Time to lock should work even Stay awake..." into jb-dev

* commit 'd8bbf96a':
  Fix issue #6664140: Time to lock should work even Stay awake...
parents 772ddc0c d8bbf96a
Loading
Loading
Loading
Loading
+39 −32
Original line number Diff line number Diff line
@@ -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,16 +1600,31 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                    DeviceAdminInfo.USES_POLICY_FORCE_LOCK);
            if (ap.maximumTimeToUnlock != timeMs) {
                ap.maximumTimeToUnlock = timeMs;
                saveSettingsLocked();
                updateMaximumTimeToLockLocked();
            }
        }
    }

    void updateMaximumTimeToLockLocked() {
        long timeMs = getMaximumTimeToLock(null);
        if (mLastMaximumTimeToLock == timeMs) {
            return;
        }

        long ident = Binder.clearCallingIdentity();
        try {
                    saveSettingsLocked();

                    timeMs = getMaximumTimeToLock(null);
            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);
            }

            mLastMaximumTimeToLock = timeMs;

            try {
                getIPowerManager().setMaximumScreenOffTimeount((int)timeMs);
            } catch (RemoteException e) {
@@ -1625,8 +1634,6 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
            Binder.restoreCallingIdentity(ident);
        }
    }
        }
    }

    public long getMaximumTimeToLock(ComponentName who) {
        synchronized (this) {
@@ -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 = "";
        }
+9 −2
Original line number Diff line number Diff line
@@ -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