From 8781b68e2bd6c0080e9c91544557b64783e7dffa Mon Sep 17 00:00:00 2001 From: Jack Yu Date: Fri, 8 Jul 2016 14:28:51 -0700 Subject: [PATCH] Disable VT when users turn off data or hit data limit Disable VT when users turn off data or hit data limit. If there are ongoing VT calls, we'll need to downgrade them to VoLTE calls. bug: 27316521 Change-Id: I89fe42f6cf6c419c21c4f2006e9cb43cf7e13503 --- .../net/NetworkPolicyManagerService.java | 18 ++++++++++++++++++ .../android/telephony/TelephonyManager.java | 17 +++++++++++++++++ .../internal/telephony/DctConstants.java | 1 + .../android/internal/telephony/ITelephony.aidl | 8 ++++++++ 4 files changed, 44 insertions(+) diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index f15fdd5304a1b..b22a08484b8a5 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 26ef0cbb87a53..df81d7f90008e 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 8166e00f31cfd..f01e4c0a8c692 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 2168b0ea80db8..167e1a739ca50 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); }