Merge "cold sim clean up" into nyc-mr1-dev

am: ba3428f01b

* commit 'ba3428f01b8cc112cd85d1c4ffcc1407a3b8b7c6':
  cold sim clean up

Change-Id: I5a2e24d997408badd6db7576b2fa206eb9e5c4ca
This commit is contained in:
fionaxu
2016-06-04 05:53:44 +00:00
committed by android-build-merger
11 changed files with 144 additions and 116 deletions

View File

@@ -51,6 +51,15 @@ public class NetworkMisc implements Parcelable {
*/ */
public boolean acceptUnvalidated; public boolean acceptUnvalidated;
/**
* Set to avoid surfacing the "Sign in to network" notification.
* if carrier receivers/apps are registered to handle the carrier-specific provisioning
* procedure, a carrier specific provisioning notification will be placed.
* only one notification should be displayed. This field is set based on
* which notification should be used for provisioning.
*/
public boolean provisioningNotificationDisabled;
/** /**
* For mobile networks, this is the subscriber ID (such as IMSI). * For mobile networks, this is the subscriber ID (such as IMSI).
*/ */
@@ -65,6 +74,7 @@ public class NetworkMisc implements Parcelable {
explicitlySelected = nm.explicitlySelected; explicitlySelected = nm.explicitlySelected;
acceptUnvalidated = nm.acceptUnvalidated; acceptUnvalidated = nm.acceptUnvalidated;
subscriberId = nm.subscriberId; subscriberId = nm.subscriberId;
provisioningNotificationDisabled = nm.provisioningNotificationDisabled;
} }
} }
@@ -79,6 +89,7 @@ public class NetworkMisc implements Parcelable {
out.writeInt(explicitlySelected ? 1 : 0); out.writeInt(explicitlySelected ? 1 : 0);
out.writeInt(acceptUnvalidated ? 1 : 0); out.writeInt(acceptUnvalidated ? 1 : 0);
out.writeString(subscriberId); out.writeString(subscriberId);
out.writeInt(provisioningNotificationDisabled ? 1 : 0);
} }
public static final Creator<NetworkMisc> CREATOR = new Creator<NetworkMisc>() { public static final Creator<NetworkMisc> CREATOR = new Creator<NetworkMisc>() {
@@ -89,6 +100,7 @@ public class NetworkMisc implements Parcelable {
networkMisc.explicitlySelected = in.readInt() != 0; networkMisc.explicitlySelected = in.readInt() != 0;
networkMisc.acceptUnvalidated = in.readInt() != 0; networkMisc.acceptUnvalidated = in.readInt() != 0;
networkMisc.subscriberId = in.readString(); networkMisc.subscriberId = in.readString();
networkMisc.provisioningNotificationDisabled = in.readInt() != 0;
return networkMisc; return networkMisc;
} }

View File

@@ -810,7 +810,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, "", SubscriptionManager.SIM_PROVISIONED); null, 0, 0, "");
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

@@ -2150,9 +2150,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
loge("EVENT_PROVISIONING_NOTIFICATION from unknown NetworkMonitor"); loge("EVENT_PROVISIONING_NOTIFICATION from unknown NetworkMonitor");
break; break;
} }
setProvNotificationVisibleIntent(true, netId, NotificationType.SIGN_IN, if (!nai.networkMisc.provisioningNotificationDisabled) {
nai.networkInfo.getType(), nai.networkInfo.getExtraInfo(), setProvNotificationVisibleIntent(true, netId, NotificationType.SIGN_IN,
(PendingIntent)msg.obj, nai.networkMisc.explicitlySelected); nai.networkInfo.getType(), nai.networkInfo.getExtraInfo(),
(PendingIntent)msg.obj, nai.networkMisc.explicitlySelected);
}
} }
break; break;
} }
@@ -2553,6 +2555,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
PendingIntent pendingIntent = PendingIntent.getActivityAsUser( PendingIntent pendingIntent = PendingIntent.getActivityAsUser(
mContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT, null, UserHandle.CURRENT); mContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT, null, UserHandle.CURRENT);
setProvNotificationVisibleIntent(true, nai.network.netId, NotificationType.NO_INTERNET, setProvNotificationVisibleIntent(true, nai.network.netId, NotificationType.NO_INTERNET,
nai.networkInfo.getType(), nai.networkInfo.getExtraInfo(), pendingIntent, true); nai.networkInfo.getType(), nai.networkInfo.getExtraInfo(), pendingIntent, true);
} }

View File

@@ -66,7 +66,6 @@ import com.android.internal.util.Protocol;
import com.android.internal.util.State; import com.android.internal.util.State;
import com.android.internal.util.StateMachine; import com.android.internal.util.StateMachine;
import com.android.internal.util.WakeupMessage; import com.android.internal.util.WakeupMessage;
import com.android.server.connectivity.NetworkAgentInfo;
import java.io.IOException; import java.io.IOException;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
@@ -618,7 +617,7 @@ public class NetworkMonitor extends StateMachine {
@Override @Override
public void exit() { public void exit() {
removeMessages(CMD_CAPTIVE_PORTAL_RECHECK); removeMessages(CMD_CAPTIVE_PORTAL_RECHECK);
} }
} }

View File

@@ -675,18 +675,37 @@ public class CarrierConfigManager {
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 list of component name of carrier signalling receivers which are interested in intent
* a package name and activity name can be provided to launch a supported carrier application * android.intent.action.CARRIER_SIGNAL_REDIRECTED.
* that check the sim provisioning status * Example:
* The first element is the package name and the second element is the activity name * <item>com.google.android.carrierPackageName/.CarrierSignalReceiverNameA</item>
* of the provisioning app * <item>com.google.android.carrierPackageName/.CarrierSignalReceiverNameB</item>
* example:
* <item>com.google.android.carrierPackageName</item>
* <item>com.google.android.carrierPackageName.CarrierActivityName</item>
* @hide * @hide
*/ */
public static final String KEY_SIM_PROVISIONING_STATUS_DETECTION_CARRIER_APP_STRING_ARRAY = public static final String KEY_SIGNAL_REDIRECTION_RECEIVER_STRING_ARRAY =
"sim_state_detection_carrier_app_string_array"; "signal_redirection_receiver_string_array";
/**
* A list of component name of carrier signalling receivers which are interested in intent
* android.intent.action.CARRIER_SIGNAL_REQUEST_NETWORK_FAILED.
* Example:
* <item>com.google.android.carrierPackageName/.CarrierSignalReceiverNameA</item>
* <item>com.google.android.carrierPackageName/.CarrierSignalReceiverNameB</item>
* @hide
*/
public static final String KEY_SIGNAL_DCFAILURE_RECEIVER_STRING_ARRAY =
"signal_dcfailure_receiver_string_array";
/**
* A list of component name of carrier signalling receivers which are interested in intent
* android.intent.action.CARRIER_SIGNAL_PCO_VALUE.
* Example:
* <item>com.google.android.carrierPackageName/.CarrierSignalReceiverNameA</item>
* <item>com.google.android.carrierPackageName/.CarrierSignalReceiverNameB</item>
* @hide
*/
public static final String KEY_SIGNAL_PCO_RECEIVER_STRING_ARRAY =
"signal_pco_receiver_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
@@ -864,9 +883,10 @@ public class CarrierConfigManager {
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 // Carrier Signalling Receivers
sDefaults.putStringArray(KEY_SIM_PROVISIONING_STATUS_DETECTION_CARRIER_APP_STRING_ARRAY, sDefaults.putStringArray(KEY_SIGNAL_REDIRECTION_RECEIVER_STRING_ARRAY, null);
null); sDefaults.putStringArray(KEY_SIGNAL_DCFAILURE_RECEIVER_STRING_ARRAY, null);
sDefaults.putStringArray(KEY_SIGNAL_PCO_RECEIVER_STRING_ARRAY, null);
} }
/** /**

View File

@@ -89,14 +89,6 @@ 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
*/ */
@@ -122,7 +114,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, int simProvisioningStatus) { Bitmap icon, int mcc, int mnc, String countryIso) {
this.mId = id; this.mId = id;
this.mIccId = iccId; this.mIccId = iccId;
this.mSimSlotIndex = simSlotIndex; this.mSimSlotIndex = simSlotIndex;
@@ -136,7 +128,6 @@ 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;
} }
/** /**
@@ -272,17 +263,6 @@ 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.
*/ */
@@ -319,12 +299,10 @@ 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
@@ -347,7 +325,6 @@ 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);
} }
@@ -378,6 +355,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 + " SimProvisioningStatus " + mSimProvisioningStatus +"}"; + " mnc " + mMnc + "}";
} }
} }

View File

@@ -232,25 +232,12 @@ 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;
/** @hide */
public static final int SIM_PROVISIONED = 0;
/** /**
* TelephonyProvider column name for the MCC associated with a SIM. * TelephonyProvider column name for the MCC associated with a SIM.
* <P>Type: INTEGER (int)</P> * <P>Type: INTEGER (int)</P>
@@ -842,40 +829,6 @@ 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

@@ -5479,4 +5479,41 @@ public class TelephonyManager {
} }
return new ArrayList<CarrierIdentifier>(0); return new ArrayList<CarrierIdentifier>(0);
} }
/**
* Action set from carrier signalling broadcast receivers to enable/disable metered apns
* Permissions android.Manifest.permission.MODIFY_PHONE_STATE is required
* @param subId the subscription ID that this action applies to.
* @param enabled control enable or disable metered apns.
* @hide
*/
public void carrierActionSetMeteredApnsEnabled(int subId, boolean enabled) {
try {
ITelephony service = getITelephony();
if (service != null) {
service.carrierActionSetMeteredApnsEnabled(subId, enabled);
}
} catch (RemoteException e) {
Log.e(TAG, "Error calling ITelephony#carrierActionSetMeteredApnsEnabled", e);
}
}
/**
* Action set from carrier signalling broadcast receivers to enable/disable radio
* Permissions android.Manifest.permission.MODIFY_PHONE_STATE is required
* @param subId the subscription ID that this action applies to.
* @param enabled control enable or disable radio.
* @hide
*/
public void carrierActionSetRadioEnabled(int subId, boolean enabled) {
try {
ITelephony service = getITelephony();
if (service != null) {
service.carrierActionSetRadioEnabled(subId, enabled);
}
} catch (RemoteException e) {
Log.e(TAG, "Error calling ITelephony#carrierActionSetRadioEnabled", e);
}
}
} }

View File

@@ -117,17 +117,6 @@ 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

@@ -1132,4 +1132,22 @@ interface ITelephony {
* means all carriers are allowed. * means all carriers are allowed.
*/ */
List<CarrierIdentifier> getAllowedCarriers(int slotId); List<CarrierIdentifier> getAllowedCarriers(int slotId);
/**
* Action set from carrier signalling broadcast receivers to enable/disable metered apns
* Permissions android.Manifest.permission.MODIFY_PHONE_STATE is required
* @param subId the subscription ID that this action applies to.
* @param enabled control enable or disable metered apns.
* @hide
*/
void carrierActionSetMeteredApnsEnabled(int subId, boolean visible);
/**
* Action set from carrier signalling broadcast receivers to enable/disable radio
* Permissions android.Manifest.permission.MODIFY_PHONE_STATE is required
* @param subId the subscription ID that this action applies to.
* @param enabled control enable or disable radio.
* @hide
*/
void carrierActionSetRadioEnabled(int subId, boolean enabled);
} }

View File

@@ -402,34 +402,54 @@ public class TelephonyIntents {
/** /**
* <p>Broadcast Action: when data connections get redirected with validation failure. * <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 * 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> * The intent will have the following extra values:</p>
* <ul> * <ul>
* <li>redirectUrl</li><dd>A string with the redirection url info.</dd> * <li>apnType</li><dd>A string with the apn type.</dd>
* <li>subId</li><dd>Sub Id which associated the data redirection.</dd> * <li>redirectionUrl</li><dd>redirection url string</dd>
* <li>subId</dt><li>Sub Id which associated the data connection failure.</dd>
* </ul> * </ul>
* <p class="note">This is a protected intent that can only be sent by the system.</p> * <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 = public static final String ACTION_CARRIER_SIGNAL_REDIRECTED =
"android.intent.action.REDIRECTION_DETECTED"; "android.intent.action.CARRIER_SIGNAL_REDIRECTED";
/** /**
* <p>Broadcast Action: when data connections setup fails. * <p>Broadcast Action: when data connections setup fails.
* intended for sim/account status checks and only sent to the specified carrier app * 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> * The intent will have the following extra values:</p>
* <ul> * <ul>
* <li>apnType</li><dd>A string with the apn type.</dd> * <li>apnType</li><dd>A string with the apn type.</dd>
* <li>errorCode</li><dd>A integer with dataFailCause.</dd> * <li>errorCode</li><dd>A integer with dataFailCause.</dd>
* <li>subId</dt><li>Sub Id which associated the data redirection.</dd> * <li>subId</dt><li>Sub Id which associated the data connection failure.</dd>
* </ul> * </ul>
* <p class="note">This is a protected intent that can only be sent by the system. </p> * <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 = public static final String ACTION_CARRIER_SIGNAL_REQUEST_NETWORK_FAILED =
"android.intent.action.REQUEST_NETWORK_FAILED"; "android.intent.action.CARRIER_SIGNAL_REQUEST_NETWORK_FAILED";
/** /**
* Broadcast action to trigger CI OMA-DM Session. * <p>Broadcast Action: when pco value is available.
* intended for sim/account status checks and only sent to the specified carrier app
* The intent will have the following extra values:</p>
* <ul>
* <li>apnType</li><dd>A string with the apn type.</dd>
* <li>pcoValue</li><dd>A integer read from modem.</dd>
* <li>subId</dt><li>Sub Id which associated the data connection.</dd>
* </ul>
* <p class="note">This is a protected intent that can only be sent by the system. </p>
*/ */
public static final String ACTION_CARRIER_SIGNAL_PCO_VALUE =
"android.intent.action.CARRIER_SIGNAL_PCO_VALUE";
// CARRIER_SIGNAL_ACTION extra keys
public static final String EXTRA_REDIRECTION_URL_KEY = "redirectionUrl";
public static final String EXTRA_ERROR_CODE_KEY = "errorCode";
public static final String EXTRA_APN_TYPE_KEY = "apnType";
public static final String EXTRA_PCO_KEY = "pco";
/**
* Broadcast action to trigger CI OMA-DM Session.
*/
public static final String ACTION_REQUEST_OMADM_CONFIGURATION_UPDATE = public static final String ACTION_REQUEST_OMADM_CONFIGURATION_UPDATE =
"com.android.omadm.service.CONFIGURATION_UPDATE"; "com.android.omadm.service.CONFIGURATION_UPDATE";
} }