diff options
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 {  |