Merge "Cold Sim issue fix" into nyc-dev

This commit is contained in:
Chen Xu
2016-04-20 00:09:59 +00:00
committed by Android (Google) Code Review
7 changed files with 142 additions and 4 deletions

View File

@@ -791,7 +791,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
private SubscriptionInfo addSignalController(int id, int simSlotIndex) { private SubscriptionInfo addSignalController(int id, int simSlotIndex) {
SubscriptionInfo info = new SubscriptionInfo(id, "", simSlotIndex, "", "", 0, 0, "", 0, SubscriptionInfo info = new SubscriptionInfo(id, "", simSlotIndex, "", "", 0, 0, "", 0,
null, 0, 0, ""); null, 0, 0, "", SubscriptionManager.SIM_PROVISIONED);
mMobileSignalControllers.put(id, new MobileSignalController(mContext, mMobileSignalControllers.put(id, new MobileSignalController(mContext,
mConfig, mHasMobileDataFeature, mPhone, mCallbackHandler, this, info, mConfig, mHasMobileDataFeature, mPhone, mCallbackHandler, this, info,
mSubDefaults, mReceiverHandler.getLooper())); mSubDefaults, mReceiverHandler.getLooper()));

View File

@@ -629,6 +629,20 @@ public class CarrierConfigManager {
public static final String KEY_MMS_UA_PROF_URL_STRING = "uaProfUrl"; public static final String KEY_MMS_UA_PROF_URL_STRING = "uaProfUrl";
public static final String KEY_MMS_USER_AGENT_STRING = "userAgent"; 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 * 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 * 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.putString(KEY_MMS_USER_AGENT_STRING, "");
sDefaults.putBoolean(KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL, true); sDefaults.putBoolean(KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL, true);
sDefaults.putBoolean(KEY_USE_RCS_PRESENCE_BOOL, false); 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);
} }
/** /**

View File

@@ -89,6 +89,14 @@ public class SubscriptionInfo implements Parcelable {
*/ */
private int mDataRoaming; 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 * SIM Icon bitmap
*/ */
@@ -114,7 +122,7 @@ public class SubscriptionInfo implements Parcelable {
*/ */
public SubscriptionInfo(int id, String iccId, int simSlotIndex, CharSequence displayName, public SubscriptionInfo(int id, String iccId, int simSlotIndex, CharSequence displayName,
CharSequence carrierName, int nameSource, int iconTint, String number, int roaming, 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.mId = id;
this.mIccId = iccId; this.mIccId = iccId;
this.mSimSlotIndex = simSlotIndex; this.mSimSlotIndex = simSlotIndex;
@@ -128,6 +136,7 @@ public class SubscriptionInfo implements Parcelable {
this.mMcc = mcc; this.mMcc = mcc;
this.mMnc = mnc; this.mMnc = mnc;
this.mCountryIso = countryIso; this.mCountryIso = countryIso;
this.mSimProvisioningStatus = simProvisioningStatus;
} }
/** /**
@@ -263,6 +272,17 @@ public class SubscriptionInfo implements Parcelable {
return this.mDataRoaming; 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. * @return the MCC.
*/ */
@@ -299,10 +319,12 @@ public class SubscriptionInfo implements Parcelable {
int mcc = source.readInt(); int mcc = source.readInt();
int mnc = source.readInt(); int mnc = source.readInt();
String countryIso = source.readString(); String countryIso = source.readString();
int simProvisioningStatus = source.readInt();
Bitmap iconBitmap = Bitmap.CREATOR.createFromParcel(source); Bitmap iconBitmap = Bitmap.CREATOR.createFromParcel(source);
return new SubscriptionInfo(id, iccId, simSlotIndex, displayName, carrierName, 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 @Override
@@ -325,6 +347,7 @@ public class SubscriptionInfo implements Parcelable {
dest.writeInt(mMcc); dest.writeInt(mMcc);
dest.writeInt(mMnc); dest.writeInt(mMnc);
dest.writeString(mCountryIso); dest.writeString(mCountryIso);
dest.writeInt(mSimProvisioningStatus);
mIconBitmap.writeToParcel(dest, flags); mIconBitmap.writeToParcel(dest, flags);
} }
@@ -355,6 +378,6 @@ public class SubscriptionInfo implements Parcelable {
+ " displayName=" + mDisplayName + " carrierName=" + mCarrierName + " displayName=" + mDisplayName + " carrierName=" + mCarrierName
+ " nameSource=" + mNameSource + " iconTint=" + mIconTint + " nameSource=" + mNameSource + " iconTint=" + mIconTint
+ " dataRoaming=" + mDataRoaming + " iconBitmap=" + mIconBitmap + " mcc " + mMcc + " dataRoaming=" + mDataRoaming + " iconBitmap=" + mIconBitmap + " mcc " + mMcc
+ " mnc " + mMnc + "}"; + " mnc " + mMnc + " SimProvisioningStatus " + mSimProvisioningStatus +"}";
} }
} }

View File

@@ -232,6 +232,22 @@ public class SubscriptionManager {
/** Indicates that data roaming is disabled for a subscription */ /** Indicates that data roaming is disabled for a subscription */
public static final int DATA_ROAMING_DISABLE = 0; 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 */ /** @hide */
public static final int DATA_ROAMING_DEFAULT = DATA_ROAMING_DISABLE; public static final int DATA_ROAMING_DEFAULT = DATA_ROAMING_DISABLE;
@@ -249,6 +265,13 @@ public class SubscriptionManager {
*/ */
public static final String MNC = "mnc"; 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 * TelephonyProvider column name for extreme threat in CB settings
* @hide * @hide
@@ -819,6 +842,40 @@ public class SubscriptionManager {
return result; 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. * Get slotId associated with the subscription.
* @return slotId as a positive integer or a negative value if an error either * @return slotId as a positive integer or a negative value if an error either

View File

@@ -103,6 +103,7 @@ public class DctConstants {
public static final int EVENT_DATA_RAT_CHANGED = BASE + 41; public static final int EVENT_DATA_RAT_CHANGED = BASE + 41;
public static final int CMD_CLEAR_PROVISIONING_SPINNER = BASE + 42; 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_DEVICE_PROVISIONED_CHANGE = BASE + 43;
public static final int EVENT_REDIRECTION_DETECTED = BASE + 44;
/***** Constants *****/ /***** Constants *****/

View File

@@ -117,6 +117,17 @@ interface ISub {
*/ */
int setDisplayName(String displayName, int subId); 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 * Set display name by simInfo index with name source
* @param displayName the display name of SIM card * @param displayName the display name of SIM card

View File

@@ -395,4 +395,32 @@ public class TelephonyIntents {
*/ */
public static final String ACTION_SET_RADIO_CAPABILITY_FAILED = public static final String ACTION_SET_RADIO_CAPABILITY_FAILED =
"android.intent.action.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";
} }