Add a protection for the null UID corner case

Test: atest SettingsRoboTests:com.android.settings.fuelgauge.datasaver
Fix: 324571889
Change-Id: Ia5a63dc360d4b518f2b86315b40bc2db12f007ed
This commit is contained in:
ykhung
2024-02-15 09:10:33 +08:00
committed by YK Hung
parent 371c96cbc7
commit 15e853a1b9
2 changed files with 12 additions and 4 deletions

View File

@@ -37,13 +37,14 @@ import java.util.List;
import java.util.Set;
/** A class to dynamically manage per apps {@link NetworkPolicyManager} POLICY_ flags. */
public final class DynamicDenylistManager {
public class DynamicDenylistManager {
private static final String TAG = "DynamicDenylistManager";
private static final String PREF_KEY_MANUAL_DENY = "manual_denylist_preference";
private static final String PREF_KEY_DYNAMIC_DENY = "dynamic_denylist_preference";
private static DynamicDenylistManager sInstance;
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
public static DynamicDenylistManager sInstance = null;
private final Context mContext;
private final NetworkPolicyManager mNetworkPolicyManager;
@@ -115,7 +116,11 @@ public final class DynamicDenylistManager {
final ArraySet<Integer> failedUids = new ArraySet<>();
synchronized (mLock) {
// Set new added UIDs into REJECT policy.
for (int uid : denylistTargetUids) {
for (Integer uidInteger : denylistTargetUids) {
if (uidInteger == null) {
continue;
}
final int uid = uidInteger.intValue();
if (!lastDynamicDenylistUids.contains(uid)) {
try {
mNetworkPolicyManager.setUidPolicy(uid, POLICY_REJECT_METERED_BACKGROUND);

View File

@@ -177,8 +177,11 @@ public class DynamicDenylistManagerTest {
@Test
public void setDenylist_uidDeniedAlready_doNothing() {
initDynamicDenylistManager(new int[] {FAKE_UID_1_INT});
final ArraySet uids = new ArraySet<>();
uids.add(FAKE_UID_1_INT);
uids.add(null);
setDenylist(new ArraySet<>(List.of(FAKE_UID_1_INT)));
setDenylist(uids);
verify(mNetworkPolicyManager, never()).setUidPolicy(anyInt(), anyInt());
}