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

Commit b5592dc9 authored by fionaxu's avatar fionaxu
Browse files

Cold Sim issue fix

Bug: 25203607
Change-Id: Ibde6a483477cb7c94f75b656d5e41748b13b23b2
parent 9d1d006c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -791,7 +791,7 @@ public class NetworkControllerImpl extends BroadcastReceiver

    private SubscriptionInfo addSignalController(int id, int simSlotIndex) {
        SubscriptionInfo info = new SubscriptionInfo(id, "", simSlotIndex, "", "", 0, 0, "", 0,
                null, 0, 0, "");
                null, 0, 0, "", SubscriptionManager.SIM_PROVISIONED);
        mMobileSignalControllers.put(id, new MobileSignalController(mContext,
                mConfig, mHasMobileDataFeature, mPhone, mCallbackHandler, this, info,
                mSubDefaults, mReceiverHandler.getLooper()));
+18 −0
Original line number Diff line number Diff line
@@ -629,6 +629,20 @@ public class CarrierConfigManager {
    public static final String KEY_MMS_UA_PROF_URL_STRING = "uaProfUrl";
    public static final String KEY_MMS_USER_AGENT_STRING = "userAgent";

    /**
     * If carriers require differentiate un-provisioned status: cold sim or out of credit sim
     * a package name and activity name can be provided to launch a supported carrier application
     * that check the sim provisioning status
     * The first element is the package name and the second element is the activity name
     * of the provisioning app
     * example:
     * <item>com.google.android.carrierPackageName</item>
     * <item>com.google.android.carrierPackageName.CarrierActivityName</item>
     * @hide
     */
     public static final String KEY_SIM_PROVISIONING_STATUS_DETECTION_CARRIER_APP_STRING_ARRAY =
            "sim_state_detection_carrier_app_string_array";

    /**
     * Determines whether the carrier supports making non-emergency phone calls while the phone is
     * in emergency callback mode.  Default value is {@code true}, meaning that non-emergency calls
@@ -798,6 +812,10 @@ public class CarrierConfigManager {
        sDefaults.putString(KEY_MMS_USER_AGENT_STRING, "");
        sDefaults.putBoolean(KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL, true);
        sDefaults.putBoolean(KEY_USE_RCS_PRESENCE_BOOL, false);

        // Used for Sim card State detection app
        sDefaults.putStringArray(KEY_SIM_PROVISIONING_STATUS_DETECTION_CARRIER_APP_STRING_ARRAY,
                null);
    }

    /**
+26 −3
Original line number Diff line number Diff line
@@ -89,6 +89,14 @@ public class SubscriptionInfo implements Parcelable {
     */
    private int mDataRoaming;

    /**
     * Sim Provisioning Status:
     * {@See SubscriptionManager#SIM_PROVISIONED}
     * {@See SubscriptionManager#SIM_UNPROVISIONED_COLD}
     * {@See SubscriptionManager#SIM_UNPROVISIONED_OUT_OF_CREDIT}
     */
    private int mSimProvisioningStatus;

    /**
     * SIM Icon bitmap
     */
@@ -114,7 +122,7 @@ public class SubscriptionInfo implements Parcelable {
     */
    public SubscriptionInfo(int id, String iccId, int simSlotIndex, CharSequence displayName,
            CharSequence carrierName, int nameSource, int iconTint, String number, int roaming,
            Bitmap icon, int mcc, int mnc, String countryIso) {
            Bitmap icon, int mcc, int mnc, String countryIso, int simProvisioningStatus) {
        this.mId = id;
        this.mIccId = iccId;
        this.mSimSlotIndex = simSlotIndex;
@@ -128,6 +136,7 @@ public class SubscriptionInfo implements Parcelable {
        this.mMcc = mcc;
        this.mMnc = mnc;
        this.mCountryIso = countryIso;
        this.mSimProvisioningStatus = simProvisioningStatus;
    }

    /**
@@ -263,6 +272,17 @@ public class SubscriptionInfo implements Parcelable {
        return this.mDataRoaming;
    }

    /**
     * @return Sim Provisioning Status
     * {@See SubscriptionManager#SIM_PROVISIONED}
     * {@See SubscriptionManager#SIM_UNPROVISIONED_COLD}
     * {@See SubscriptionManager#SIM_UNPROVISIONED_OUT_OF_CREDIT}
     * @hide
     */
    public int getSimProvisioningStatus() {
        return this.mSimProvisioningStatus;
    }

    /**
     * @return the MCC.
     */
@@ -299,10 +319,12 @@ public class SubscriptionInfo implements Parcelable {
            int mcc = source.readInt();
            int mnc = source.readInt();
            String countryIso = source.readString();
            int simProvisioningStatus = source.readInt();
            Bitmap iconBitmap = Bitmap.CREATOR.createFromParcel(source);

            return new SubscriptionInfo(id, iccId, simSlotIndex, displayName, carrierName,
                    nameSource, iconTint, number, dataRoaming, iconBitmap, mcc, mnc, countryIso);
                    nameSource, iconTint, number, dataRoaming, iconBitmap, mcc, mnc, countryIso,
                    simProvisioningStatus);
        }

        @Override
@@ -325,6 +347,7 @@ public class SubscriptionInfo implements Parcelable {
        dest.writeInt(mMcc);
        dest.writeInt(mMnc);
        dest.writeString(mCountryIso);
        dest.writeInt(mSimProvisioningStatus);
        mIconBitmap.writeToParcel(dest, flags);
    }

@@ -355,6 +378,6 @@ public class SubscriptionInfo implements Parcelable {
                + " displayName=" + mDisplayName + " carrierName=" + mCarrierName
                + " nameSource=" + mNameSource + " iconTint=" + mIconTint
                + " dataRoaming=" + mDataRoaming + " iconBitmap=" + mIconBitmap + " mcc " + mMcc
                + " mnc " + mMnc + "}";
                + " mnc " + mMnc + " SimProvisioningStatus " + mSimProvisioningStatus +"}";
    }
}
+57 −0
Original line number Diff line number Diff line
@@ -232,6 +232,22 @@ public class SubscriptionManager {
    /** Indicates that data roaming is disabled for a subscription */
    public static final int DATA_ROAMING_DISABLE = 0;

    /** Sim provisioning status: provisioned */
    /** @hide */
    public static final int SIM_PROVISIONED = 0;

    /** Sim provisioning status: un-provisioned due to cold sim */
    /** @hide */
    public static final int SIM_UNPROVISIONED_COLD = 1;

    /** Sim provisioning status: un-provisioned due to out of credit */
    /** @hide */
    public static final int SIM_UNPROVISIONED_OUT_OF_CREDIT = 2;

    /** Maximum possible sim provisioning status */
    /** @hide */
    public static final int MAX_SIM_PROVISIONING_STATUS = SIM_UNPROVISIONED_OUT_OF_CREDIT;

    /** @hide */
    public static final int DATA_ROAMING_DEFAULT = DATA_ROAMING_DISABLE;

@@ -249,6 +265,13 @@ public class SubscriptionManager {
     */
    public static final String MNC = "mnc";

    /**
     * TelephonyProvider column name for the sim provisioning status associated with a SIM.
     * <P>Type: INTEGER (int)</P>
     * @hide
     */
    public static final String SIM_PROVISIONING_STATUS = "sim_provisioning_status";

    /**
     *  TelephonyProvider column name for extreme threat in CB settings
     * @hide
@@ -819,6 +842,40 @@ public class SubscriptionManager {
        return result;
    }

    /**
     * Set Sim Provisioning Status by subscription ID
     * @param simProvisioningStatus with the subscription
     * {@See SubscriptionManager#SIM_PROVISIONED}
     * {@See SubscriptionManager#SIM_UNPROVISIONED_COLD}
     * {@See SubscriptionManager#SIM_UNPROVISIONED_OUT_OF_CREDIT}
     * @param subId the unique SubInfoRecord index in database
     * @return the number of records updated
     * Permissions android.Manifest.permission.MODIFY_PHONE_STATE is required
     * @hide
     */
    public int setSimProvisioningStatus(int simProvisioningStatus, int subId) {
        if (VDBG) {
            logd("[setSimProvisioningStatus]+ status:" + simProvisioningStatus + " subId:" + subId);
        }
        if (simProvisioningStatus < 0 || simProvisioningStatus > MAX_SIM_PROVISIONING_STATUS ||
                !isValidSubscriptionId(subId)) {
            logd("[setSimProvisioningStatus]- fail");
            return -1;
        }

        int result = 0;

        try {
            ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
            if (iSub != null) {
                result = iSub.setSimProvisioningStatus(simProvisioningStatus, subId);
            }
        } catch (RemoteException ex) {
            // ignore it
        }
        return result;
    }

    /**
     * Get slotId associated with the subscription.
     * @return slotId as a positive integer or a negative value if an error either
+1 −0
Original line number Diff line number Diff line
@@ -103,6 +103,7 @@ public class DctConstants {
    public static final int EVENT_DATA_RAT_CHANGED = BASE + 41;
    public static final int CMD_CLEAR_PROVISIONING_SPINNER = BASE + 42;
    public static final int EVENT_DEVICE_PROVISIONED_CHANGE = BASE + 43;
    public static final int EVENT_REDIRECTION_DETECTED = BASE + 44;

    /***** Constants *****/

Loading