Merge "Apply dynamic deny list into data usage state" into main

This commit is contained in:
Wesley Wang
2023-11-15 12:53:25 +00:00
committed by Android (Google) Code Review
8 changed files with 432 additions and 59 deletions

View File

@@ -44,6 +44,7 @@ import com.android.settings.applications.AppInfoBase;
import com.android.settings.datausage.lib.AppDataUsageDetailsRepository;
import com.android.settings.datausage.lib.NetworkTemplates;
import com.android.settings.datausage.lib.NetworkUsageDetailsData;
import com.android.settings.fuelgauge.datasaver.DynamicDenylistManager;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.AppItem;
@@ -325,7 +326,8 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
private boolean getAppRestrictBackground() {
final int uid = mAppItem.key;
final int uidPolicy = services.mPolicyManager.getUidPolicy(uid);
return (uidPolicy & POLICY_REJECT_METERED_BACKGROUND) != 0;
return (uidPolicy & POLICY_REJECT_METERED_BACKGROUND) != 0
&& DynamicDenylistManager.getInstance(mContext).isInManualDenylist(uid);
}
private boolean getUnrestrictData() {

View File

@@ -23,6 +23,7 @@ import android.content.Context;
import android.net.NetworkPolicyManager;
import android.util.SparseIntArray;
import com.android.settings.fuelgauge.datasaver.DynamicDenylistManager;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.utils.ThreadUtils;
@@ -39,6 +40,7 @@ public class DataSaverBackend {
private final MetricsFeatureProvider mMetricsFeatureProvider;
private final NetworkPolicyManager mPolicyManager;
private final DynamicDenylistManager mDynamicDenylistManager;
private final ArrayList<Listener> mListeners = new ArrayList<>();
private SparseIntArray mUidPolicies = new SparseIntArray();
private boolean mAllowlistInitialized;
@@ -50,6 +52,7 @@ public class DataSaverBackend {
mContext = context.getApplicationContext();
mMetricsFeatureProvider = FeatureFactory.getFeatureFactory().getMetricsFeatureProvider();
mPolicyManager = NetworkPolicyManager.from(mContext);
mDynamicDenylistManager = DynamicDenylistManager.getInstance(mContext);
}
public void addListener(Listener listener) {
@@ -83,7 +86,7 @@ public class DataSaverBackend {
public void setIsAllowlisted(int uid, String packageName, boolean allowlisted) {
final int policy = allowlisted ? POLICY_ALLOW_METERED_BACKGROUND : POLICY_NONE;
mPolicyManager.setUidPolicy(uid, policy);
mDynamicDenylistManager.setUidPolicyLocked(uid, policy);
mUidPolicies.put(uid, policy);
if (allowlisted) {
mMetricsFeatureProvider.action(
@@ -113,7 +116,7 @@ public class DataSaverBackend {
public void setIsDenylisted(int uid, String packageName, boolean denylisted) {
final int policy = denylisted ? POLICY_REJECT_METERED_BACKGROUND : POLICY_NONE;
mPolicyManager.setUidPolicy(uid, policy);
mDynamicDenylistManager.setUidPolicyLocked(uid, policy);
mUidPolicies.put(uid, policy);
if (denylisted) {
mMetricsFeatureProvider.action(
@@ -123,7 +126,8 @@ public class DataSaverBackend {
public boolean isDenylisted(int uid) {
loadDenylist();
return mUidPolicies.get(uid, POLICY_NONE) == POLICY_REJECT_METERED_BACKGROUND;
return mUidPolicies.get(uid, POLICY_NONE) == POLICY_REJECT_METERED_BACKGROUND
&& mDynamicDenylistManager.isInManualDenylist(uid);
}
private void loadDenylist() {