blob: 16e9ffca7782b4521489733f83da782e5f4291cc [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
Lucas Dupin8968f6a2019-08-09 17:41:15 -070018import static com.android.systemui.DejankUtils.whitelistIpcs;
19
Jim Millerdcb3d842012-08-23 19:18:12 -070020import android.app.admin.DevicePolicyManager;
21import android.content.Context;
Jim Miller52a61332014-11-12 19:29:51 -080022import android.telephony.SubscriptionManager;
Jim Millerdcb3d842012-08-23 19:18:12 -070023
24import com.android.internal.telephony.IccCardConstants;
25import com.android.internal.widget.LockPatternUtils;
26
27public class KeyguardSecurityModel {
Adrian Roos46842d92014-03-27 14:58:03 +010028
Jim Millerdcb3d842012-08-23 19:18:12 -070029 /**
Adrian Roosc2e01682015-01-15 23:20:20 +010030 * The different types of security available.
31 * @see KeyguardSecurityContainer#showSecurityScreen
Jim Millerdcb3d842012-08-23 19:18:12 -070032 */
Jorim Jaggia005f1b2014-04-16 19:06:10 +020033 public enum SecurityMode {
Jim Miller63f9b812012-10-15 15:58:01 -070034 Invalid, // NULL state
Jim Millerdcb3d842012-08-23 19:18:12 -070035 None, // No security enabled
36 Pattern, // Unlock by drawing a pattern.
Daniel Sandler69bdee72012-10-23 16:45:50 -040037 Password, // Unlock by entering an alphanumeric password
38 PIN, // Strictly numeric password
Jim Millerdcb3d842012-08-23 19:18:12 -070039 SimPin, // Unlock by entering a sim pin.
40 SimPuk // Unlock by entering a sim puk
41 }
42
Adrian Roosc2e01682015-01-15 23:20:20 +010043 private final Context mContext;
44 private final boolean mIsPukScreenAvailable;
45
Jim Millerdcb3d842012-08-23 19:18:12 -070046 private LockPatternUtils mLockPatternUtils;
47
48 KeyguardSecurityModel(Context context) {
49 mContext = context;
50 mLockPatternUtils = new LockPatternUtils(context);
Adrian Roosc2e01682015-01-15 23:20:20 +010051 mIsPukScreenAvailable = mContext.getResources().getBoolean(
52 com.android.internal.R.bool.config_enable_puk_unlock_screen);
Jim Millerdcb3d842012-08-23 19:18:12 -070053 }
54
55 void setLockPatternUtils(LockPatternUtils utils) {
56 mLockPatternUtils = utils;
57 }
58
Vadim Tryshev8702ca72016-04-22 08:14:12 -070059 SecurityMode getSecurityMode(int userId) {
Jim Miller52a61332014-11-12 19:29:51 -080060 KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext);
Adrian Roosc2e01682015-01-15 23:20:20 +010061
Adrian Roosc2e01682015-01-15 23:20:20 +010062 if (mIsPukScreenAvailable && SubscriptionManager.isValidSubscriptionId(
63 monitor.getNextSubIdForState(IccCardConstants.State.PUK_REQUIRED))) {
64 return SecurityMode.SimPuk;
65 }
66
Pengquan Meng4b267df2017-10-11 17:43:33 -070067 if (SubscriptionManager.isValidSubscriptionId(
68 monitor.getNextSubIdForState(IccCardConstants.State.PIN_REQUIRED))) {
69 return SecurityMode.SimPin;
70 }
71
Lucas Dupin8968f6a2019-08-09 17:41:15 -070072 // TODO(b/140034863)
73 final int security = whitelistIpcs(() ->
74 mLockPatternUtils.getActivePasswordQuality(userId));
Adrian Roosc2e01682015-01-15 23:20:20 +010075 switch (security) {
76 case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
77 case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX:
78 return SecurityMode.PIN;
79
80 case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC:
81 case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC:
82 case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX:
Toni Barzic79675b32016-03-29 18:31:49 -070083 case DevicePolicyManager.PASSWORD_QUALITY_MANAGED:
Adrian Roosc2e01682015-01-15 23:20:20 +010084 return SecurityMode.Password;
85
86 case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
87 return SecurityMode.Pattern;
88 case DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED:
89 return SecurityMode.None;
90
91 default:
92 throw new IllegalStateException("Unknown security quality:" + security);
93 }
Jim Millerdcb3d842012-08-23 19:18:12 -070094 }
Jim Millerdcb3d842012-08-23 19:18:12 -070095}