diff options
author | Roman Birg <roman@cyngn.com> | 2015-08-10 11:18:55 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@cyanogenmod.org> | 2015-08-13 10:49:17 -0700 |
commit | 307941c0fdb03f316693142a0076345e9be52add (patch) | |
tree | e6e6609e9dbf510d98ce6dd6eb97dcff36d0e069 /src | |
parent | f304ef2ac94ec4c2aef48047a3e21bcaf703d483 (diff) | |
download | vendor_cmsdk-307941c0fdb03f316693142a0076345e9be52add.zip vendor_cmsdk-307941c0fdb03f316693142a0076345e9be52add.tar.gz vendor_cmsdk-307941c0fdb03f316693142a0076345e9be52add.tar.bz2 |
cmsdk: fix enabling/disabling keyguard
We cannot create a new WindowManagerPolicy every time since the method
isn't called from the main thread every time, which could lead to
exceptions being thrown when trying to create PhoneWindowManager.
Instead of creating a new policy, bind to the keyguard service on bind,
and then pass it to the profile to operate on.
Ref: NIGHTLIES-1640
Change-Id: I3ac58bfa534755eaa73890cc5ddf05987a7d0d8c
Signed-off-by: Roman Birg <roman@cyngn.com>
Diffstat (limited to 'src')
-rwxr-xr-x | src/java/cyanogenmod/app/Profile.java | 11 | ||||
-rw-r--r-- | src/java/cyanogenmod/profiles/LockSettings.java | 38 |
2 files changed, 33 insertions, 16 deletions
diff --git a/src/java/cyanogenmod/app/Profile.java b/src/java/cyanogenmod/app/Profile.java index bd51ca2..908110a 100755 --- a/src/java/cyanogenmod/app/Profile.java +++ b/src/java/cyanogenmod/app/Profile.java @@ -26,6 +26,7 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.Log; +import com.android.internal.policy.IKeyguardService; import cyanogenmod.os.Build; import cyanogenmod.profiles.AirplaneModeSettings; import cyanogenmod.profiles.BrightnessSettings; @@ -1168,7 +1169,7 @@ public final class Profile implements Parcelable, Comparable { } /** @hide */ - public void doSelect(Context context) { + public void doSelect(Context context, IKeyguardService keyguardService) { // Set stream volumes AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); for (StreamSettings sd : streams.values()) { @@ -1190,8 +1191,12 @@ public final class Profile implements Parcelable, Comparable { // Set brightness mBrightness.processOverride(context); - // Set lock screen mode - mScreenLockMode.processOverride(context); + if (keyguardService != null) { + // Set lock screen mode + mScreenLockMode.processOverride(context, keyguardService); + } else { + Log.e(TAG, "cannot process screen lock override without a keyguard service."); + } // Set expanded desktop // if (mExpandedDesktopMode != ExpandedDesktopMode.DEFAULT) { diff --git a/src/java/cyanogenmod/profiles/LockSettings.java b/src/java/cyanogenmod/profiles/LockSettings.java index 1d5cf33..6c1599a 100644 --- a/src/java/cyanogenmod/profiles/LockSettings.java +++ b/src/java/cyanogenmod/profiles/LockSettings.java @@ -20,7 +20,12 @@ import android.app.admin.DevicePolicyManager; import android.content.Context; import android.os.Parcel; import android.os.Parcelable; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.util.Log; import android.view.WindowManagerPolicy; +import android.view.WindowManagerPolicyControl; +import com.android.internal.policy.IKeyguardService; import com.android.internal.policy.PolicyManager; import cyanogenmod.app.Profile; import cyanogenmod.os.Build; @@ -38,6 +43,8 @@ import cyanogenmod.os.Build; */ public final class LockSettings implements Parcelable { + private static final String TAG = LockSettings.class.getSimpleName(); + private int mValue; private boolean mDirty; @@ -101,24 +108,29 @@ public final class LockSettings implements Parcelable { } /** @hide */ - public void processOverride(Context context) { + public void processOverride(Context context, IKeyguardService keyguard) { + boolean enable; final DevicePolicyManager devicePolicyManager = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); - final WindowManagerPolicy policy = PolicyManager.makeNewWindowManager(); - if (devicePolicyManager != null && devicePolicyManager.requireSecureKeyguard()) { - policy.enableKeyguard(true); - return; + enable = true; + } else { + switch (mValue) { + default: + case Profile.LockMode.DEFAULT: + case Profile.LockMode.INSECURE: + enable = true; + break; + case Profile.LockMode.DISABLE: + enable = false; + break; + } } - switch (mValue) { - case Profile.LockMode.DEFAULT: - case Profile.LockMode.INSECURE: - policy.enableKeyguard(true); - break; - case Profile.LockMode.DISABLE: - policy.enableKeyguard(false); - break; + try { + keyguard.setKeyguardEnabled(enable); + } catch (RemoteException e) { + Log.w(TAG, "unable to set keyguard enabled state to: " + enable, e); } } |