Merge "Reset the dynamic set denylist after reboot the device" into main
diff --git a/src/com/android/settings/fuelgauge/BatterySettingsMigrateChecker.java b/src/com/android/settings/fuelgauge/BatterySettingsMigrateChecker.java
index dd49c8b..066e0fc 100644
--- a/src/com/android/settings/fuelgauge/BatterySettingsMigrateChecker.java
+++ b/src/com/android/settings/fuelgauge/BatterySettingsMigrateChecker.java
@@ -51,8 +51,7 @@
context = context.getApplicationContext();
verifySaverConfiguration(context);
verifyBatteryOptimizeModes(context);
- // Initialize and sync settings into SharedPreferences for migration.
- DynamicDenylistManager.getInstance(context);
+ DynamicDenylistManager.getInstance(context).onBootComplete();
}
/** Avoid users set important apps into the unexpected battery optimize modes */
diff --git a/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManager.java b/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManager.java
index 3ac9987..4a25238 100644
--- a/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManager.java
+++ b/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManager.java
@@ -139,16 +139,25 @@
return;
}
synchronized (mLock) {
- for (int uid : mNetworkPolicyManager
- .getUidsWithPolicy(POLICY_REJECT_METERED_BACKGROUND)) {
- if (!getDenylistAllUids(getManualDenylistPref()).contains(uid)) {
- mNetworkPolicyManager.setUidPolicy(uid, POLICY_NONE);
+ final int[] uids = mNetworkPolicyManager
+ .getUidsWithPolicy(POLICY_REJECT_METERED_BACKGROUND);
+ if (uids != null && uids.length != 0) {
+ for (int uid : uids) {
+ if (!getDenylistAllUids(getManualDenylistPref()).contains(uid)) {
+ mNetworkPolicyManager.setUidPolicy(uid, POLICY_NONE);
+ }
}
}
}
clearSharedPreferences();
}
+ /** Reset the POLICY_REJECT_METERED uids when device is boot completed. */
+ public void onBootComplete() {
+ resetDenylistIfNeeded(/* packageName= */ null, /* force= */ true);
+ syncPolicyIfNeeded();
+ }
+
/** Dump the data stored in the {@link SharedPreferences}. */
public void dump(PrintWriter writer) {
writer.println("Dump of DynamicDenylistManager:");
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManagerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManagerTest.java
index 06790bf..c29541c 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManagerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManagerTest.java
@@ -393,6 +393,27 @@
assertThat(dumpResults.contains("DynamicDenylist: null")).isTrue();
}
+ @Test
+ public void onBootComplete_resetIntoManualMode() {
+ initDynamicDenylistManager(new int[] {FAKE_UID_1_INT});
+ setDenylist(new ArraySet<>(List.of(FAKE_UID_2_INT)));
+ // Ensure the testing environment for manual denylist.
+ assertThat(mManualDenyListPref.getAll()).hasSize(2);
+ assertTrue(mManualDenyListPref.contains(PREF_KEY_MANUAL_DENYLIST_SYNCED));
+ assertTrue(mManualDenyListPref.contains(FAKE_UID_1));
+ // Ensure the testing environment for dynamic denylist.
+ assertThat(mDynamicDenyListPref.getAll()).hasSize(1);
+
+ mDynamicDenylistManager.onBootComplete();
+
+ // Keep the users set uids in the manual denylist.
+ assertThat(mManualDenyListPref.getAll()).hasSize(2);
+ assertTrue(mManualDenyListPref.contains(PREF_KEY_MANUAL_DENYLIST_SYNCED));
+ assertTrue(mManualDenyListPref.contains(FAKE_UID_1));
+ // Clear the uids in the dynamic denylist.
+ assertThat(mDynamicDenyListPref.getAll()).isEmpty();
+ }
+
private void initDynamicDenylistManager(int[] preload) {
initDynamicDenylistManager(preload, preload);
}