Files
frameworks_base/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityModel.java
Pengquan Meng 4b267dfe12 MSIM: Fix to show PUK view when two sims locked on PIN.
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
2017-10-11 17:43:39 -07:00

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);
}
}
}