Add PowerSaveWhitelistExceptIdle as Optimizted modes condition

- Check PowerSaveWhitelistExceptIdle list before update each apps
 optimizaton mode to avoid duplicate remove action
 - Make those apps which under PowerSaveWhitelistExceptIdle list keep at
 optimized mode only

BYPASS_INCLUSIVE_LANGUAGE_REASON=legacy naming, not edit by this code change


Bug: 199892006
Test: make SettingsRoboTests
Change-Id: I3cd10cf51b5132fc12a83e9554801ec4e8578cd1
Merged-In: I3cd10cf51b5132fc12a83e9554801ec4e8578cd1
This commit is contained in:
Wesley.CW Wang
2021-09-15 22:56:38 +08:00
committed by YUKAI HUNG
parent e5644441dd
commit e7cca4cd81
10 changed files with 76 additions and 5 deletions

View File

@@ -19,8 +19,8 @@ package com.android.settings.fuelgauge;
import android.annotation.UserIdInt; import android.annotation.UserIdInt;
import android.app.Activity; import android.app.Activity;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.settings.SettingsEnums;
import android.app.backup.BackupManager; import android.app.backup.BackupManager;
import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
@@ -361,8 +361,10 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
final String stateString; final String stateString;
final String footerString; final String footerString;
if (!mBatteryOptimizeUtils.isValidPackageName()) { if (!mBatteryOptimizeUtils.isValidPackageName()
//Present optimized only string when the package name is invalid. || mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()) {
// Present optimized only string when the package name is invalid or
// it's in allow list not idle app.
stateString = context.getString(R.string.manager_battery_usage_optimized_only); stateString = context.getString(R.string.manager_battery_usage_optimized_only);
footerString = context.getString( footerString = context.getString(
R.string.manager_battery_usage_footer_limited, stateString); R.string.manager_battery_usage_footer_limited, stateString);

View File

@@ -130,6 +130,13 @@ public class BatteryOptimizeUtils {
|| mPowerAllowListBackend.isDefaultActiveApp(mPackageName); || mPowerAllowListBackend.isDefaultActiveApp(mPackageName);
} }
/**
* Return {@code true} if this package is in allow list except idle app.
*/
public boolean isAllowlistedExceptIdleApp() {
return mPowerAllowListBackend.isAllowlistedExceptIdle(mPackageName);
}
String getPackageName() { String getPackageName() {
return mPackageName == null ? UNKNOWN_PACKAGE : mPackageName; return mPackageName == null ? UNKNOWN_PACKAGE : mPackageName;
} }

View File

@@ -57,6 +57,10 @@ public class OptimizedPreferenceController extends AbstractPreferenceController
Log.d(TAG, "is system or default app, disable pref"); Log.d(TAG, "is system or default app, disable pref");
((RadioButtonPreference) preference).setChecked(false); ((RadioButtonPreference) preference).setChecked(false);
preference.setEnabled(false); preference.setEnabled(false);
} else if (mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()) {
Log.d(TAG, "in allow list not idle app, optimized states only");
preference.setEnabled(true);
((RadioButtonPreference) preference).setChecked(true);
} else if (mBatteryOptimizeUtils.getAppOptimizationMode() } else if (mBatteryOptimizeUtils.getAppOptimizationMode()
== BatteryOptimizeUtils.MODE_OPTIMIZED) { == BatteryOptimizeUtils.MODE_OPTIMIZED) {
Log.d(TAG, "is optimized states"); Log.d(TAG, "is optimized states");

View File

@@ -55,6 +55,9 @@ public class RestrictedPreferenceController extends AbstractPreferenceController
Log.d(TAG, "is system or default app, disable pref"); Log.d(TAG, "is system or default app, disable pref");
((RadioButtonPreference) preference).setChecked(false); ((RadioButtonPreference) preference).setChecked(false);
preference.setEnabled(false); preference.setEnabled(false);
} else if (mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()) {
Log.d(TAG, "in allow list not idle app, disable perf");
preference.setEnabled(false);
} else if (mBatteryOptimizeUtils.getAppOptimizationMode() } else if (mBatteryOptimizeUtils.getAppOptimizationMode()
== BatteryOptimizeUtils.MODE_RESTRICTED) { == BatteryOptimizeUtils.MODE_RESTRICTED) {
Log.d(TAG, "is restricted states"); Log.d(TAG, "is restricted states");

View File

@@ -53,6 +53,9 @@ public class UnrestrictedPreferenceController extends AbstractPreferenceControll
if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) { if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
Log.d(TAG, "is system or default app, unrestricted states only"); Log.d(TAG, "is system or default app, unrestricted states only");
((RadioButtonPreference) preference).setChecked(true); ((RadioButtonPreference) preference).setChecked(true);
} else if (mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()) {
Log.d(TAG, "in allow list not idle app, disable perf");
preference.setEnabled(false);
} else if (mBatteryOptimizeUtils.getAppOptimizationMode() } else if (mBatteryOptimizeUtils.getAppOptimizationMode()
== BatteryOptimizeUtils.MODE_UNRESTRICTED) { == BatteryOptimizeUtils.MODE_UNRESTRICTED) {
Log.d(TAG, "is unrestricted states"); Log.d(TAG, "is unrestricted states");

View File

@@ -745,6 +745,16 @@ public class AdvancedPowerUsageDetailTest {
.isEqualTo("This app requires optimized battery usage."); .isEqualTo("This app requires optimized battery usage.");
} }
@Test
public void testInitPreferenceForTriState_isAllowlistedExceptIdleApp_hasCorrectString() {
when(mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).thenReturn(true);
mFragment.initPreferenceForTriState(mContext);
assertThat(mFooterPreference.getTitle().toString())
.isEqualTo("This app requires optimized battery usage.");
}
@Test @Test
public void testInitPreferenceForTriState_isSystemOrDefaultApp_hasCorrectString() { public void testInitPreferenceForTriState_isSystemOrDefaultApp_hasCorrectString() {
when(mBatteryOptimizeUtils.isValidPackageName()).thenReturn(true); when(mBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);

View File

@@ -124,6 +124,18 @@ public class BatteryOptimizeUtilsTest {
assertThat(mBatteryOptimizeUtils.isValidPackageName()).isTrue(); assertThat(mBatteryOptimizeUtils.isValidPackageName()).isTrue();
} }
@Test
public void testIsAllowlistedExpectIdle_isAllowlistedExceptIdle_returnTrue() {
when(mMockBackend.isAllowlistedExceptIdle(anyString())).thenReturn(true);
assertThat(mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).isTrue();
}
@Test
public void testIsAllowlistedExpectIdle_notAllowlistedExpectIdle_returnFalse() {
assertThat(mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).isFalse();
}
@Test @Test
public void testSetAppOptimizationMode_Restricted_verifyAction() { public void testSetAppOptimizationMode_Restricted_verifyAction() {
// Sets the current mode as MODE_UNRESTRICTED. // Sets the current mode as MODE_UNRESTRICTED.

View File

@@ -93,6 +93,16 @@ public class OptimizedPreferenceControllerTest {
assertThat(mPreference.isChecked()).isFalse(); assertThat(mPreference.isChecked()).isFalse();
} }
@Test
public void testUpdateState_isAllowlistedExceptIdleApp_prefEnabled() {
when(mockBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).thenReturn(true);
mController.updateState(mPreference);
assertThat(mPreference.isEnabled()).isTrue();
assertThat(mPreference.isChecked()).isTrue();
}
@Test @Test
public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() { public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() {
mPreference.setKey(mController.KEY_OPTIMIZED_PREF); mPreference.setKey(mController.KEY_OPTIMIZED_PREF);

View File

@@ -101,6 +101,16 @@ public class RestrictedPreferenceControllerTest {
assertThat(mPreference.isChecked()).isFalse(); assertThat(mPreference.isChecked()).isFalse();
} }
@Test
public void testUpdateState_isAllowlistedExceptIdleApp_prefDisabled() {
when(mockBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).thenReturn(true);
mController.updateState(mPreference);
assertThat(mPreference.isChecked()).isFalse();
assertThat(mPreference.isEnabled()).isFalse();
}
@Test @Test
public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() { public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() {
mPreference.setKey(mController.KEY_RESTRICTED_PREF); mPreference.setKey(mController.KEY_RESTRICTED_PREF);

View File

@@ -101,6 +101,16 @@ public class UnrestrictedPreferenceControllerTest {
assertThat(mPreference.isChecked()).isFalse(); assertThat(mPreference.isChecked()).isFalse();
} }
@Test
public void testUpdateState_isAllowlistedExceptIdleApp_prefDisabled() {
when(mockBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).thenReturn(true);
mController.updateState(mPreference);
assertThat(mPreference.isChecked()).isFalse();
assertThat(mPreference.isEnabled()).isFalse();
}
@Test @Test
public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() { public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() {
mPreference.setKey(mController.KEY_UNRESTRICTED_PREF); mPreference.setKey(mController.KEY_UNRESTRICTED_PREF);