summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/net/INetworkPolicyListener.aidl1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java3
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java8
-rw-r--r--services/core/java/com/android/server/job/controllers/ConnectivityController.java5
-rw-r--r--services/core/java/com/android/server/net/NetworkPolicyManagerService.java36
5 files changed, 50 insertions, 3 deletions
diff --git a/core/java/android/net/INetworkPolicyListener.aidl b/core/java/android/net/INetworkPolicyListener.aidl
index 812f1fe5e563..93463b472fa4 100644
--- a/core/java/android/net/INetworkPolicyListener.aidl
+++ b/core/java/android/net/INetworkPolicyListener.aidl
@@ -23,5 +23,6 @@ oneway interface INetworkPolicyListener {
void onMeteredIfacesChanged(in String[] meteredIfaces);
void onRestrictBackgroundChanged(boolean restrictBackground);
void onRestrictBackgroundWhitelistChanged(int uid, boolean whitelisted);
+ void onRestrictBackgroundBlacklistChanged(int uid, boolean blacklisted);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java
index e6e189f0ffd8..cc02ece48a13 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java
@@ -93,6 +93,9 @@ public class DataSaverController {
@Override
public void onRestrictBackgroundWhitelistChanged(int uid, boolean whitelisted) {
}
+ @Override
+ public void onRestrictBackgroundBlacklistChanged(int uid, boolean blacklisted) {
+ }
};
public interface Listener {
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 53b29427b29c..b5c2b89197ce 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -1445,6 +1445,14 @@ public class ConnectivityService extends IConnectivityManager.Stub
+ whitelisted + ")");
}
}
+ @Override
+ public void onRestrictBackgroundBlacklistChanged(int uid, boolean blacklisted) {
+ if (LOGD_RULES) {
+ // caller is NPMS, since we only register with them
+ log("onRestrictBackgroundBlacklistChanged(uid=" + uid + ", blacklisted="
+ + blacklisted + ")");
+ }
+ }
};
/**
diff --git a/services/core/java/com/android/server/job/controllers/ConnectivityController.java b/services/core/java/com/android/server/job/controllers/ConnectivityController.java
index 9fd22686a9a0..7d28633104cd 100644
--- a/services/core/java/com/android/server/job/controllers/ConnectivityController.java
+++ b/services/core/java/com/android/server/job/controllers/ConnectivityController.java
@@ -178,6 +178,11 @@ public class ConnectivityController extends StateController implements
public void onRestrictBackgroundWhitelistChanged(int uid, boolean whitelisted) {
updateTrackedJobs(uid);
}
+
+ @Override
+ public void onRestrictBackgroundBlacklistChanged(int uid, boolean blacklisted) {
+ updateTrackedJobs(uid);
+ }
};
@Override
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 4bdc23730fbe..67cd7c32483b 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -266,6 +266,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
private static final int MSG_RESTRICT_BACKGROUND_WHITELIST_CHANGED = 9;
private static final int MSG_UPDATE_INTERFACE_QUOTA = 10;
private static final int MSG_REMOVE_INTERFACE_QUOTA = 11;
+ private static final int MSG_RESTRICT_BACKGROUND_BLACKLIST_CHANGED = 12;
private final Context mContext;
private final IActivityManager mActivityManager;
@@ -1707,9 +1708,14 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
private void setUidPolicyUncheckedLocked(int uid, int oldPolicy, int policy, boolean persist) {
setUidPolicyUncheckedLocked(uid, policy, persist);
+ final boolean isBlacklisted = policy == POLICY_REJECT_METERED_BACKGROUND;
+ mHandler.obtainMessage(MSG_RESTRICT_BACKGROUND_BLACKLIST_CHANGED, uid,
+ isBlacklisted ? 1 : 0).sendToTarget();
+
+ final boolean wasBlacklisted = oldPolicy == POLICY_REJECT_METERED_BACKGROUND;
// Checks if app was added or removed to the blacklist.
- if ((oldPolicy == POLICY_NONE && policy == POLICY_REJECT_METERED_BACKGROUND)
- || (oldPolicy == POLICY_REJECT_METERED_BACKGROUND && policy == POLICY_NONE)) {
+ if ((oldPolicy == POLICY_NONE && isBlacklisted)
+ || (wasBlacklisted && policy == POLICY_NONE)) {
mHandler.obtainMessage(MSG_RESTRICT_BACKGROUND_WHITELIST_CHANGED, uid, 1, null)
.sendToTarget();
}
@@ -3096,6 +3102,16 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
}
+ private void dispatchRestrictBackgroundBlacklistChanged(INetworkPolicyListener listener,
+ int uid, boolean blacklisted) {
+ if (listener != null) {
+ try {
+ listener.onRestrictBackgroundBlacklistChanged(uid, blacklisted);
+ } catch (RemoteException ignored) {
+ }
+ }
+ }
+
private Handler.Callback mHandlerCallback = new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
@@ -3186,7 +3202,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
mListeners.finishBroadcast();
}
-
final PackageManager pm = mContext.getPackageManager();
final String[] packages = pm.getPackagesForUid(uid);
if (changed && packages != null) {
@@ -3202,6 +3217,21 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
return true;
}
+ case MSG_RESTRICT_BACKGROUND_BLACKLIST_CHANGED: {
+ final int uid = msg.arg1;
+ final boolean blacklisted = msg.arg2 == 1;
+
+ dispatchRestrictBackgroundBlacklistChanged(mConnectivityListener, uid,
+ blacklisted);
+ final int length = mListeners.beginBroadcast();
+ for (int i = 0; i < length; i++) {
+ final INetworkPolicyListener listener = mListeners.getBroadcastItem(i);
+ dispatchRestrictBackgroundBlacklistChanged(listener, uid,
+ blacklisted);
+ }
+ mListeners.finishBroadcast();
+ return true;
+ }
case MSG_ADVISE_PERSIST_THRESHOLD: {
final long lowestRule = (Long) msg.obj;
try {