blob: 454221a6cf42b92a4a16edd0e6dd04e695ad7d1a [file] [log] [blame]
Jim Millerdcb3d842012-08-23 19:18:12 -07001/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Jim Miller5ecd8112013-01-09 18:50:26 -080016package com.android.keyguard;
Jim Millerdcb3d842012-08-23 19:18:12 -070017
18import android.app.admin.DevicePolicyManager;
19import android.content.Context;
Jim Miller52a61332014-11-12 19:29:51 -080020import android.telephony.SubscriptionManager;
Jim Millerdcb3d842012-08-23 19:18:12 -070021
22import com.android.internal.telephony.IccCardConstants;
23import com.android.internal.widget.LockPatternUtils;
24
25public class KeyguardSecurityModel {
Adrian Roos46842d92014-03-27 14:58:03 +010026
Jim Millerdcb3d842012-08-23 19:18:12 -070027 /**
Adrian Roosc2e01682015-01-15 23:20:20 +010028 * The different types of security available.
29 * @see KeyguardSecurityContainer#showSecurityScreen
Jim Millerdcb3d842012-08-23 19:18:12 -070030 */
Jorim Jaggia005f1b2014-04-16 19:06:10 +020031 public enum SecurityMode {
Jim Miller63f9b812012-10-15 15:58:01 -070032 Invalid, // NULL state
Jim Millerdcb3d842012-08-23 19:18:12 -070033 None, // No security enabled
34 Pattern, // Unlock by drawing a pattern.
Daniel Sandler69bdee72012-10-23 16:45:50 -040035 Password, // Unlock by entering an alphanumeric password
36 PIN, // Strictly numeric password
Jim Millerdcb3d842012-08-23 19:18:12 -070037 SimPin, // Unlock by entering a sim pin.
38 SimPuk // Unlock by entering a sim puk
39 }
40
Adrian Roosc2e01682015-01-15 23:20:20 +010041 private final Context mContext;
42 private final boolean mIsPukScreenAvailable;
43
Jim Millerdcb3d842012-08-23 19:18:12 -070044 private LockPatternUtils mLockPatternUtils;
45
46 KeyguardSecurityModel(Context context) {
47 mContext = context;
48 mLockPatternUtils = new LockPatternUtils(context);
Adrian Roosc2e01682015-01-15 23:20:20 +010049 mIsPukScreenAvailable = mContext.getResources().getBoolean(
50 com.android.internal.R.bool.config_enable_puk_unlock_screen);
Jim Millerdcb3d842012-08-23 19:18:12 -070051 }
52
53 void setLockPatternUtils(LockPatternUtils utils) {
54 mLockPatternUtils = utils;
55 }
56
57 SecurityMode getSecurityMode() {
Jim Miller52a61332014-11-12 19:29:51 -080058 KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext);
Adrian Roosc2e01682015-01-15 23:20:20 +010059
Wink Savillea54bf652014-12-11 13:37:50 -080060 if (SubscriptionManager.isValidSubscriptionId(
61 monitor.getNextSubIdForState(IccCardConstants.State.PIN_REQUIRED))) {
Adrian Roosc2e01682015-01-15 23:20:20 +010062 return SecurityMode.SimPin;
Jim Millerdcb3d842012-08-23 19:18:12 -070063 }
Adrian Roosc2e01682015-01-15 23:20:20 +010064
65 if (mIsPukScreenAvailable && SubscriptionManager.isValidSubscriptionId(
66 monitor.getNextSubIdForState(IccCardConstants.State.PUK_REQUIRED))) {
67 return SecurityMode.SimPuk;
68 }
69
Adrian Roos8150d2a2015-04-16 17:11:20 -070070 final int security = mLockPatternUtils.getActivePasswordQuality(
Adrian Roosd6aa6cb2015-04-16 19:31:29 -070071 KeyguardUpdateMonitor.getCurrentUser());
Adrian Roosc2e01682015-01-15 23:20:20 +010072 switch (security) {
73 case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
74 case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX:
75 return SecurityMode.PIN;
76
77 case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC:
78 case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC:
79 case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX:
80 return SecurityMode.Password;
81
82 case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
83 return SecurityMode.Pattern;
84 case DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED:
85 return SecurityMode.None;
86
87 default:
88 throw new IllegalStateException("Unknown security quality:" + security);
89 }
Jim Millerdcb3d842012-08-23 19:18:12 -070090 }
Jim Millerdcb3d842012-08-23 19:18:12 -070091}