Merge "Unable to unlock SIM with a PIN/PUK" into lmp-mr1-dev

This commit is contained in:
xinhe
2014-12-03 23:39:29 +00:00
committed by Android (Google) Code Review
2 changed files with 25 additions and 6 deletions

View File

@@ -1303,16 +1303,15 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
// that don't return the complete set of values and have different types. In Keyguard we
// need IccCardConstants, but TelephonyManager would only give us
// TelephonyManager.SIM_STATE*, so we retrieve it manually.
final int phoneId = SubscriptionManager.getPhoneId(subId);
final String stateString = TelephonyManager.getTelephonyProperty(phoneId,
TelephonyProperties.PROPERTY_SIM_STATE, "");
final TelephonyManager tele = TelephonyManager.from(mContext);
int simState = tele.getSimState(slotId);
State state;
try {
state = State.valueOf(stateString);
state = State.intToState(simState);
} catch(IllegalArgumentException ex) {
Log.w(TAG, "Unknown sim state: " + stateString);
Log.w(TAG, "Unknown sim state: " + simState);
state = State.UNKNOWN;
}
}
mSimDatas.put(subId, new SimData(state, slotId, subId));
}

View File

@@ -34,6 +34,10 @@ public class IccCardConstants {
static public final String INTENT_VALUE_ICC_CARD_IO_ERROR = "CARD_IO_ERROR";
/* LOCKED means ICC is locked by pin or by network */
public static final String INTENT_VALUE_ICC_LOCKED = "LOCKED";
//TODO: we can remove this state in the future if Bug 18489776 analysis
//#42's first race condition is resolved
/* INTERNAL LOCKED means ICC is locked by pin or by network */
public static final String INTENT_VALUE_ICC_INTERNAL_LOCKED = "INTERNAL_LOCKED";
/* READY means ICC is ready to access */
public static final String INTENT_VALUE_ICC_READY = "READY";
/* IMSI means ICC IMSI is ready in property */
@@ -81,5 +85,21 @@ public class IccCardConstants {
|| (this == NETWORK_LOCKED) || (this == READY)
|| (this == PERM_DISABLED) || (this == CARD_IO_ERROR));
}
public static State intToState(int state) throws IllegalArgumentException {
switch(state) {
case 0: return UNKNOWN;
case 1: return ABSENT;
case 2: return PIN_REQUIRED;
case 3: return PUK_REQUIRED;
case 4: return NETWORK_LOCKED;
case 5: return READY;
case 6: return NOT_READY;
case 7: return PERM_DISABLED;
case 8: return CARD_IO_ERROR;
default:
throw new IllegalArgumentException();
}
}
}
}