diff options
-rwxr-xr-x | packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 2152ede6..36eac87 100755 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -26,11 +26,13 @@ import android.app.StatusBarManager; import android.app.admin.DevicePolicyManager; import android.app.trust.TrustManager; import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.database.ContentObserver; import android.media.AudioManager; @@ -151,6 +153,9 @@ public class KeyguardViewMediator extends SystemUI { "com.android.internal.action.KEYGUARD_SERVICE_STATE_CHANGED"; private static final String KEYGUARD_SERVICE_EXTRA_ACTIVE = "active"; + private static final String SETTINGS_PACKAGE = "com.android.settings"; + private static final String CRYPT_KEEPER_ACTIVITY = SETTINGS_PACKAGE + ".CryptKeeper"; + // used for handler messages private static final int SHOW = 2; private static final int HIDE = 3; @@ -343,6 +348,8 @@ public class KeyguardViewMediator extends SystemUI { */ private boolean mPendingLock; + private int mCyrptKeeperEnabledState = -1; + private boolean mWakeAndUnlocking; private IKeyguardDrawnCallback mDrawnCallback; @@ -921,6 +928,16 @@ public class KeyguardViewMediator extends SystemUI { return false; } + private boolean isCryptKeeperEnabled() { + if (mCyrptKeeperEnabledState == -1) { + PackageManager pm = mContext.getPackageManager(); + mCyrptKeeperEnabledState = pm.getComponentEnabledSetting( + new ComponentName(SETTINGS_PACKAGE, CRYPT_KEEPER_ACTIVITY)); + } + + return mCyrptKeeperEnabledState != PackageManager.COMPONENT_ENABLED_STATE_DISABLED; + } + /** * A dream started. We should lock after the usual screen-off lock timeout but only * if there is a secure lock pattern. @@ -1187,6 +1204,14 @@ public class KeyguardViewMediator extends SystemUI { return; } + // Ugly hack to ensure keyguard is not shown on top of the CryptKeeper which prevents + // a user from being able to decrypt their device. + if (isCryptKeeperEnabled()) { + if (DEBUG) Log.d(TAG, "doKeyguard: not showing because CryptKeeper is enabled"); + resetStateLocked(); + return; + } + // if the setup wizard hasn't run yet, don't show final boolean requireSim = !SystemProperties.getBoolean("keyguard.no_require_sim", false); final boolean absent = SubscriptionManager.isValidSubscriptionId( |