Replaced deprecated calls to INetworkPolicyListener.

Test: manual
BUG: 28791717

Change-Id: I23e08dc472d7d3d37f09e2811bb450e907b7bb1f
This commit is contained in:
Felipe Leme
2016-08-24 17:32:47 -07:00
parent ce015fce0a
commit a1132e9f21

View File

@@ -16,13 +16,12 @@ package com.android.settings.datausage;
import android.content.Context; import android.content.Context;
import android.net.INetworkPolicyListener; import android.net.INetworkPolicyListener;
import android.net.INetworkPolicyManager;
import android.net.NetworkPolicyManager; import android.net.NetworkPolicyManager;
import android.os.Handler; import android.os.Handler;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
import android.util.Log; import android.util.Log;
import android.util.SparseBooleanArray; import android.util.SparseIntArray;
import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.internal.logging.MetricsProto.MetricsEvent;
@@ -41,16 +40,14 @@ public class DataSaverBackend {
private final Handler mHandler = new Handler(); private final Handler mHandler = new Handler();
private final NetworkPolicyManager mPolicyManager; private final NetworkPolicyManager mPolicyManager;
private final INetworkPolicyManager mIPolicyManager;
private final ArrayList<Listener> mListeners = new ArrayList<>(); private final ArrayList<Listener> mListeners = new ArrayList<>();
private SparseBooleanArray mWhitelist; private SparseIntArray mUidPolicies = new SparseIntArray();
private SparseBooleanArray mBlacklist; private boolean mWhitelistInitialized;
private boolean mBlacklistInitialized;
// TODO: Staticize into only one. // TODO: Staticize into only one.
public DataSaverBackend(Context context) { public DataSaverBackend(Context context) {
mContext = context; mContext = context;
mIPolicyManager = INetworkPolicyManager.Stub.asInterface(
ServiceManager.getService(Context.NETWORK_POLICY_SERVICE));
mPolicyManager = NetworkPolicyManager.from(context); mPolicyManager = NetworkPolicyManager.from(context);
} }
@@ -83,28 +80,24 @@ public class DataSaverBackend {
} }
public void setIsWhitelisted(int uid, String packageName, boolean whitelisted) { public void setIsWhitelisted(int uid, String packageName, boolean whitelisted) {
mWhitelist.put(uid, whitelisted); final int policy = whitelisted ? POLICY_ALLOW_METERED_BACKGROUND : POLICY_NONE;
mPolicyManager.setUidPolicy(uid, mPolicyManager.setUidPolicy(uid, policy);
whitelisted ? POLICY_ALLOW_METERED_BACKGROUND : POLICY_NONE); mUidPolicies.put(uid, policy);
if (whitelisted) { if (whitelisted) {
MetricsLogger.action(mContext, MetricsEvent.ACTION_DATA_SAVER_WHITELIST, packageName); MetricsLogger.action(mContext, MetricsEvent.ACTION_DATA_SAVER_WHITELIST, packageName);
} }
} }
public boolean isWhitelisted(int uid) { public boolean isWhitelisted(int uid) {
if (mWhitelist == null) { loadWhitelist();
loadWhitelist(); return mUidPolicies.get(uid, POLICY_NONE) == POLICY_ALLOW_METERED_BACKGROUND;
}
return mWhitelist.get(uid);
} }
public int getWhitelistedCount() { public int getWhitelistedCount() {
int count = 0; int count = 0;
if (mWhitelist == null) { loadWhitelist();
loadWhitelist(); for (int i = 0; i < mUidPolicies.size(); i++) {
} if (mUidPolicies.valueAt(i) == POLICY_ALLOW_METERED_BACKGROUND) {
for (int i = 0; i < mWhitelist.size(); i++) {
if (mWhitelist.valueAt(i)) {
count++; count++;
} }
} }
@@ -112,10 +105,12 @@ public class DataSaverBackend {
} }
private void loadWhitelist() { private void loadWhitelist() {
mWhitelist = new SparseBooleanArray(); if (mWhitelistInitialized) return;
for (int uid : mPolicyManager.getUidsWithPolicy(POLICY_ALLOW_METERED_BACKGROUND)) { 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() { public void refreshBlacklist() {
@@ -123,28 +118,25 @@ public class DataSaverBackend {
} }
public void setIsBlacklisted(int uid, String packageName, boolean blacklisted) { public void setIsBlacklisted(int uid, String packageName, boolean blacklisted) {
mPolicyManager.setUidPolicy( final int policy = blacklisted ? POLICY_REJECT_METERED_BACKGROUND : POLICY_NONE;
uid, blacklisted ? POLICY_REJECT_METERED_BACKGROUND : POLICY_NONE); mPolicyManager.setUidPolicy(uid, policy);
mUidPolicies.put(uid, policy);
if (blacklisted) { if (blacklisted) {
MetricsLogger.action(mContext, MetricsEvent.ACTION_DATA_SAVER_BLACKLIST, packageName); MetricsLogger.action(mContext, MetricsEvent.ACTION_DATA_SAVER_BLACKLIST, packageName);
} }
} }
public boolean isBlacklisted(int uid) { public boolean isBlacklisted(int uid) {
if (mBlacklist == null) { loadBlacklist();
loadBlacklist(); return mUidPolicies.get(uid, POLICY_NONE) == POLICY_REJECT_METERED_BACKGROUND;
}
return mBlacklist.get(uid);
} }
private void loadBlacklist() { private void loadBlacklist() {
mBlacklist = new SparseBooleanArray(); if (mBlacklistInitialized) return;
try { for (int uid : mPolicyManager.getUidsWithPolicy(POLICY_REJECT_METERED_BACKGROUND)) {
for (int uid : mIPolicyManager.getUidsWithPolicy(POLICY_REJECT_METERED_BACKGROUND)) { mUidPolicies.put(uid, POLICY_REJECT_METERED_BACKGROUND);
mBlacklist.put(uid, true);
}
} catch (RemoteException e) {
} }
mBlacklistInitialized = true;
} }
private void handleRestrictBackgroundChanged(boolean isDataSaving) { 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() { private final INetworkPolicyListener mPolicyListener = new INetworkPolicyListener.Stub() {
@Override @Override
public void onUidRulesChanged(final int uid, int uidRules) throws RemoteException { public void onUidRulesChanged(int uid, int uidRules) throws RemoteException {
} }
@Override @Override
public void onRestrictBackgroundBlacklistChanged(int uid, boolean blacklisted) { public void onUidPoliciesChanged(final int uid, final int uidPolicies) {
if (mBlacklist == null) {
loadBlacklist();
}
mBlacklist.put(uid, blacklisted);
mHandler.post(new Runnable() { mHandler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
handleBlacklistChanged(uid, blacklisted); handleUidPoliciesChanged(uid, uidPolicies);
}
});
}
@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);
} }
}); });
} }