Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5083d82d authored by Wesley.CW Wang's avatar Wesley.CW Wang Committed by Wesley Wang
Browse files

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
parent 3db43de7
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -30,6 +30,30 @@
        android:key="action_buttons"
        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
        android:title="@string/battery_detail_manage_title"
        settings:allowDividerAbove="true">
+41 −1
Original line number Diff line number Diff line
@@ -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()));
    }
}
+25 −0
Original line number Diff line number Diff line
@@ -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();
    }
}