Merge "Cold Sim issue fix" into nyc-dev
This commit is contained in:
@@ -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()));
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 +"}";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 *****/
|
||||
|
||||
|
||||
@@ -117,6 +117,17 @@ interface ISub {
|
||||
*/
|
||||
int setDisplayName(String displayName, int subId);
|
||||
|
||||
/**
|
||||
* Set Sim Provisioning Status by subscription ID
|
||||
* @param simProvisionStatus 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
|
||||
*/
|
||||
int setSimProvisioningStatus(int simProvisioningStatus, int subId);
|
||||
|
||||
/**
|
||||
* Set display name by simInfo index with name source
|
||||
* @param displayName the display name of SIM card
|
||||
|
||||
@@ -395,4 +395,32 @@ public class TelephonyIntents {
|
||||
*/
|
||||
public static final String ACTION_SET_RADIO_CAPABILITY_FAILED =
|
||||
"android.intent.action.ACTION_SET_RADIO_CAPABILITY_FAILED";
|
||||
|
||||
/**
|
||||
* <p>Broadcast Action: when data connections get redirected with validation failure.
|
||||
* intended for sim/account status checks and only sent to the specified carrier app
|
||||
* feedback is via carrier/system APIs to report cold-sim, out-of-credit-sim, etc
|
||||
* The intent will have the following extra values:</p>
|
||||
* <ul>
|
||||
* <li>redirectUrl</li><dd>A string with the redirection url info.</dd>
|
||||
* <li>subId</li><dd>Sub Id which associated the data redirection.</dd>
|
||||
* </ul>
|
||||
* <p class="note">This is a protected intent that can only be sent by the system.</p>
|
||||
*/
|
||||
public static final String ACTION_DATA_CONNECTION_REDIRECTED =
|
||||
"android.intent.action.REDIRECTION_DETECTED";
|
||||
/**
|
||||
* <p>Broadcast Action: when data connections setup fails.
|
||||
* intended for sim/account status checks and only sent to the specified carrier app
|
||||
* feedback is via carrier/system APIs to report cold-sim, out-of-credit-sim, etc
|
||||
* The intent will have the following extra values:</p>
|
||||
* <ul>
|
||||
* <li>apnType</li><dd>A string with the apn type.</dd>
|
||||
* <li>errorCode</li><dd>A integer with dataFailCause.</dd>
|
||||
* <li>subId</dt><li>Sub Id which associated the data redirection.</dd>
|
||||
* </ul>
|
||||
* <p class="note">This is a protected intent that can only be sent by the system. </p>
|
||||
*/
|
||||
public static final String ACTION_REQUEST_NETWORK_FAILED =
|
||||
"android.intent.action.REQUEST_NETWORK_FAILED";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user