diff options
| author | 2016-07-14 05:14:02 +0000 | |
|---|---|---|
| committer | 2016-07-14 05:14:02 +0000 | |
| commit | 83ca6571a1d80fa6b9ff687ba1777f457c165e70 (patch) | |
| tree | a98d447b6068ff75be3105020f2a354400772ea4 | |
| parent | 8697cc3d95a9e96c7385e4586ce6dd79b4850257 (diff) | |
| parent | 37506e246dfc78b9e7bb9263249a28ddc0af26ab (diff) | |
Merge \\"Disable VT when users turn off data or hit data limit\\" into nyc-mr1-dev am: 92a07ae79d
am: 37506e246d
Change-Id: I8c3575407a785d7af9a3a9a73bd362275e55a75e
4 files changed, 44 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 7f2b81ed0901..8dcf653cc491 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -1241,6 +1241,24 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private void setNetworkTemplateEnabled(NetworkTemplate template, boolean enabled) { // TODO: reach into ConnectivityManager to proactively disable bringing // up this network, since we know that traffic will be blocked. + + if (template.getMatchRule() == MATCH_MOBILE_ALL) { + // If mobile data usage hits the limit or if the user resumes the data, we need to + // notify telephony. + final SubscriptionManager sm = SubscriptionManager.from(mContext); + final TelephonyManager tm = TelephonyManager.from(mContext); + + final int[] subIds = sm.getActiveSubscriptionIdList(); + for (int subId : subIds) { + final String subscriberId = tm.getSubscriberId(subId); + final NetworkIdentity probeIdent = new NetworkIdentity(TYPE_MOBILE, + TelephonyManager.NETWORK_TYPE_UNKNOWN, subscriberId, null, false, true); + // Template is matched when subscriber id matches. + if (template.matches(probeIdent)) { + tm.setPolicyDataEnabled(enabled, subId); + } + } + } } /** diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index dc053bf4f92a..ff082b6dd4c0 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -5538,5 +5538,22 @@ public class TelephonyManager { } return 0; } + + /** + * Policy control of data connection. Usually used when data limit is passed. + * @param enabled True if enabling the data, otherwise disabling. + * @param subId sub id + * @hide + */ + public void setPolicyDataEnabled(boolean enabled, int subId) { + try { + ITelephony service = getITelephony(); + if (service != null) { + service.setPolicyDataEnabled(enabled, subId); + } + } catch (RemoteException e) { + Log.e(TAG, "Error calling ITelephony#setPolicyDataEnabled", e); + } + } } diff --git a/telephony/java/com/android/internal/telephony/DctConstants.java b/telephony/java/com/android/internal/telephony/DctConstants.java index 8166e00f31cf..f01e4c0a8c69 100644 --- a/telephony/java/com/android/internal/telephony/DctConstants.java +++ b/telephony/java/com/android/internal/telephony/DctConstants.java @@ -105,6 +105,7 @@ public class DctConstants { public static final int EVENT_DEVICE_PROVISIONED_CHANGE = BASE + 43; public static final int EVENT_REDIRECTION_DETECTED = BASE + 44; public static final int EVENT_PCO_DATA_RECEIVED = BASE + 45; + public static final int EVENT_SET_CARRIER_DATA_ENABLED = BASE + 46; /***** Constants *****/ diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 2168b0ea80db..167e1a739ca5 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -1158,4 +1158,12 @@ interface ITelephony { * @hide */ long getVtDataUsage(); + + /** + * Policy control of data connection. Usually used when data limit is passed. + * @param enabled True if enabling the data, otherwise disabling. + * @param subId Subscription index + * @hide + */ + void setPolicyDataEnabled(boolean enabled, int subId); } |