From 5083d82df7fe09f39457d054a90d3aa458d46712 Mon Sep 17 00:00:00 2001 From: "Wesley.CW Wang" Date: Fri, 16 Apr 2021 21:06:58 +0800 Subject: [PATCH] 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 --- res/xml/power_usage_detail.xml | 24 +++++++++++ .../fuelgauge/AdvancedPowerUsageDetail.java | 42 ++++++++++++++++++- .../AdvancedPowerUsageDetailTest.java | 25 +++++++++++ 3 files changed, 90 insertions(+), 1 deletion(-) diff --git a/res/xml/power_usage_detail.xml b/res/xml/power_usage_detail.xml index 95c1038c8f1..4746625d692 100644 --- a/res/xml/power_usage_detail.xml +++ b/res/xml/power_usage_detail.xml @@ -30,6 +30,30 @@ android:key="action_buttons" android:order="-9999"/> + + + + + + + + + + diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java index f4bdfb3f899..79b547915b8 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.applications.ApplicationsState; 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 @@ import java.util.List; */ 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 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements 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 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements 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 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements 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 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements (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 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements 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 7f76c7040ae..8eb7212e683 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.ApplicationsState; 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 @@ public class AdvancedPowerUsageDetailTest { 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 @@ public class AdvancedPowerUsageDetailTest { 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 @@ public class AdvancedPowerUsageDetailTest { 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 @@ public class AdvancedPowerUsageDetailTest { 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(); + } }