diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java index f63b64993fb..0132273a57e 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java @@ -39,6 +39,9 @@ public interface PowerUsageFeatureProvider { /** Check whether the battery tips card is enabled in the battery usage page */ boolean isBatteryTipsEnabled(); + /** Check whether force expire the app optimization mode. */ + boolean isForceExpireAppOptimizationModeEnabled(); + /** Check whether to log the optimization mode of app entry in period job */ boolean isAppOptimizationModeLogged(); diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java index cc6659a5be5..1675ce6fb41 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java @@ -83,6 +83,11 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider return false; } + @Override + public boolean isForceExpireAppOptimizationModeEnabled() { + return false; + } + @Override public boolean isAppOptimizationModeLogged() { return false; diff --git a/src/com/android/settings/fuelgauge/batteryusage/AppOptModeSharedPreferencesUtils.kt b/src/com/android/settings/fuelgauge/batteryusage/AppOptModeSharedPreferencesUtils.kt index 1111bd4da64..afff1c9a1bb 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/AppOptModeSharedPreferencesUtils.kt +++ b/src/com/android/settings/fuelgauge/batteryusage/AppOptModeSharedPreferencesUtils.kt @@ -25,6 +25,7 @@ import androidx.annotation.VisibleForTesting import com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.Action import com.android.settings.fuelgauge.BatteryOptimizeUtils import com.android.settings.fuelgauge.BatteryUtils +import com.android.settings.overlay.FeatureFactory.Companion.featureFactory /** A util to store and update app optimization mode expiration event data. */ object AppOptModeSharedPreferencesUtils { @@ -74,10 +75,14 @@ object AppOptModeSharedPreferencesUtils { @JvmStatic fun resetExpiredAppOptModeBeforeTimestamp(context: Context, queryTimestampMs: Long) = synchronized(appOptimizationModeLock) { + val forceExpireEnabled = + featureFactory + .powerUsageFeatureProvider.isForceExpireAppOptimizationModeEnabled val eventsMap = getAppOptModeEventsMap(context) val expirationUids = ArrayList(eventsMap.size) for ((uid, event) in eventsMap) { - if (event.expirationTime > queryTimestampMs) { + // Not reset the mode if forceExpireEnabled is false and not expired. + if (!forceExpireEnabled && event.expirationTime > queryTimestampMs) { continue } updateBatteryOptimizationMode( diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java index 354afd0ef7a..6b32ff54c57 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java @@ -77,6 +77,11 @@ public class PowerUsageFeatureProviderImplTest { assertThat(mPowerFeatureProvider.isBatteryTipsEnabled()).isFalse(); } + @Test + public void isForceExpireAppOptimizationModeEnabled_returnFalse() { + assertThat(mPowerFeatureProvider.isForceExpireAppOptimizationModeEnabled()).isFalse(); + } + @Test public void isAppOptimizationModeLogged_returnFalse() { assertThat(mPowerFeatureProvider.isAppOptimizationModeLogged()).isFalse(); diff --git a/tests/unit/src/com/android/settings/fuelgauge/batteryusage/AppOptModeSharedPreferencesUtilsTest.kt b/tests/unit/src/com/android/settings/fuelgauge/batteryusage/AppOptModeSharedPreferencesUtilsTest.kt index 76ae4911dfa..94f082d4eac 100644 --- a/tests/unit/src/com/android/settings/fuelgauge/batteryusage/AppOptModeSharedPreferencesUtilsTest.kt +++ b/tests/unit/src/com/android/settings/fuelgauge/batteryusage/AppOptModeSharedPreferencesUtilsTest.kt @@ -26,6 +26,7 @@ import com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_RESTRICTED import com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_UNKNOWN import com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_UNRESTRICTED import com.android.settings.fuelgauge.batteryusage.AppOptModeSharedPreferencesUtils.UNLIMITED_EXPIRE_TIME +import com.android.settings.testutils.FakeFeatureFactory import com.google.common.truth.Truth.assertThat import org.junit.After import org.junit.Before @@ -51,9 +52,14 @@ class AppOptModeSharedPreferencesUtilsTest { @Spy private var testBatteryOptimizeUtils = spy(BatteryOptimizeUtils(context, UID, PACKAGE_NAME)) + private lateinit var featureFactory: FakeFeatureFactory + @Before fun setup() { AppOptModeSharedPreferencesUtils.clearAll(context) + featureFactory = FakeFeatureFactory.setupForTest() + whenever(featureFactory.powerUsageFeatureProvider.isForceExpireAppOptimizationModeEnabled) + .thenReturn(false) } @After @@ -126,6 +132,20 @@ class AppOptModeSharedPreferencesUtilsTest { assertThat(AppOptModeSharedPreferencesUtils.getAllEvents(context)).isEmpty() } + @Test + fun resetExpiredAppOptModeBeforeTimestamp_forceExpiredData_verifyEmptyList() { + whenever(featureFactory.powerUsageFeatureProvider.isForceExpireAppOptimizationModeEnabled) + .thenReturn(true) + insertAppOptModeEventForTest(expirationTime = 1000L) + + AppOptModeSharedPreferencesUtils.resetExpiredAppOptModeBeforeTimestamp( + context, + queryTimestampMs = 999L + ) + + assertThat(AppOptModeSharedPreferencesUtils.getAllEvents(context)).isEmpty() + } + @Test fun resetExpiredAppOptModeBeforeTimestamp_noExpiredData_verifyData() { insertAppOptModeEventForTest(expirationTime = 1000L)