Check for presence of carrier app in data notification.

When ConnectivityService checks the mobile data connection and notices that
there is no connectivity, first do a check to see if a valid carrier app for
the current MCC/MNC exists. If so, launch that app instead of checking for a
provisioning URL or hoping for a DNS redirect in the browser. If no such app
exists, continue on as normal.

Bug: 9622645
Change-Id: Ic88b06250af89825d8eee7e4945fb8d7c28d16e1
This commit is contained in:
Andrew Flynn
2013-10-11 10:16:31 -07:00
parent 1386a1bb1d
commit 5294eb3389

View File

@@ -111,6 +111,7 @@ import com.android.internal.net.VpnProfile;
import com.android.internal.telephony.DctConstants; import com.android.internal.telephony.DctConstants;
import com.android.internal.telephony.Phone; import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.XmlUtils; import com.android.internal.util.XmlUtils;
import com.android.server.am.BatteryStatsService; import com.android.server.am.BatteryStatsService;
@@ -4434,15 +4435,27 @@ public class ConnectivityService extends IConnectivityManager.Stub {
mdst.enableMobileProvisioning(url); mdst.enableMobileProvisioning(url);
} else { } else {
if (DBG) log("handleMobileProvisioningAction: on default network"); if (DBG) log("handleMobileProvisioningAction: on default network");
Intent newIntent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, // Check for apps that can handle provisioning first
Intent.CATEGORY_APP_BROWSER); Intent provisioningIntent = new Intent(TelephonyIntents.ACTION_CARRIER_SETUP);
newIntent.setData(Uri.parse(url)); provisioningIntent.addCategory(TelephonyIntents.CATEGORY_MCCMNC_PREFIX
newIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | + mTelephonyManager.getSimOperator());
Intent.FLAG_ACTIVITY_NEW_TASK); if (mContext.getPackageManager().resolveActivity(provisioningIntent, 0 /* flags */)
try { != null) {
mContext.startActivity(newIntent); provisioningIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT |
} catch (ActivityNotFoundException e) { Intent.FLAG_ACTIVITY_NEW_TASK);
loge("handleMobileProvisioningAction: startActivity failed" + e); mContext.startActivity(provisioningIntent);
} else {
// If no apps exist, use standard URL ACTION_VIEW method
Intent newIntent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN,
Intent.CATEGORY_APP_BROWSER);
newIntent.setData(Uri.parse(url));
newIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT |
Intent.FLAG_ACTIVITY_NEW_TASK);
try {
mContext.startActivity(newIntent);
} catch (ActivityNotFoundException e) {
loge("handleMobileProvisioningAction: startActivity failed" + e);
}
} }
} }
} }