1dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller/* 2dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * Copyright (C) 2012 The Android Open Source Project 3dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * 4dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * Licensed under the Apache License, Version 2.0 (the "License"); 5dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * you may not use this file except in compliance with the License. 6dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * You may obtain a copy of the License at 7dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * 8dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * http://www.apache.org/licenses/LICENSE-2.0 9dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * 10dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * Unless required by applicable law or agreed to in writing, software 11dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * distributed under the License is distributed on an "AS IS" BASIS, 12dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * See the License for the specific language governing permissions and 14dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * limitations under the License. 15dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller */ 165ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerpackage com.android.keyguard; 17dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 18dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.app.admin.DevicePolicyManager; 19dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.content.Context; 2052a6133f4ba8b1d08f5158d802790d6a1b16568dJim Millerimport android.telephony.SubscriptionManager; 21dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 22dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.telephony.IccCardConstants; 23dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.widget.LockPatternUtils; 24dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 25dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerpublic class KeyguardSecurityModel { 2646842d946d1777c22f05e6bb96933c1b5cbd00d4Adrian Roos 27dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller /** 28c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos * The different types of security available. 29c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos * @see KeyguardSecurityContainer#showSecurityScreen 30dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller */ 31a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi public enum SecurityMode { 3263f9b81795559443e0376985f8aaaa97a359ef94Jim Miller Invalid, // NULL state 33dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller None, // No security enabled 34dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller Pattern, // Unlock by drawing a pattern. 3569bdee7c873c4a2295651efda2d0e79c515acc17Daniel Sandler Password, // Unlock by entering an alphanumeric password 3669bdee7c873c4a2295651efda2d0e79c515acc17Daniel Sandler PIN, // Strictly numeric password 37dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller SimPin, // Unlock by entering a sim pin. 38dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller SimPuk // Unlock by entering a sim puk 39dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 40dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 41c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos private final Context mContext; 42c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos private final boolean mIsPukScreenAvailable; 43c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos 44dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private LockPatternUtils mLockPatternUtils; 45dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 46dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller KeyguardSecurityModel(Context context) { 47dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mContext = context; 48dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mLockPatternUtils = new LockPatternUtils(context); 49c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos mIsPukScreenAvailable = mContext.getResources().getBoolean( 50c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos com.android.internal.R.bool.config_enable_puk_unlock_screen); 51dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 52dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 53dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller void setLockPatternUtils(LockPatternUtils utils) { 54dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mLockPatternUtils = utils; 55dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 56dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 578702ca7e2d6a1a66e580d039a1f662cfb94ee4acVadim Tryshev SecurityMode getSecurityMode(int userId) { 5852a6133f4ba8b1d08f5158d802790d6a1b16568dJim Miller KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext); 59c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos 60a54bf6583380cf328b9858d942b4c387c6163f0fWink Saville if (SubscriptionManager.isValidSubscriptionId( 61a54bf6583380cf328b9858d942b4c387c6163f0fWink Saville monitor.getNextSubIdForState(IccCardConstants.State.PIN_REQUIRED))) { 62c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos return SecurityMode.SimPin; 63c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos } 64c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos 65c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos if (mIsPukScreenAvailable && SubscriptionManager.isValidSubscriptionId( 66c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos monitor.getNextSubIdForState(IccCardConstants.State.PUK_REQUIRED))) { 67c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos return SecurityMode.SimPuk; 68c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos } 69c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos 708702ca7e2d6a1a66e580d039a1f662cfb94ee4acVadim Tryshev final int security = mLockPatternUtils.getActivePasswordQuality(userId); 71c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos switch (security) { 72c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: 73c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: 74c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos return SecurityMode.PIN; 75c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos 76c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC: 77c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC: 78c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX: 7979675b326c5d5f49af1e2314b3d6b1466c857fe2Toni Barzic case DevicePolicyManager.PASSWORD_QUALITY_MANAGED: 80c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos return SecurityMode.Password; 81dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 82c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: 83c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos return SecurityMode.Pattern; 84c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos case DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED: 85c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos return SecurityMode.None; 86258341c377b6aa9f1bd29a9b507a97967e432dfeJim Miller 87c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos default: 88c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos throw new IllegalStateException("Unknown security quality:" + security); 89dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 90dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 91dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller} 92