From 9842878b75cd0635e3bece30c151eb4ed6d623b1 Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Mon, 25 Apr 2016 14:41:31 -0700 Subject: [PATCH] Tethering and Data Saver: There Can Be Only One! If tethering is on when Data Saver mode is turned on, tethering should be disabled, and vice-versa. BUG: 28313291 Change-Id: I7f3dadbd97ea1492ab76b41043dea7487c1db02d --- .../android/server/ConnectivityService.java | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index f06583bdf1..0287332bb5 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -31,7 +31,6 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; import static android.net.NetworkPolicyManager.RULE_ALLOW_ALL; import static android.net.NetworkPolicyManager.RULE_REJECT_ALL; import static android.net.NetworkPolicyManager.RULE_REJECT_METERED; - import android.annotation.Nullable; import android.app.BroadcastOptions; import android.app.Notification; @@ -1382,6 +1381,10 @@ public class ConnectivityService extends IConnectivityManager.Stub if (LOGD_RULES) { log("onRestrictBackgroundChanged(restrictBackground=" + restrictBackground + ")"); } + if (restrictBackground) { + log("onRestrictBackgroundChanged(true): disabling tethering"); + mTethering.untetherAll(); + } } @Override @@ -1813,6 +1816,14 @@ public class ConnectivityService extends IConnectivityManager.Stub pw.decreaseIndent(); pw.println(); + pw.println("Metered Interfaces:"); + pw.increaseIndent(); + for (String value : mMeteredIfaces) { + pw.println(value); + } + pw.decreaseIndent(); + pw.println(); + pw.println("Network Requests:"); pw.increaseIndent(); for (NetworkRequestInfo nri : mNetworkRequests.values()) { @@ -2568,7 +2579,14 @@ public class ConnectivityService extends IConnectivityManager.Stub public int tether(String iface) { ConnectivityManager.enforceTetherChangePermission(mContext); if (isTetheringSupported()) { - return mTethering.tether(iface); + final int status = mTethering.tether(iface); + if (status == ConnectivityManager.TETHER_ERROR_NO_ERROR) { + try { + mPolicyManager.onTetheringChanged(iface, true); + } catch (RemoteException e) { + } + } + return status; } else { return ConnectivityManager.TETHER_ERROR_UNSUPPORTED; } @@ -2579,7 +2597,14 @@ public class ConnectivityService extends IConnectivityManager.Stub ConnectivityManager.enforceTetherChangePermission(mContext); if (isTetheringSupported()) { - return mTethering.untether(iface); + final int status = mTethering.untether(iface); + if (status == ConnectivityManager.TETHER_ERROR_NO_ERROR) { + try { + mPolicyManager.onTetheringChanged(iface, false); + } catch (RemoteException e) { + } + } + return status; } else { return ConnectivityManager.TETHER_ERROR_UNSUPPORTED; }