Add flag to force expire the app optimization mode event.

Bug: 347444433
Test: atest
Change-Id: Id502607ed6c07870d14346656a65ceccb756b78f
This commit is contained in:
mxyyiyi
2024-06-17 13:55:27 +08:00
parent 3576f4840d
commit 08907935df
5 changed files with 39 additions and 1 deletions

View File

@@ -39,6 +39,9 @@ public interface PowerUsageFeatureProvider {
/** Check whether the battery tips card is enabled in the battery usage page */ /** Check whether the battery tips card is enabled in the battery usage page */
boolean isBatteryTipsEnabled(); 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 */ /** Check whether to log the optimization mode of app entry in period job */
boolean isAppOptimizationModeLogged(); boolean isAppOptimizationModeLogged();

View File

@@ -83,6 +83,11 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider
return false; return false;
} }
@Override
public boolean isForceExpireAppOptimizationModeEnabled() {
return false;
}
@Override @Override
public boolean isAppOptimizationModeLogged() { public boolean isAppOptimizationModeLogged() {
return false; return false;

View File

@@ -25,6 +25,7 @@ import androidx.annotation.VisibleForTesting
import com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.Action import com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.Action
import com.android.settings.fuelgauge.BatteryOptimizeUtils import com.android.settings.fuelgauge.BatteryOptimizeUtils
import com.android.settings.fuelgauge.BatteryUtils 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. */ /** A util to store and update app optimization mode expiration event data. */
object AppOptModeSharedPreferencesUtils { object AppOptModeSharedPreferencesUtils {
@@ -74,10 +75,14 @@ object AppOptModeSharedPreferencesUtils {
@JvmStatic @JvmStatic
fun resetExpiredAppOptModeBeforeTimestamp(context: Context, queryTimestampMs: Long) = fun resetExpiredAppOptModeBeforeTimestamp(context: Context, queryTimestampMs: Long) =
synchronized(appOptimizationModeLock) { synchronized(appOptimizationModeLock) {
val forceExpireEnabled =
featureFactory
.powerUsageFeatureProvider.isForceExpireAppOptimizationModeEnabled
val eventsMap = getAppOptModeEventsMap(context) val eventsMap = getAppOptModeEventsMap(context)
val expirationUids = ArrayList<Int>(eventsMap.size) val expirationUids = ArrayList<Int>(eventsMap.size)
for ((uid, event) in eventsMap) { 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 continue
} }
updateBatteryOptimizationMode( updateBatteryOptimizationMode(

View File

@@ -77,6 +77,11 @@ public class PowerUsageFeatureProviderImplTest {
assertThat(mPowerFeatureProvider.isBatteryTipsEnabled()).isFalse(); assertThat(mPowerFeatureProvider.isBatteryTipsEnabled()).isFalse();
} }
@Test
public void isForceExpireAppOptimizationModeEnabled_returnFalse() {
assertThat(mPowerFeatureProvider.isForceExpireAppOptimizationModeEnabled()).isFalse();
}
@Test @Test
public void isAppOptimizationModeLogged_returnFalse() { public void isAppOptimizationModeLogged_returnFalse() {
assertThat(mPowerFeatureProvider.isAppOptimizationModeLogged()).isFalse(); assertThat(mPowerFeatureProvider.isAppOptimizationModeLogged()).isFalse();

View File

@@ -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_UNKNOWN
import com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_UNRESTRICTED import com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_UNRESTRICTED
import com.android.settings.fuelgauge.batteryusage.AppOptModeSharedPreferencesUtils.UNLIMITED_EXPIRE_TIME import com.android.settings.fuelgauge.batteryusage.AppOptModeSharedPreferencesUtils.UNLIMITED_EXPIRE_TIME
import com.android.settings.testutils.FakeFeatureFactory
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import org.junit.After import org.junit.After
import org.junit.Before import org.junit.Before
@@ -51,9 +52,14 @@ class AppOptModeSharedPreferencesUtilsTest {
@Spy @Spy
private var testBatteryOptimizeUtils = spy(BatteryOptimizeUtils(context, UID, PACKAGE_NAME)) private var testBatteryOptimizeUtils = spy(BatteryOptimizeUtils(context, UID, PACKAGE_NAME))
private lateinit var featureFactory: FakeFeatureFactory
@Before @Before
fun setup() { fun setup() {
AppOptModeSharedPreferencesUtils.clearAll(context) AppOptModeSharedPreferencesUtils.clearAll(context)
featureFactory = FakeFeatureFactory.setupForTest()
whenever(featureFactory.powerUsageFeatureProvider.isForceExpireAppOptimizationModeEnabled)
.thenReturn(false)
} }
@After @After
@@ -126,6 +132,20 @@ class AppOptModeSharedPreferencesUtilsTest {
assertThat(AppOptModeSharedPreferencesUtils.getAllEvents(context)).isEmpty() 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 @Test
fun resetExpiredAppOptModeBeforeTimestamp_noExpiredData_verifyData() { fun resetExpiredAppOptModeBeforeTimestamp_noExpiredData_verifyData() {
insertAppOptModeEventForTest(expirationTime = 1000L) insertAppOptModeEventForTest(expirationTime = 1000L)