Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18b9c3cb authored by xinhe's avatar xinhe Committed by xin He
Browse files

Unable to unlock SIM with a PIN/PUK

call TelephonyManager.getSimState instead of accessing systemProperty
Bug:18489776

Change-Id: I45d2315a588f706c4815750963dcfec9f8409c5d
parent dc1baa16
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -1303,14 +1303,13 @@ 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));
+20 −0
Original line number Diff line number Diff line
@@ -32,6 +32,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 */
@@ -77,5 +81,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();
            }
        }
    }
}