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
This commit is contained in:
committed by
YUKAI HUNG
parent
cedf4573b6
commit
3f7839cad0
@@ -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;
|
||||||
@@ -362,18 +362,20 @@ 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);
|
||||||
} else if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
|
} else if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
|
||||||
//Present unrestricted only string when the package is system or default active app.
|
// Present unrestricted only string when the package is system or default active app.
|
||||||
stateString = context.getString(R.string.manager_battery_usage_unrestricted_only);
|
stateString = context.getString(R.string.manager_battery_usage_unrestricted_only);
|
||||||
footerString = context.getString(
|
footerString = context.getString(
|
||||||
R.string.manager_battery_usage_footer_limited, stateString);
|
R.string.manager_battery_usage_footer_limited, stateString);
|
||||||
} else {
|
} else {
|
||||||
//Present default string to normal app.
|
// Present default string to normal app.
|
||||||
footerString = context.getString(R.string.manager_battery_usage_footer);
|
footerString = context.getString(R.string.manager_battery_usage_footer);
|
||||||
}
|
}
|
||||||
mFooterPreference.setTitle(footerString);
|
mFooterPreference.setTitle(footerString);
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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");
|
||||||
((SelectorWithWidgetPreference) preference).setChecked(false);
|
((SelectorWithWidgetPreference) 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);
|
||||||
|
((SelectorWithWidgetPreference) 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");
|
||||||
|
@@ -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");
|
||||||
((SelectorWithWidgetPreference) preference).setChecked(false);
|
((SelectorWithWidgetPreference) 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");
|
||||||
|
@@ -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");
|
||||||
((SelectorWithWidgetPreference) preference).setChecked(true);
|
((SelectorWithWidgetPreference) 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");
|
||||||
|
@@ -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);
|
||||||
|
@@ -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.
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user