From 38531581fc19f9172fabe56047b326e5dab88625 Mon Sep 17 00:00:00 2001 From: Junda Liu Date: Tue, 28 Oct 2014 13:52:51 -0700 Subject: [PATCH] Add hasMatchedTetherApnSetting to telmgr API. Bug: b/18158411 Change-Id: Id1285b79194ad21fb728fd18fb09026e51354656 --- .../server/connectivity/Tethering.java | 8 ++++++-- .../android/telephony/TelephonyManager.java | 20 +++++++++++++++++++ .../internal/telephony/ITelephony.aidl | 9 +++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java index 7c303ffb2bfe8..2c8e1dc547e0c 100644 --- a/services/core/java/com/android/server/connectivity/Tethering.java +++ b/services/core/java/com/android/server/connectivity/Tethering.java @@ -42,6 +42,7 @@ import android.os.Message; import android.os.RemoteException; import android.os.UserHandle; import android.provider.Settings; +import android.telephony.TelephonyManager; import android.util.Log; import com.android.internal.telephony.Phone; @@ -630,8 +631,11 @@ public class Tethering extends BaseNetworkObserver { } public void checkDunRequired() { - int secureSetting = Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.TETHER_DUN_REQUIRED, 2); + int secureSetting = 2; + TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); + if (tm != null) { + secureSetting = tm.getTetherApnRequired(); + } synchronized (mPublicSync) { // 2 = not set, 0 = DUN not required, 1 = DUN required if (secureSetting != 2) { diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index f2d859fe3413b..ac311cc732d33 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -3082,6 +3082,26 @@ public class TelephonyManager { return setPreferredNetworkType(RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA); } + /** + * Check TETHER_DUN_REQUIRED and TETHER_DUN_APN settings, net.tethering.noprovisioning + * SystemProperty, and config_tether_apndata to decide whether DUN APN is required for + * tethering. + * + * @return 0: Not required. 1: required. 2: Not set. + * @hide + */ + public int getTetherApnRequired() { + try { + return getITelephony().getTetherApnRequired(); + } catch (RemoteException ex) { + Rlog.e(TAG, "hasMatchedTetherApnSetting RemoteException", ex); + } catch (NullPointerException ex) { + Rlog.e(TAG, "hasMatchedTetherApnSetting NPE", ex); + } + return 2; + } + + /** * Values used to return status for hasCarrierPrivileges call. */ diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index cbfa9f6bf6e4e..b5ecb1ce0ebde 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -656,6 +656,15 @@ interface ITelephony { */ int getPreferredNetworkType(); + /** + * Check TETHER_DUN_REQUIRED and TETHER_DUN_APN settings, net.tethering.noprovisioning + * SystemProperty, and config_tether_apndata to decide whether DUN APN is required for + * tethering. + * + * @return 0: Not required. 1: required. 2: Not set. + */ + int getTetherApnRequired(); + /** * Set the preferred network type. * Used for device configuration by some CDMA operators.