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

Commit 7eaefaf4 authored by Rakesh Pallerla's avatar Rakesh Pallerla Committed by Steve Kondik
Browse files

Telephony: Add functionality to handle ICC IO error

At present in Android all ICC Card states other than
ICC PRESENT are treated as ICC ABSENT.Adding functionality
to handle ICC IO error card state.
CRs-Fixed: 184479

Change-Id: Id6a8cf8c7bb2ed441bf8db15b84c4e426537fdb1
parent 980bf5b4
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -2205,6 +2205,11 @@


    <!-- Shown in the lock screen when there is emergency calls only mode. -->
    <!-- Shown in the lock screen when there is emergency calls only mode. -->
    <string name="emergency_calls_only" msgid="2485604591272668370">Emergency calls only</string>
    <string name="emergency_calls_only" msgid="2485604591272668370">Emergency calls only</string>
    <!-- Shown in the lock screen when there is SIM card IO error. -->
    <string name="lockscreen_sim_error_message_short">Invalid Card.</string>
    <!-- Shown in the lock screen when there is SIM card error. -->
    <string name="lockscreen_sim_error_message">SIM card is Invalid.</string>



    <!-- When the user inserts a sim card from an unsupported network, it becomes network
    <!-- When the user inserts a sim card from an unsupported network, it becomes network
         locked -->
         locked -->
+3 −0
Original line number Original line Diff line number Diff line
@@ -210,6 +210,9 @@ public class PhoneStatusBarPolicy {
        if (IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals(stateExtra)) {
        if (IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals(stateExtra)) {
            mSimState = IccCardConstants.State.ABSENT;
            mSimState = IccCardConstants.State.ABSENT;
        }
        }
        else if (IccCardConstants.INTENT_VALUE_ICC_CARD_IO_ERROR.equals(stateExtra)) {
            mSimState = IccCardConstants.State.CARD_IO_ERROR;
        }
        else if (IccCardConstants.INTENT_VALUE_ICC_READY.equals(stateExtra)) {
        else if (IccCardConstants.INTENT_VALUE_ICC_READY.equals(stateExtra)) {
            mSimState = IccCardConstants.State.READY;
            mSimState = IccCardConstants.State.READY;
        }
        }
+8 −0
Original line number Original line Diff line number Diff line
@@ -801,6 +801,10 @@ public class TelephonyManager {
    public static final int SIM_STATE_NETWORK_LOCKED = 4;
    public static final int SIM_STATE_NETWORK_LOCKED = 4;
    /** SIM card state: Ready */
    /** SIM card state: Ready */
    public static final int SIM_STATE_READY = 5;
    public static final int SIM_STATE_READY = 5;
    /** SIM card state: SIM Card Error, Sim Card is present but faulty
     *@hide
     */
    public static final int SIM_STATE_CARD_IO_ERROR = 6;


    /**
    /**
     * @return true if a ICC card is present
     * @return true if a ICC card is present
@@ -827,6 +831,7 @@ public class TelephonyManager {
     * @see #SIM_STATE_PUK_REQUIRED
     * @see #SIM_STATE_PUK_REQUIRED
     * @see #SIM_STATE_NETWORK_LOCKED
     * @see #SIM_STATE_NETWORK_LOCKED
     * @see #SIM_STATE_READY
     * @see #SIM_STATE_READY
     * @see #SIM_STATE_CARD_IO_ERROR
     */
     */
    public int getSimState() {
    public int getSimState() {
        String prop = SystemProperties.get(TelephonyProperties.PROPERTY_SIM_STATE);
        String prop = SystemProperties.get(TelephonyProperties.PROPERTY_SIM_STATE);
@@ -845,6 +850,9 @@ public class TelephonyManager {
        else if ("READY".equals(prop)) {
        else if ("READY".equals(prop)) {
            return SIM_STATE_READY;
            return SIM_STATE_READY;
        }
        }
        else if ("CARD_IO_ERROR".equals(prop)) {
            return SIM_STATE_CARD_IO_ERROR;
        }
        else {
        else {
            return SIM_STATE_UNKNOWN;
            return SIM_STATE_UNKNOWN;
        }
        }
+5 −2
Original line number Original line Diff line number Diff line
@@ -28,6 +28,8 @@ public class IccCardConstants {
    public static final String INTENT_VALUE_ICC_NOT_READY = "NOT_READY";
    public static final String INTENT_VALUE_ICC_NOT_READY = "NOT_READY";
    /* ABSENT means ICC is missing */
    /* ABSENT means ICC is missing */
    public static final String INTENT_VALUE_ICC_ABSENT = "ABSENT";
    public static final String INTENT_VALUE_ICC_ABSENT = "ABSENT";
    /* CARD_IO_ERROR means for three consecutive times there was SIM IO error */
    static public final String INTENT_VALUE_ICC_CARD_IO_ERROR = "CARD_IO_ERROR";
    /* LOCKED means ICC is locked by pin or by network */
    /* LOCKED means ICC is locked by pin or by network */
    public static final String INTENT_VALUE_ICC_LOCKED = "LOCKED";
    public static final String INTENT_VALUE_ICC_LOCKED = "LOCKED";
    /* READY means ICC is ready to access */
    /* READY means ICC is ready to access */
@@ -63,7 +65,8 @@ public class IccCardConstants {
        NETWORK_LOCKED,
        NETWORK_LOCKED,
        READY,
        READY,
        NOT_READY,
        NOT_READY,
        PERM_DISABLED;
        PERM_DISABLED,
        CARD_IO_ERROR;


        public boolean isPinLocked() {
        public boolean isPinLocked() {
            return ((this == PIN_REQUIRED) || (this == PUK_REQUIRED));
            return ((this == PIN_REQUIRED) || (this == PUK_REQUIRED));
@@ -72,7 +75,7 @@ public class IccCardConstants {
        public boolean iccCardExist() {
        public boolean iccCardExist() {
            return ((this == PIN_REQUIRED) || (this == PUK_REQUIRED)
            return ((this == PIN_REQUIRED) || (this == PUK_REQUIRED)
                    || (this == NETWORK_LOCKED) || (this == READY)
                    || (this == NETWORK_LOCKED) || (this == READY)
                    || (this == PERM_DISABLED));
                    || (this == PERM_DISABLED) || (this == CARD_IO_ERROR));
        }
        }
    }
    }
}
}