Update app usage page with 3 radio button control

- Improve the UX from 2 different preference column to 3 radio button,
 make the restriction state more easy to control and recognize
 Screenshot: https://screenshot.googleplex.com/4nCBnF5FzwePqrL.png

Bug: 178197718
Test: make SettingsRoboTests
Change-Id: Ic354ac91e5496c0e44c5b44142627ac8a090e30f
This commit is contained in:
Wesley.CW Wang
2021-04-16 21:06:58 +08:00
committed by Wesley Wang
parent 3db43de758
commit 5083d82df7
3 changed files with 90 additions and 1 deletions

View File

@@ -30,6 +30,30 @@
android:key="action_buttons" android:key="action_buttons"
android:order="-9999"/> android:order="-9999"/>
<PreferenceCategory
android:title="@string/battery_detail_manage_title"
settings:allowDividerAbove="true">
<com.android.settingslib.widget.RadioButtonPreference
android:key="unrestricted_pref"
android:summary="@string/manager_battery_usage_unrestricted_summary"
android:title="@string/manager_battery_usage_unrestricted_title"
settings:controller="com.android.settings.fuelgauge.UnrestrictedPreferenceController"/>
<com.android.settingslib.widget.RadioButtonPreference
android:key="optimized_pref"
android:summary="@string/manager_battery_usage_optimized_summary"
android:title="@string/manager_battery_usage_optimized_title"
settings:controller="com.android.settings.fuelgauge.OptimizedPreferenceController"/>
<com.android.settingslib.widget.RadioButtonPreference
android:key="restricted_pref"
android:summary="@string/manager_battery_usage_restricted_summary"
android:title="@string/restricted_true_label"
settings:controller="com.android.settings.fuelgauge.RestrictedPreferenceController"/>
</PreferenceCategory>
<PreferenceCategory <PreferenceCategory
android:title="@string/battery_detail_manage_title" android:title="@string/battery_detail_manage_title"
settings:allowDividerAbove="true"> settings:allowDividerAbove="true">

View File

@@ -48,6 +48,7 @@ import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.utils.StringUtil; import com.android.settingslib.utils.StringUtil;
import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.widget.LayoutPreference;
import com.android.settingslib.widget.RadioButtonPreference;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -60,7 +61,7 @@ import java.util.List;
*/ */
public class AdvancedPowerUsageDetail extends DashboardFragment implements public class AdvancedPowerUsageDetail extends DashboardFragment implements
ButtonActionDialogFragment.AppButtonsDialogListener, ButtonActionDialogFragment.AppButtonsDialogListener,
BatteryTipPreferenceController.BatteryTipListener { BatteryTipPreferenceController.BatteryTipListener, RadioButtonPreference.OnClickListener {
public static final String TAG = "AdvancedPowerDetail"; public static final String TAG = "AdvancedPowerDetail";
public static final String EXTRA_UID = "extra_uid"; public static final String EXTRA_UID = "extra_uid";
@@ -75,6 +76,9 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
private static final String KEY_PREF_FOREGROUND = "app_usage_foreground"; private static final String KEY_PREF_FOREGROUND = "app_usage_foreground";
private static final String KEY_PREF_BACKGROUND = "app_usage_background"; private static final String KEY_PREF_BACKGROUND = "app_usage_background";
private static final String KEY_PREF_HEADER = "header_view"; private static final String KEY_PREF_HEADER = "header_view";
private static final String KEY_PREF_UNRESTRICTED = "unrestricted_pref";
private static final String KEY_PREF_OPTIMIZED = "optimized_pref";
private static final String KEY_PREF_RESTRICTED = "restricted_pref";
private static final int REQUEST_UNINSTALL = 0; private static final int REQUEST_UNINSTALL = 0;
private static final int REQUEST_REMOVE_DEVICE_ADMIN = 1; private static final int REQUEST_REMOVE_DEVICE_ADMIN = 1;
@@ -92,8 +96,17 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
Preference mForegroundPreference; Preference mForegroundPreference;
@VisibleForTesting @VisibleForTesting
Preference mBackgroundPreference; Preference mBackgroundPreference;
@VisibleForTesting
RadioButtonPreference mRestrictedPreference;
@VisibleForTesting
RadioButtonPreference mOptimizePreference;
@VisibleForTesting
RadioButtonPreference mUnrestrictedPreference;
private AppButtonsPreferenceController mAppButtonsPreferenceController; private AppButtonsPreferenceController mAppButtonsPreferenceController;
private BackgroundActivityPreferenceController mBackgroundActivityPreferenceController; private BackgroundActivityPreferenceController mBackgroundActivityPreferenceController;
private UnrestrictedPreferenceController mUnrestrictedPreferenceController;
private OptimizedPreferenceController mOptimizedPreferenceController;
private RestrictedPreferenceController mRestrictedPreferenceController;
private String mPackageName; private String mPackageName;
@@ -176,6 +189,13 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
mBackgroundPreference = findPreference(KEY_PREF_BACKGROUND); mBackgroundPreference = findPreference(KEY_PREF_BACKGROUND);
mHeaderPreference = (LayoutPreference) findPreference(KEY_PREF_HEADER); mHeaderPreference = (LayoutPreference) findPreference(KEY_PREF_HEADER);
mUnrestrictedPreference = findPreference(KEY_PREF_UNRESTRICTED);
mOptimizePreference = findPreference(KEY_PREF_OPTIMIZED);
mRestrictedPreference = findPreference(KEY_PREF_RESTRICTED);
mUnrestrictedPreference.setOnClickListener(this);
mOptimizePreference.setOnClickListener(this);
mRestrictedPreference.setOnClickListener(this);
if (mPackageName != null) { if (mPackageName != null) {
mAppEntry = mState.getEntry(mPackageName, UserHandle.myUserId()); mAppEntry = mState.getEntry(mPackageName, UserHandle.myUserId());
} }
@@ -274,6 +294,15 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
(SettingsActivity) getActivity(), this, getSettingsLifecycle(), packageName, mState, (SettingsActivity) getActivity(), this, getSettingsLifecycle(), packageName, mState,
REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN); REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN);
controllers.add(mAppButtonsPreferenceController); controllers.add(mAppButtonsPreferenceController);
mUnrestrictedPreferenceController =
new UnrestrictedPreferenceController(context, uid, packageName);
mOptimizedPreferenceController =
new OptimizedPreferenceController(context, uid, packageName);
mRestrictedPreferenceController =
new RestrictedPreferenceController(context, uid, packageName);
controllers.add(mUnrestrictedPreferenceController);
controllers.add(mOptimizedPreferenceController);
controllers.add(mRestrictedPreferenceController);
return controllers; return controllers;
} }
@@ -298,4 +327,15 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
mBackgroundActivityPreferenceController.updateSummary( mBackgroundActivityPreferenceController.updateSummary(
findPreference(mBackgroundActivityPreferenceController.getPreferenceKey())); findPreference(mBackgroundActivityPreferenceController.getPreferenceKey()));
} }
@Override
public void onRadioButtonClicked(RadioButtonPreference selected) {
updatePreferenceState(mUnrestrictedPreference, selected.getKey());
updatePreferenceState(mOptimizePreference, selected.getKey());
updatePreferenceState(mRestrictedPreference, selected.getKey());
}
private void updatePreferenceState(RadioButtonPreference preference, String selectedKey) {
preference.setChecked(selectedKey.equals(preference.getKey()));
}
} }

View File

@@ -58,6 +58,7 @@ import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.instantapps.InstantAppDataProvider; import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.widget.LayoutPreference;
import com.android.settingslib.widget.RadioButtonPreference;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
@@ -96,6 +97,9 @@ public class AdvancedPowerUsageDetailTest {
private static final long PROCSTATE_TOP_TIME_US = PROCSTATE_TOP_TIME_MS * 1000; private static final long PROCSTATE_TOP_TIME_US = PROCSTATE_TOP_TIME_MS * 1000;
private static final long PHONE_FOREGROUND_TIME_MS = 250 * 1000; private static final long PHONE_FOREGROUND_TIME_MS = 250 * 1000;
private static final long PHONE_BACKGROUND_TIME_MS = 0; private static final long PHONE_BACKGROUND_TIME_MS = 0;
private static final String KEY_PREF_UNRESTRICTED = "unrestricted_pref";
private static final String KEY_PREF_OPTIMIZED = "optimized_pref";
private static final String KEY_PREF_RESTRICTED = "restricted_pref";
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private FragmentActivity mActivity; private FragmentActivity mActivity;
@@ -124,6 +128,9 @@ public class AdvancedPowerUsageDetailTest {
private Context mContext; private Context mContext;
private Preference mForegroundPreference; private Preference mForegroundPreference;
private Preference mBackgroundPreference; private Preference mBackgroundPreference;
private RadioButtonPreference mRestrictedPreference;
private RadioButtonPreference mOptimizePreference;
private RadioButtonPreference mUnrestrictedPreference;
private AdvancedPowerUsageDetail mFragment; private AdvancedPowerUsageDetail mFragment;
private SettingsActivity mTestActivity; private SettingsActivity mTestActivity;
@@ -194,8 +201,14 @@ public class AdvancedPowerUsageDetailTest {
mForegroundPreference = new Preference(mContext); mForegroundPreference = new Preference(mContext);
mBackgroundPreference = new Preference(mContext); mBackgroundPreference = new Preference(mContext);
mRestrictedPreference = new RadioButtonPreference(mContext);
mOptimizePreference = new RadioButtonPreference(mContext);
mUnrestrictedPreference = new RadioButtonPreference(mContext);
mFragment.mForegroundPreference = mForegroundPreference; mFragment.mForegroundPreference = mForegroundPreference;
mFragment.mBackgroundPreference = mBackgroundPreference; mFragment.mBackgroundPreference = mBackgroundPreference;
mFragment.mRestrictedPreference = mRestrictedPreference;
mFragment.mOptimizePreference = mOptimizePreference;
mFragment.mUnrestrictedPreference = mUnrestrictedPreference;
} }
@After @After
@@ -352,4 +365,16 @@ public class AdvancedPowerUsageDetailTest {
assertThat(mForegroundPreference.getSummary().toString()).isEqualTo("Used for 0 min"); assertThat(mForegroundPreference.getSummary().toString()).isEqualTo("Used for 0 min");
assertThat(mBackgroundPreference.getSummary().toString()).isEqualTo("Active for 0 min"); assertThat(mBackgroundPreference.getSummary().toString()).isEqualTo("Active for 0 min");
} }
@Test
public void testOnRadioButtonClicked_clickOptimizePref_optimizePreferenceChecked() {
mOptimizePreference.setKey(KEY_PREF_OPTIMIZED);
mRestrictedPreference.setKey(KEY_PREF_RESTRICTED);
mUnrestrictedPreference.setKey(KEY_PREF_UNRESTRICTED);
mFragment.onRadioButtonClicked(mOptimizePreference);
assertThat(mOptimizePreference.isChecked()).isTrue();
assertThat(mRestrictedPreference.isChecked()).isFalse();
assertThat(mUnrestrictedPreference.isChecked()).isFalse();
}
} }