Make app usage page support legacy version

- Add a flag to divide legacy and new design
 - Add new layout for tristate design

Bug: 178197718
Test: make SettingsRoboTests
Change-Id: I61f694cad8ac9cea8195191feacbe80bac2df62e
This commit is contained in:
Wesley.CW Wang
2021-04-22 18:12:20 +08:00
parent 3bcd6bade2
commit d67f878c67
3 changed files with 201 additions and 48 deletions

View File

@@ -47,6 +47,7 @@ import androidx.loader.app.LoaderManager;
import androidx.preference.Preference;
import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowActivityManager;
@@ -82,6 +83,7 @@ public class AdvancedPowerUsageDetailTest {
private static final String USAGE_PERCENT = "16%";
private static final int ICON_ID = 123;
private static final int UID = 1;
private static final int POWER_MAH = 150;
private static final long BACKGROUND_TIME_MS = 100;
private static final long FOREGROUND_ACTIVITY_TIME_MS = 123;
private static final long FOREGROUND_SERVICE_TIME_MS = 444;
@@ -117,6 +119,8 @@ public class AdvancedPowerUsageDetailTest {
@Mock
private BatteryOptimizeUtils mBatteryOptimizeUtils;
private Context mContext;
private Preference mForegroundPreference;
private Preference mBackgroundPreference;
private Preference mFooterPreference;
private RadioButtonPreference mRestrictedPreference;
private RadioButtonPreference mOptimizePreference;
@@ -166,6 +170,7 @@ public class AdvancedPowerUsageDetailTest {
mFragment.mHeaderPreference = mHeaderPreference;
mFragment.mState = mState;
mFragment.enableTriState = true;
mFragment.mBatteryUtils = new BatteryUtils(RuntimeEnvironment.application);
mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils;
mAppEntry.info = mock(ApplicationInfo.class);
@@ -190,10 +195,14 @@ public class AdvancedPowerUsageDetailTest {
nullable(UserHandle.class));
doAnswer(callable).when(mActivity).startActivity(captor.capture());
mForegroundPreference = new Preference(mContext);
mBackgroundPreference = new Preference(mContext);
mFooterPreference = new Preference(mContext);
mRestrictedPreference = new RadioButtonPreference(mContext);
mOptimizePreference = new RadioButtonPreference(mContext);
mUnrestrictedPreference = new RadioButtonPreference(mContext);
mFragment.mForegroundPreference = mForegroundPreference;
mFragment.mBackgroundPreference = mBackgroundPreference;
mFragment.mFooterPreference = mFooterPreference;
mFragment.mRestrictedPreference = mRestrictedPreference;
mFragment.mOptimizePreference = mOptimizePreference;
@@ -205,6 +214,17 @@ public class AdvancedPowerUsageDetailTest {
ShadowEntityHeaderController.reset();
}
@Test
public void testGetPreferenceScreenResId_returnNewLayout() {
assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(R.xml.power_usage_detail);
}
@Test
public void testGetPreferenceScreenResId_disableTriState_returnLegacyLayout() {
mFragment.enableTriState = false;
assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(R.xml.power_usage_detail_legacy);
}
@Test
public void testInitHeader_NoAppEntry_BuildByBundle() {
mFragment.mAppEntry = null;
@@ -455,32 +475,52 @@ public class AdvancedPowerUsageDetailTest {
}
@Test
public void testInitPreference_isValidPackageName_hasCorrectString() {
public void testInitPreference_hasCorrectSummary() {
Bundle bundle = new Bundle(4);
bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, BACKGROUND_TIME_MS);
bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, FOREGROUND_TIME_MS);
bundle.putString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT, USAGE_PERCENT);
bundle.putInt(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_AMOUNT, POWER_MAH);
when(mFragment.getArguments()).thenReturn(bundle);
doReturn(mContext.getText(R.string.battery_used_for)).when(mFragment).getText(
R.string.battery_used_for);
doReturn(mContext.getText(R.string.battery_active_for)).when(mFragment).getText(
R.string.battery_active_for);
mFragment.initPreference(mContext);
assertThat(mForegroundPreference.getSummary().toString()).isEqualTo("Used for 0 min");
assertThat(mBackgroundPreference.getSummary().toString()).isEqualTo("Active for 0 min");
}
@Test
public void testInitPreferenceForTriState_isValidPackageName_hasCorrectString() {
when(mBatteryOptimizeUtils.isValidPackageName()).thenReturn(false);
mFragment.initPreference();
mFragment.initPreferenceForTriState(mContext);
assertThat(mFooterPreference.getTitle().toString())
.isEqualTo("This app requires Optimized battery usage.");
}
@Test
public void testInitPreference_isSystemOrDefaultApp_hasCorrectString() {
public void testInitPreferenceForTriState_isSystemOrDefaultApp_hasCorrectString() {
when(mBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
mFragment.initPreference();
mFragment.initPreferenceForTriState(mContext);
assertThat(mFooterPreference.getTitle()
.toString()).isEqualTo("This app requires Unrestricted battery usage.");
}
@Test
public void testInitPreference_hasCorrectString() {
public void testInitPreferenceForTriState_hasCorrectString() {
when(mBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(false);
mFragment.initPreference();
mFragment.initPreferenceForTriState(mContext);
assertThat(mFooterPreference.getTitle().toString())
.isEqualTo("Changing how an app uses your battery can affect its performance.");