From a1132e9f21a562db907dc889210bfae199f8acd2 Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Wed, 24 Aug 2016 17:32:47 -0700 Subject: [PATCH] Replaced deprecated calls to INetworkPolicyListener. Test: manual BUG: 28791717 Change-Id: I23e08dc472d7d3d37f09e2811bb450e907b7bb1f --- .../settings/datausage/DataSaverBackend.java | 108 +++++++++--------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/src/com/android/settings/datausage/DataSaverBackend.java b/src/com/android/settings/datausage/DataSaverBackend.java index 8c749d74093..977f0a0caf4 100644 --- a/src/com/android/settings/datausage/DataSaverBackend.java +++ b/src/com/android/settings/datausage/DataSaverBackend.java @@ -16,13 +16,12 @@ package com.android.settings.datausage; import android.content.Context; import android.net.INetworkPolicyListener; -import android.net.INetworkPolicyManager; import android.net.NetworkPolicyManager; import android.os.Handler; import android.os.RemoteException; import android.os.ServiceManager; import android.util.Log; -import android.util.SparseBooleanArray; +import android.util.SparseIntArray; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsProto.MetricsEvent; @@ -41,16 +40,14 @@ public class DataSaverBackend { private final Handler mHandler = new Handler(); private final NetworkPolicyManager mPolicyManager; - private final INetworkPolicyManager mIPolicyManager; private final ArrayList mListeners = new ArrayList<>(); - private SparseBooleanArray mWhitelist; - private SparseBooleanArray mBlacklist; + private SparseIntArray mUidPolicies = new SparseIntArray(); + private boolean mWhitelistInitialized; + private boolean mBlacklistInitialized; // TODO: Staticize into only one. public DataSaverBackend(Context context) { mContext = context; - mIPolicyManager = INetworkPolicyManager.Stub.asInterface( - ServiceManager.getService(Context.NETWORK_POLICY_SERVICE)); mPolicyManager = NetworkPolicyManager.from(context); } @@ -83,28 +80,24 @@ public class DataSaverBackend { } public void setIsWhitelisted(int uid, String packageName, boolean whitelisted) { - mWhitelist.put(uid, whitelisted); - mPolicyManager.setUidPolicy(uid, - whitelisted ? POLICY_ALLOW_METERED_BACKGROUND : POLICY_NONE); + final int policy = whitelisted ? POLICY_ALLOW_METERED_BACKGROUND : POLICY_NONE; + mPolicyManager.setUidPolicy(uid, policy); + mUidPolicies.put(uid, policy); if (whitelisted) { MetricsLogger.action(mContext, MetricsEvent.ACTION_DATA_SAVER_WHITELIST, packageName); } } public boolean isWhitelisted(int uid) { - if (mWhitelist == null) { - loadWhitelist(); - } - return mWhitelist.get(uid); + loadWhitelist(); + return mUidPolicies.get(uid, POLICY_NONE) == POLICY_ALLOW_METERED_BACKGROUND; } public int getWhitelistedCount() { int count = 0; - if (mWhitelist == null) { - loadWhitelist(); - } - for (int i = 0; i < mWhitelist.size(); i++) { - if (mWhitelist.valueAt(i)) { + loadWhitelist(); + for (int i = 0; i < mUidPolicies.size(); i++) { + if (mUidPolicies.valueAt(i) == POLICY_ALLOW_METERED_BACKGROUND) { count++; } } @@ -112,10 +105,12 @@ public class DataSaverBackend { } private void loadWhitelist() { - mWhitelist = new SparseBooleanArray(); + if (mWhitelistInitialized) return; + for (int uid : mPolicyManager.getUidsWithPolicy(POLICY_ALLOW_METERED_BACKGROUND)) { - mWhitelist.put(uid, true); + mUidPolicies.put(uid, POLICY_ALLOW_METERED_BACKGROUND); } + mWhitelistInitialized = true; } public void refreshBlacklist() { @@ -123,28 +118,25 @@ public class DataSaverBackend { } public void setIsBlacklisted(int uid, String packageName, boolean blacklisted) { - mPolicyManager.setUidPolicy( - uid, blacklisted ? POLICY_REJECT_METERED_BACKGROUND : POLICY_NONE); + final int policy = blacklisted ? POLICY_REJECT_METERED_BACKGROUND : POLICY_NONE; + mPolicyManager.setUidPolicy(uid, policy); + mUidPolicies.put(uid, policy); if (blacklisted) { MetricsLogger.action(mContext, MetricsEvent.ACTION_DATA_SAVER_BLACKLIST, packageName); } } public boolean isBlacklisted(int uid) { - if (mBlacklist == null) { - loadBlacklist(); - } - return mBlacklist.get(uid); + loadBlacklist(); + return mUidPolicies.get(uid, POLICY_NONE) == POLICY_REJECT_METERED_BACKGROUND; } private void loadBlacklist() { - mBlacklist = new SparseBooleanArray(); - try { - for (int uid : mIPolicyManager.getUidsWithPolicy(POLICY_REJECT_METERED_BACKGROUND)) { - mBlacklist.put(uid, true); - } - } catch (RemoteException e) { + if (mBlacklistInitialized) return; + for (int uid : mPolicyManager.getUidsWithPolicy(POLICY_REJECT_METERED_BACKGROUND)) { + mUidPolicies.put(uid, POLICY_REJECT_METERED_BACKGROUND); } + mBlacklistInitialized = true; } private void handleRestrictBackgroundChanged(boolean isDataSaving) { @@ -165,35 +157,43 @@ public class DataSaverBackend { } } + private void handleUidPoliciesChanged(int uid, int newPolicy) { + loadWhitelist(); + loadBlacklist(); + + final int oldPolicy = mUidPolicies.get(uid, POLICY_NONE); + if (newPolicy == POLICY_NONE) { + mUidPolicies.delete(uid); + } else { + mUidPolicies.put(uid, newPolicy); + } + + final boolean wasWhitelisted = oldPolicy == POLICY_ALLOW_METERED_BACKGROUND; + final boolean wasBlacklisted = oldPolicy == POLICY_REJECT_METERED_BACKGROUND; + final boolean isWhitelisted = newPolicy == POLICY_ALLOW_METERED_BACKGROUND; + final boolean isBlacklisted = newPolicy == POLICY_REJECT_METERED_BACKGROUND; + + if (wasWhitelisted != isWhitelisted) { + handleWhitelistChanged(uid, isWhitelisted); + } + + if (wasBlacklisted != isBlacklisted) { + handleBlacklistChanged(uid, isBlacklisted); + } + + } + private final INetworkPolicyListener mPolicyListener = new INetworkPolicyListener.Stub() { @Override - public void onUidRulesChanged(final int uid, int uidRules) throws RemoteException { + public void onUidRulesChanged(int uid, int uidRules) throws RemoteException { } @Override - public void onRestrictBackgroundBlacklistChanged(int uid, boolean blacklisted) { - if (mBlacklist == null) { - loadBlacklist(); - } - mBlacklist.put(uid, blacklisted); + public void onUidPoliciesChanged(final int uid, final int uidPolicies) { mHandler.post(new Runnable() { @Override public void run() { - handleBlacklistChanged(uid, blacklisted); - } - }); - } - - @Override - public void onRestrictBackgroundWhitelistChanged(final int uid, final boolean whitelisted) { - if (mWhitelist == null) { - loadWhitelist(); - } - mWhitelist.put(uid, whitelisted); - mHandler.post(new Runnable() { - @Override - public void run() { - handleWhitelistChanged(uid, whitelisted); + handleUidPoliciesChanged(uid, uidPolicies); } }); }