Merge "Tethering and Data Saver: There Can Be Only One!" into nyc-dev am: 0db93ce

am: 3b17597

* commit '3b17597fc5536c279e77d79d5e3d2ee39b60a67b':
  Tethering and Data Saver: There Can Be Only One!

Change-Id: Idb0ab16443ca061f97ed2f12e0ee01d9fa61b187
This commit is contained in:
TreeHugger Robot
2016-04-27 23:40:42 +00:00
committed by android-build-merger
4 changed files with 50 additions and 3 deletions

View File

@@ -52,6 +52,9 @@ interface INetworkPolicyManager {
void setRestrictBackground(boolean restrictBackground);
boolean getRestrictBackground();
/** Callback used to change internal state on tethering */
void onTetheringChanged(String iface, boolean tethering);
/** Control which applications can be exempt from background data restrictions */
void addRestrictBackgroundWhitelistedUid(int uid);
void removeRestrictBackgroundWhitelistedUid(int uid);

View File

@@ -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;
}

View File

@@ -610,6 +610,13 @@ public class Tethering extends BaseNetworkObserver {
return ConnectivityManager.TETHER_ERROR_NO_ERROR;
}
public void untetherAll() {
if (DBG) Log.d(TAG, "Untethering " + mIfaces);
for (String iface : mIfaces.keySet()) {
untether(iface);
}
}
public int getLastTetherError(String iface) {
TetherInterfaceSM sm = null;
synchronized (mPublicSync) {

View File

@@ -1898,6 +1898,18 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
}
@Override
public void onTetheringChanged(String iface, boolean tethering) {
// No need to enforce permission because setRestrictBackground() will do it.
if (LOGD) Log.d(TAG, "onTetherStateChanged(" + iface + ", " + tethering + ")");
synchronized (mRulesLock) {
if (mRestrictBackground && tethering) {
Log.d(TAG, "Tethering on (" + iface +"); disable Data Saver");
setRestrictBackground(false);
}
}
}
@Override
public void setRestrictBackground(boolean restrictBackground) {
mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);