diff options
| author | 2009-06-24 14:49:51 -0400 | |
|---|---|---|
| committer | 2009-06-26 10:26:34 -0400 | |
| commit | a84b6faffbe7ef5981f3202be0f68a8b44d61a76 (patch) | |
| tree | 012cbc9c7003b0c163f7770fba0e38528c101dce | |
| parent | 6fa2958059a08390ed2b87b8572f8847ad9999e4 (diff) | |
ConnectivityManager: Add support for bringing up the default APN.
The default APN can now be requested by calling
ConnectivityManager.startUsingNetworkFeature(Phone.FEATURE_ENABLE_DEFAULT).
Signed-off-by: Mike Lockwood <lockwood@android.com>
3 files changed, 38 insertions, 9 deletions
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java index 1064fb64fb94..d48cbd5777aa 100644 --- a/core/java/android/net/MobileDataStateTracker.java +++ b/core/java/android/net/MobileDataStateTracker.java @@ -377,6 +377,8 @@ public class MobileDataStateTracker extends NetworkStateTracker { if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_MMS)) { mLastCallingPid = callingPid; return setEnableApn(Phone.APN_TYPE_MMS, true); + } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_DEFAULT)) { + return setEnableApn(Phone.APN_TYPE_DEFAULT_FEATURE, true); } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_SUPL)) { return setEnableApn(Phone.APN_TYPE_SUPL, true); } else { @@ -399,6 +401,8 @@ public class MobileDataStateTracker extends NetworkStateTracker { public int stopUsingNetworkFeature(String feature, int callingPid, int callingUid) { if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_MMS)) { return setEnableApn(Phone.APN_TYPE_MMS, false); + } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_DEFAULT)) { + return setEnableApn(Phone.APN_TYPE_DEFAULT_FEATURE, false); } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_SUPL)) { return setEnableApn(Phone.APN_TYPE_SUPL, false); } else { diff --git a/telephony/java/com/android/internal/telephony/Phone.java b/telephony/java/com/android/internal/telephony/Phone.java index c8d384d8d5f6..b02c692fc0c3 100644 --- a/telephony/java/com/android/internal/telephony/Phone.java +++ b/telephony/java/com/android/internal/telephony/Phone.java @@ -119,8 +119,11 @@ public interface Phone { static final String APN_TYPE_MMS = "mms"; /** APN type for SUPL assisted GPS */ static final String APN_TYPE_SUPL = "supl"; + /** APN type for default data traffic, when requested using startUsingNetworkFeature */ + static final String APN_TYPE_DEFAULT_FEATURE = "default-feature"; // "Features" accessible through the connectivity manager + static final String FEATURE_ENABLE_DEFAULT = "enableDEFAULT"; static final String FEATURE_ENABLE_MMS = "enableMMS"; static final String FEATURE_ENABLE_SUPL = "enableSUPL"; diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java index 035c6901f0e6..25a5f510053a 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java @@ -130,7 +130,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { private static int APN_DEFAULT_ID = 0; private static int APN_MMS_ID = 1; private static int APN_SUPL_ID = 2; - private static int APN_NUM_TYPES = 3; + private static int APN_DEFAULT_FEATURE_ID = 3; + private static int APN_NUM_TYPES = 4; private boolean[] dataEnabled = new boolean[APN_NUM_TYPES]; @@ -317,7 +318,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { /** * Ensure that we are connected to an APN of the specified type. * @param type the APN type (currently the only valid values - * are {@link Phone#APN_TYPE_MMS} and {@link Phone#APN_TYPE_SUPL}) + * are {@link Phone#APN_TYPE_MMS}, {@link Phone#APN_TYPE_SUPL} + * and {@link Phone#APN_TYPE_DEFAULT_FEATURE}) * @return the result of the operation. Success is indicated by * a return value of either {@code Phone.APN_ALREADY_ACTIVE} or * {@code Phone.APN_REQUEST_STARTED}. In the latter case, a broadcast @@ -325,7 +327,13 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { * the APN has been established. */ protected int enableApnType(String type) { - if (!TextUtils.equals(type, Phone.APN_TYPE_MMS) && + /* FIXME: APN_TYPE_DEFAULT_FEATURE is used to request the default APN. + * Due to the way mRequestedApnType is used, we needed to add + * a different APN_TYPE for this rather than using APN_TYPE_DEFAULT. + */ + + if (!TextUtils.equals(type, Phone.APN_TYPE_DEFAULT_FEATURE) && + !TextUtils.equals(type, Phone.APN_TYPE_MMS) && !TextUtils.equals(type, Phone.APN_TYPE_SUPL)) { return Phone.APN_REQUEST_FAILED; } @@ -363,12 +371,14 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { * use of the default APN has not been explicitly disabled, we are connected * to the default APN. * @param type the APN type. The only valid values are currently - * {@link Phone#APN_TYPE_MMS} and {@link Phone#APN_TYPE_SUPL}. + * {@link Phone#APN_TYPE_MMS} {@link Phone#APN_TYPE_SUPL} and + * {@link Phone#APN_TYPE_DEFAULT_FEATURE}). * @return */ protected int disableApnType(String type) { Log.d(LOG_TAG, "disableApnType("+type+")"); - if ((TextUtils.equals(type, Phone.APN_TYPE_MMS) || + if ((TextUtils.equals(type, Phone.APN_TYPE_DEFAULT_FEATURE) || + TextUtils.equals(type, Phone.APN_TYPE_MMS) || TextUtils.equals(type, Phone.APN_TYPE_SUPL)) && isEnabled(type)) { removeMessages(EVENT_RESTORE_DEFAULT_APN); @@ -419,6 +429,9 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { private boolean isApnTypeActive(String type) { // TODO: to support simultaneous, mActiveApn can be a List instead. + if (TextUtils.equals(type, Phone.APN_TYPE_DEFAULT_FEATURE)) { + type = Phone.APN_TYPE_DEFAULT; + } return mActiveApn != null && mActiveApn.canHandleType(type); } @@ -440,6 +453,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { return dataEnabled[APN_MMS_ID]; } else if (TextUtils.equals(apnType, Phone.APN_TYPE_SUPL)) { return dataEnabled[APN_SUPL_ID]; + } else if (TextUtils.equals(apnType, Phone.APN_TYPE_DEFAULT_FEATURE)) { + return dataEnabled[APN_DEFAULT_FEATURE_ID]; } else { return false; } @@ -453,10 +468,13 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { dataEnabled[APN_MMS_ID] = enable; } else if (TextUtils.equals(apnType, Phone.APN_TYPE_SUPL)) { dataEnabled[APN_SUPL_ID] = enable; + } else if (TextUtils.equals(apnType, Phone.APN_TYPE_DEFAULT_FEATURE)) { + dataEnabled[APN_DEFAULT_FEATURE_ID] = enable; } Log.d(LOG_TAG, "dataEnabled[DEFAULT_APN]=" + dataEnabled[APN_DEFAULT_ID] + " dataEnabled[MMS_APN]=" + dataEnabled[APN_MMS_ID] + - " dataEnabled[SUPL_APN]=" + dataEnabled[APN_SUPL_ID]); + " dataEnabled[SUPL_APN]=" + dataEnabled[APN_SUPL_ID] + + " dataEnabled[APN_DEFAULT_FEATURE_ID]=" + dataEnabled[APN_DEFAULT_FEATURE_ID]); } /** @@ -484,7 +502,9 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { // Don't tear down if there is an active APN and it handles MMS or SUPL. // TODO: This isn't very general. if ((isApnTypeActive(Phone.APN_TYPE_MMS) && isEnabled(Phone.APN_TYPE_MMS)) || - (isApnTypeActive(Phone.APN_TYPE_SUPL) && isEnabled(Phone.APN_TYPE_SUPL))) { + (isApnTypeActive(Phone.APN_TYPE_SUPL) && isEnabled(Phone.APN_TYPE_SUPL)) || + (isApnTypeActive(Phone.APN_TYPE_DEFAULT_FEATURE) && + isEnabled(Phone.APN_TYPE_DEFAULT_FEATURE))) { return false; } Message msg = obtainMessage(EVENT_CLEAN_UP_CONNECTION); @@ -514,7 +534,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { * {@code true} otherwise. */ public boolean getAnyDataEnabled() { - return dataEnabled[APN_DEFAULT_ID] || dataEnabled[APN_MMS_ID] || dataEnabled[APN_SUPL_ID]; + return dataEnabled[APN_DEFAULT_ID] || dataEnabled[APN_MMS_ID] || + dataEnabled[APN_SUPL_ID] || dataEnabled[APN_DEFAULT_FEATURE_ID]; } /** @@ -1289,7 +1310,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { * rather an app that inadvertantly fails to reset to the * default APN, or that dies before doing so. */ - if (dataEnabled[APN_MMS_ID] || dataEnabled[APN_SUPL_ID]) { + if (dataEnabled[APN_MMS_ID] || dataEnabled[APN_SUPL_ID] || + dataEnabled[APN_DEFAULT_FEATURE_ID]) { removeMessages(EVENT_RESTORE_DEFAULT_APN); sendMessageDelayed(obtainMessage(EVENT_RESTORE_DEFAULT_APN), getRestoreDefaultApnDelay()); |