Replaced deprecated calls to INetworkPolicyListener.
Test: manual BUG: 28791717 Change-Id: I23e08dc472d7d3d37f09e2811bb450e907b7bb1f
This commit is contained in:
@@ -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++) {
|
||||||
for (int i = 0; i < mWhitelist.size(); i++) {
|
if (mUidPolicies.valueAt(i) == POLICY_ALLOW_METERED_BACKGROUND) {
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user