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

Commit 34bfe742 authored by Lei Yu's avatar Lei Yu Committed by Android (Google) Code Review
Browse files

Merge "Add dialog when restrict apps are more than 5" into pi-dev

parents b673aaad 888ea9ef
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);