diff options
Diffstat (limited to 'packages/SystemUI/src/com/android/keyguard/KeyguardSecurityModel.java')
-rw-r--r-- | packages/SystemUI/src/com/android/keyguard/KeyguardSecurityModel.java | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityModel.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityModel.java new file mode 100644 index 000000000000..7baa57e7dae7 --- /dev/null +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityModel.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.keyguard; + +import android.app.admin.DevicePolicyManager; +import android.content.Context; +import android.telephony.SubscriptionManager; + +import com.android.internal.telephony.IccCardConstants; +import com.android.internal.widget.LockPatternUtils; + +public class KeyguardSecurityModel { + + /** + * The different types of security available. + * @see KeyguardSecurityContainer#showSecurityScreen + */ + public enum SecurityMode { + Invalid, // NULL state + None, // No security enabled + Pattern, // Unlock by drawing a pattern. + Password, // Unlock by entering an alphanumeric password + PIN, // Strictly numeric password + SimPin, // Unlock by entering a sim pin. + SimPuk // Unlock by entering a sim puk + } + + private final Context mContext; + private final boolean mIsPukScreenAvailable; + + private LockPatternUtils mLockPatternUtils; + + KeyguardSecurityModel(Context context) { + mContext = context; + mLockPatternUtils = new LockPatternUtils(context); + mIsPukScreenAvailable = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_enable_puk_unlock_screen); + } + + void setLockPatternUtils(LockPatternUtils utils) { + mLockPatternUtils = utils; + } + + SecurityMode getSecurityMode(int userId) { + KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext); + + if (SubscriptionManager.isValidSubscriptionId( + monitor.getNextSubIdForState(IccCardConstants.State.PIN_REQUIRED))) { + return SecurityMode.SimPin; + } + + if (mIsPukScreenAvailable && SubscriptionManager.isValidSubscriptionId( + monitor.getNextSubIdForState(IccCardConstants.State.PUK_REQUIRED))) { + return SecurityMode.SimPuk; + } + + final int security = mLockPatternUtils.getActivePasswordQuality(userId); + switch (security) { + case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: + case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: + return SecurityMode.PIN; + + case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC: + case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC: + case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX: + case DevicePolicyManager.PASSWORD_QUALITY_MANAGED: + return SecurityMode.Password; + + case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: + return SecurityMode.Pattern; + case DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED: + return SecurityMode.None; + + default: + throw new IllegalStateException("Unknown security quality:" + security); + } + } +} |