Currently when both sims are locked on PIN, upon exhausting PIN attempts for SIM1 PIN, SIM1 PUK view is not displayed and the user is not able to unlock the PUK. This is due to while fetching the getSecurityMode in Key -GuardSecurityModel, the ordering of checking the security mode is PIN first and PUK later.So when one sim is locked on PUK and the other is locked on PIN the ordering of checking the PIN first is causing to return PIN as security mode in place of PUK. This will lead to PUK lock screen not been shown to user. Fix: In KeyGuardSecurityModel.java, while querying the security Mode modify the order to check for security mode i.e PUK locked state first and then PIN locked state. In KeyGuardSimPinView and KeyGuardSimPukView, check for sim locked on PIN and reset the flags to show the default message. Test: manually test Bug: 34796244 Change-Id: I157959d9eb313b9d3af84f86e1429448a0f7f065
92 lines
3.3 KiB
Java
92 lines
3.3 KiB
Java
/*
|
|
* 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 (mIsPukScreenAvailable && SubscriptionManager.isValidSubscriptionId(
|
|
monitor.getNextSubIdForState(IccCardConstants.State.PUK_REQUIRED))) {
|
|
return SecurityMode.SimPuk;
|
|
}
|
|
|
|
if (SubscriptionManager.isValidSubscriptionId(
|
|
monitor.getNextSubIdForState(IccCardConstants.State.PIN_REQUIRED))) {
|
|
return SecurityMode.SimPin;
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|