aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRoman Birg <roman@cyngn.com>2015-08-10 11:18:55 -0700
committerGerrit Code Review <gerrit@cyanogenmod.org>2015-08-13 10:49:17 -0700
commit307941c0fdb03f316693142a0076345e9be52add (patch)
treee6e6609e9dbf510d98ce6dd6eb97dcff36d0e069 /src
parentf304ef2ac94ec4c2aef48047a3e21bcaf703d483 (diff)
downloadvendor_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-xsrc/java/cyanogenmod/app/Profile.java11
-rw-r--r--src/java/cyanogenmod/profiles/LockSettings.java38
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);
}
}