From c4418f95e425f64f468429d64965b2ca78b91b6e Mon Sep 17 00:00:00 2001 From: Amit Mahajan Date: Fri, 6 Jun 2014 16:53:34 -0700 Subject: [PATCH] Handle provisioning APN by turning off/on radio. The change is specific to AT&T as they want no signaling from device during provisioning. I've tested following cases: - expired AT&T SIM to make sure provisioning flow works as expected. - airplane mode on/off with both active and expired AT&T SIM. - wifi <-> mobile transitions work okay. - LTE with Verizon SIM (basic sanity). bug: 13190133 Change-Id: I215963174ae6000ae71d1dda693f95413f3d6e81 --- .../com/android/server/ConnectivityService.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 41a0e6b9a6..3872674a50 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -4145,7 +4145,9 @@ public class ConnectivityService extends IConnectivityManager.Stub { mIsProvisioningNetwork.set(true); MobileDataStateTracker mdst = (MobileDataStateTracker) mNetTrackers[ConnectivityManager.TYPE_MOBILE]; - mdst.setInternalDataEnable(false); + + // Disable radio until user starts provisioning + mdst.setRadio(false); } else { if (DBG) log("CheckMp.onComplete: warm (no dns/tcp), no url"); } @@ -4651,17 +4653,24 @@ public class ConnectivityService extends IConnectivityManager.Stub { // Mark notification as not visible setProvNotificationVisible(false, ConnectivityManager.TYPE_MOBILE_HIPRI, null, null); - // If provisioning network handle as a special case, + // Check airplane mode + boolean isAirplaneModeOn = Settings.System.getInt(mContext.getContentResolver(), + Settings.Global.AIRPLANE_MODE_ON, 0) == 1; + // If provisioning network and not in airplane mode handle as a special case, // otherwise launch browser with the intent directly. - if (mIsProvisioningNetwork.get()) { + if (mIsProvisioningNetwork.get() && !isAirplaneModeOn) { if (DBG) log("handleMobileProvisioningAction: on prov network enable then launch"); + mIsProvisioningNetwork.set(false); mIsStartingProvisioning.set(true); MobileDataStateTracker mdst = (MobileDataStateTracker) mNetTrackers[ConnectivityManager.TYPE_MOBILE]; + // Radio was disabled on CMP_RESULT_CODE_PROVISIONING_NETWORK, enable it here + mdst.setRadio(true); mdst.setEnableFailFastMobileData(DctConstants.ENABLED); mdst.enableMobileProvisioning(url); } else { if (DBG) log("handleMobileProvisioningAction: not prov network, launch browser directly"); + mIsProvisioningNetwork.set(false); Intent newIntent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_BROWSER); newIntent.setData(Uri.parse(url));