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
diff --git a/res/xml/power_usage_detail.xml b/res/xml/power_usage_detail.xml
index 95c1038..4746625 100644
--- a/res/xml/power_usage_detail.xml
+++ b/res/xml/power_usage_detail.xml
@@ -34,6 +34,30 @@
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
+ android:title="@string/battery_detail_manage_title"
+ settings:allowDividerAbove="true">
+
<com.android.settingslib.RestrictedPreference
android:key="background_activity"
android:title="@string/background_activity_title"
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index f4bdfb3..79b5479 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -48,6 +48,7 @@
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.utils.StringUtil;
import com.android.settingslib.widget.LayoutPreference;
+import com.android.settingslib.widget.RadioButtonPreference;
import java.util.ArrayList;
import java.util.List;
@@ -60,7 +61,7 @@
*/
public class AdvancedPowerUsageDetail extends DashboardFragment implements
ButtonActionDialogFragment.AppButtonsDialogListener,
- BatteryTipPreferenceController.BatteryTipListener {
+ BatteryTipPreferenceController.BatteryTipListener, RadioButtonPreference.OnClickListener {
public static final String TAG = "AdvancedPowerDetail";
public static final String EXTRA_UID = "extra_uid";
@@ -75,6 +76,9 @@
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_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_REMOVE_DEVICE_ADMIN = 1;
@@ -92,8 +96,17 @@
Preference mForegroundPreference;
@VisibleForTesting
Preference mBackgroundPreference;
+ @VisibleForTesting
+ RadioButtonPreference mRestrictedPreference;
+ @VisibleForTesting
+ RadioButtonPreference mOptimizePreference;
+ @VisibleForTesting
+ RadioButtonPreference mUnrestrictedPreference;
private AppButtonsPreferenceController mAppButtonsPreferenceController;
private BackgroundActivityPreferenceController mBackgroundActivityPreferenceController;
+ private UnrestrictedPreferenceController mUnrestrictedPreferenceController;
+ private OptimizedPreferenceController mOptimizedPreferenceController;
+ private RestrictedPreferenceController mRestrictedPreferenceController;
private String mPackageName;
@@ -176,6 +189,13 @@
mBackgroundPreference = findPreference(KEY_PREF_BACKGROUND);
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) {
mAppEntry = mState.getEntry(mPackageName, UserHandle.myUserId());
}
@@ -274,6 +294,15 @@
(SettingsActivity) getActivity(), this, getSettingsLifecycle(), packageName, mState,
REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN);
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;
}
@@ -298,4 +327,15 @@
mBackgroundActivityPreferenceController.updateSummary(
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()));
+ }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index 7f76c70..8eb7212 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -58,6 +58,7 @@
import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.widget.LayoutPreference;
+import com.android.settingslib.widget.RadioButtonPreference;
import org.junit.After;
import org.junit.Before;
@@ -96,6 +97,9 @@
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_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)
private FragmentActivity mActivity;
@@ -124,6 +128,9 @@
private Context mContext;
private Preference mForegroundPreference;
private Preference mBackgroundPreference;
+ private RadioButtonPreference mRestrictedPreference;
+ private RadioButtonPreference mOptimizePreference;
+ private RadioButtonPreference mUnrestrictedPreference;
private AdvancedPowerUsageDetail mFragment;
private SettingsActivity mTestActivity;
@@ -194,8 +201,14 @@
mForegroundPreference = new Preference(mContext);
mBackgroundPreference = new Preference(mContext);
+ mRestrictedPreference = new RadioButtonPreference(mContext);
+ mOptimizePreference = new RadioButtonPreference(mContext);
+ mUnrestrictedPreference = new RadioButtonPreference(mContext);
mFragment.mForegroundPreference = mForegroundPreference;
mFragment.mBackgroundPreference = mBackgroundPreference;
+ mFragment.mRestrictedPreference = mRestrictedPreference;
+ mFragment.mOptimizePreference = mOptimizePreference;
+ mFragment.mUnrestrictedPreference = mUnrestrictedPreference;
}
@After
@@ -352,4 +365,16 @@
assertThat(mForegroundPreference.getSummary().toString()).isEqualTo("Used 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();
+ }
}