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

Commit bde25c20 authored by Jim Miller's avatar Jim Miller Committed by Android (Google) Code Review
Browse files

Merge "Fix 2737842: disable keyguard API when device policy is enabled." into froyo

parents ac24d23c d6b5705e
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -53,6 +53,9 @@ public class KeyguardManager {
         *
         * A good place to call this is from {@link android.app.Activity#onResume()}
         *
         * Note: This call has no effect while any {@link DevicePolicyManager} is enabled
         * that requires a password.
         *
         * @see #reenableKeyguard()
         */
        public void disableKeyguard() {
@@ -68,6 +71,9 @@ public class KeyguardManager {
         *
         * A good place to call this is from {@link android.app.Activity#onPause()}
         *
         * Note: This call has no effect while any {@link DevicePolicyManager} is enabled
         * that requires a password.
         *
         * @see #disableKeyguard()
         */
        public void reenableKeyguard() {
+43 −18
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ import com.android.server.am.BatteryStatsService;
import android.Manifest;
import android.app.ActivityManagerNative;
import android.app.IActivityManager;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
@@ -86,6 +87,7 @@ import android.os.TokenWatcher;
import android.provider.Settings;
import android.util.DisplayMetrics;
import android.util.EventLog;
import android.util.Log;
import android.util.Slog;
import android.util.SparseIntArray;
import android.view.Display;
@@ -4171,14 +4173,32 @@ public class WindowManagerService extends IWindowManager.Stub
    // Misc IWindowSession methods
    // -------------------------------------------------------------

    private boolean allowDisableKeyguard()
    {
        // We fail safe if this gets called before the service has started.
        boolean allow = false;
        DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(
                Context.DEVICE_POLICY_SERVICE);
        if (dpm != null) {
            allow = dpm.getPasswordQuality(null)
                    == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
        }
        return allow;
    }

    public void disableKeyguard(IBinder token, String tag) {
        if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DISABLE_KEYGUARD)
            != PackageManager.PERMISSION_GRANTED) {
            throw new SecurityException("Requires DISABLE_KEYGUARD permission");
        }

        if (allowDisableKeyguard()) {
            synchronized (mKeyguardTokenWatcher) {
                mKeyguardTokenWatcher.acquire(token, tag);
            }
        } else {
            Log.w(TAG, tag + ": disableKeyguard() ignored while DevicePolicyAmin is enabled.");
        }
    }

    public void reenableKeyguard(IBinder token) {
@@ -4186,6 +4206,8 @@ public class WindowManagerService extends IWindowManager.Stub
            != PackageManager.PERMISSION_GRANTED) {
            throw new SecurityException("Requires DISABLE_KEYGUARD permission");
        }

        if (allowDisableKeyguard()) {
            synchronized (mKeyguardTokenWatcher) {
                mKeyguardTokenWatcher.release(token);

@@ -4206,6 +4228,9 @@ public class WindowManagerService extends IWindowManager.Stub
                    }
                }
            }
        } else {
            Log.w(TAG, "reenableKeyguard() ignored while DevicePolicyAmin is enabled.");
        }
    }

    /**