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

Commit 888ea9ef authored by Lei Yu's avatar Lei Yu
Browse files

Add dialog when restrict apps are more than 5

Bug: 73018395
Test: RunSettingsRoboTests
Change-Id: Iec24fc1ce8e5840207610b3155dffa7059f9aa49
parent 92054800
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -4879,8 +4879,12 @@
        <item quantity="one">Restrict app?</item>
        <item quantity="other">Restrict %1$d apps?</item>
    </plurals>
    <!-- Message for battery tip dialog to show the restrict app list [CHAR LIMIT=NONE] -->
    <string name="battery_tip_restrict_app_dialog_message">To save battery, you can stop this app from running in the background when it’s not being used.</string>
    <!-- Message for battery tip dialog to show the info to restrict the app [CHAR LIMIT=NONE] -->
    <string name="battery_tip_restrict_app_dialog_message">To save battery, stop <xliff:g id="app">%1$s</xliff:g> from using battery in the background.</string>
    <!-- Message for battery tip dialog to show the info to restrict the app, below it app list will be shown as a view [CHAR LIMIT=NONE] -->
    <string name="battery_tip_restrict_apps_less_than_5_dialog_message">To save battery, stop these apps from using battery in the background.\n\nApps:\n</string>
    <!-- Message for battery tip dialog to show the info to restrict the app, below it app list will be shown as raw string[CHAR LIMIT=NONE] -->
    <string name="battery_tip_restrict_apps_more_than_5_dialog_message">To save battery, stop these apps from using battery in the background.\n\nApps:\n<xliff:g id="app_list">%1$s</xliff:g>.</string>
    <!-- OK button for battery tip dialog to show the restrict app list [CHAR LIMIT=NONE] -->
    <string name="battery_tip_restrict_app_dialog_ok">Restrict</string>
    <!-- Title for dialog to remove restriction for the app [CHAR LIMIT=NONE] -->
+13 −4
Original line number Diff line number Diff line
@@ -107,21 +107,30 @@ public class BatteryTipDialogFragment extends InstrumentedDialogFragment impleme
                final RestrictAppTip restrictAppTip = (RestrictAppTip) mBatteryTip;
                final List<AppInfo> restrictedAppList = restrictAppTip.getRestrictAppList();
                final int num = restrictedAppList.size();
                final CharSequence appLabel = Utils.getApplicationLabel(context,
                        restrictedAppList.get(0).packageName);

                final AlertDialog.Builder builder = new AlertDialog.Builder(context)
                        .setTitle(context.getResources().getQuantityString(
                                R.plurals.battery_tip_restrict_app_dialog_title, num, num))
                        .setMessage(getString(R.string.battery_tip_restrict_app_dialog_message))
                        .setPositiveButton(R.string.battery_tip_restrict_app_dialog_ok, this)
                        .setNegativeButton(android.R.string.cancel, null);

                // TODO(b/72385333): consider building dialog with 5+ apps when strings are done
                if (num > 1) {
                if (num == 1) {
                    builder.setMessage(
                            getString(R.string.battery_tip_restrict_app_dialog_message, appLabel));
                } else if (num <= 5) {
                    builder.setMessage(
                            getString(
                                    R.string.battery_tip_restrict_apps_less_than_5_dialog_message));
                    final RecyclerView restrictionView = (RecyclerView) LayoutInflater.from(
                            context).inflate(R.layout.recycler_view, null);
                    restrictionView.setLayoutManager(new LinearLayoutManager(context));
                    restrictionView.setAdapter(new HighUsageAdapter(context, restrictedAppList));
                    builder.setView(restrictionView);
                } else {
                    builder.setMessage(context.getString(
                            R.string.battery_tip_restrict_apps_more_than_5_dialog_message,
                            restrictAppTip.getRestrictAppsString(context)));
                }

                return builder.create();
+16 −2
Original line number Diff line number Diff line
@@ -17,8 +17,9 @@
package com.android.settings.fuelgauge.batterytip.tips;

import android.content.Context;
import android.content.res.Resources;
import android.icu.text.ListFormatter;
import android.os.Parcel;
import android.text.TextUtils;
import android.util.Pair;

import com.android.internal.annotations.VisibleForTesting;
@@ -118,6 +119,19 @@ public class RestrictAppTip extends BatteryTip {
        return mRestrictAppList;
    }

    /**
     * Construct the app list string(e.g. app1, app2, and app3)
     */
    public CharSequence getRestrictAppsString(Context context) {
        final List<CharSequence> appLabels = new ArrayList<>();
        for (int i = 0, size = mRestrictAppList.size(); i < size; i++) {
            appLabels.add(Utils.getApplicationLabel(context,
                    mRestrictAppList.get(i).packageName));
        }

        return ListFormatter.getInstance().format(appLabels);
    }

    @Override
    public String toString() {
        final StringBuilder stringBuilder = new StringBuilder(super.toString());
+43 −12
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import com.android.settings.fuelgauge.batterytip.tips.HighUsageTip;
import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowUtils;

@@ -63,33 +64,36 @@ public class BatteryTipDialogFragmentTest {
    private Context mContext;
    private HighUsageTip mHighUsageTip;
    private RestrictAppTip mRestrictedOneAppTip;
    private RestrictAppTip mRestrictAppsTip;
    private RestrictAppTip mRestrictTwoAppsTip;
    private UnrestrictAppTip mUnrestrictAppTip;
    private SummaryTip mSummaryTip;
    private AppInfo mAppInfo;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        mContext = spy(RuntimeEnvironment.application);
        FakeFeatureFactory.setupForTest();
        ShadowUtils.setApplicationLabel(PACKAGE_NAME, DISPLAY_NAME);

        List<AppInfo> highUsageTips = new ArrayList<>();
        final AppInfo appInfo = new AppInfo.Builder()
        mAppInfo = new AppInfo.Builder()
                .setScreenOnTimeMs(SCREEN_TIME_MS)
                .setPackageName(PACKAGE_NAME)
                .build();
        highUsageTips.add(appInfo);
        highUsageTips.add(mAppInfo);
        mHighUsageTip = new HighUsageTip(SCREEN_TIME_MS, highUsageTips);

        final List<AppInfo> restrictApps = new ArrayList<>();
        restrictApps.add(appInfo);
        restrictApps.add(mAppInfo);
        mRestrictedOneAppTip = new RestrictAppTip(BatteryTip.StateType.NEW,
                new ArrayList<>(restrictApps));
        restrictApps.add(appInfo);
        mRestrictAppsTip = new RestrictAppTip(BatteryTip.StateType.NEW,
        restrictApps.add(mAppInfo);
        mRestrictTwoAppsTip = new RestrictAppTip(BatteryTip.StateType.NEW,
                new ArrayList<>(restrictApps));

        mUnrestrictAppTip = new UnrestrictAppTip(BatteryTip.StateType.NEW, appInfo);
        mUnrestrictAppTip = new UnrestrictAppTip(BatteryTip.StateType.NEW, mAppInfo);
        mSummaryTip = spy(new SummaryTip(BatteryTip.StateType.NEW,
                Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN));
    }
@@ -122,14 +126,15 @@ public class BatteryTipDialogFragmentTest {

        assertThat(shadowDialog.getTitle()).isEqualTo("Restrict app?");
        assertThat(shadowDialog.getMessage())
                .isEqualTo(mContext.getString(R.string.battery_tip_restrict_app_dialog_message));
                .isEqualTo("To save battery, stop app from using "
                        + "battery in the background.");
    }

    @Test
    public void testOnCreateDialog_restrictAppsTip_fireRestrictAppsDialog() {
    public void testOnCreateDialog_restrictTwoAppsTip_fireRestrictTwoAppsDialog() {
        Robolectric.getForegroundThreadScheduler().pause();

        mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictAppsTip);
        mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictTwoAppsTip);

        FragmentTestUtil.startFragment(mDialogFragment);

@@ -140,14 +145,40 @@ public class BatteryTipDialogFragmentTest {

        assertThat(shadowDialog.getTitle()).isEqualTo("Restrict 2 apps?");
        assertThat(shadowDialog.getMessage())
                .isEqualTo(mContext.getString(R.string.battery_tip_restrict_app_dialog_message));
                .isEqualTo("To save battery, stop these apps from using battery in the background"
                        + ".\n\nApps:\n");
        assertThat(shadowDialog.getView()).isNotNull();
    }

    @Test
    public void testOnCreateDialog_restrictSixAppsTip_fireRestrictSixAppsDialog() {
        Robolectric.getForegroundThreadScheduler().pause();

        final List<AppInfo> appInfos = new ArrayList<>();
        for (int i = 0; i < 6; i++) {
            appInfos.add(mAppInfo);
        }
        final RestrictAppTip restrictSixAppsTip = new RestrictAppTip(BatteryTip.StateType.NEW,
                appInfos);

        mDialogFragment = BatteryTipDialogFragment.newInstance(restrictSixAppsTip);

        FragmentTestUtil.startFragment(mDialogFragment);

        Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();

        final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
        ShadowAlertDialog shadowDialog = shadowOf(dialog);

        assertThat(shadowDialog.getTitle()).isEqualTo("Restrict 6 apps?");
        assertThat(shadowDialog.getMessage())
                .isEqualTo("To save battery, stop these apps from using battery in the background"
                        + ".\n\nApps:\napp, app, app, app, app, and app.");
    }

    @Test
    public void testOnCreateDialog_unRestrictAppTip_fireUnRestrictDialog() {
        mDialogFragment = BatteryTipDialogFragment.newInstance(mUnrestrictAppTip);
        ShadowUtils.setApplicationLabel(PACKAGE_NAME, DISPLAY_NAME);

        FragmentTestUtil.startFragment(mDialogFragment);