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

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

Merge "Only show one tip at a time"

parents c74ba59a 2e0bdc34
Loading
Loading
Loading
Loading
+6 −20
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.support.annotation.VisibleForTesting;
import com.android.internal.os.BatteryStatsHelper;
import com.android.settings.fuelgauge.BatteryInfo;
import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.fuelgauge.batterytip.detectors.BatteryTipDetector;
import com.android.settings.fuelgauge.batterytip.detectors.EarlyWarningDetector;
import com.android.settings.fuelgauge.batterytip.detectors.HighUsageDetector;
import com.android.settings.fuelgauge.batterytip.detectors.LowBatteryDetector;
@@ -47,9 +46,8 @@ public class BatteryTipLoader extends AsyncLoader<List<BatteryTip>> {
    private static final boolean USE_FAKE_DATA = false;

    private BatteryStatsHelper mBatteryStatsHelper;
    private BatteryUtils mBatteryUtils;
    @VisibleForTesting
    int mVisibleTips;
    BatteryUtils mBatteryUtils;

    public BatteryTipLoader(Context context, BatteryStatsHelper batteryStatsHelper) {
        super(context);
@@ -66,16 +64,12 @@ public class BatteryTipLoader extends AsyncLoader<List<BatteryTip>> {
        final BatteryTipPolicy policy = new BatteryTipPolicy(getContext());
        final BatteryInfo batteryInfo = mBatteryUtils.getBatteryInfo(mBatteryStatsHelper, TAG);
        final Context context = getContext();
        mVisibleTips = 0;

        addBatteryTipFromDetector(tips, new LowBatteryDetector(policy, batteryInfo));
        addBatteryTipFromDetector(tips,
                new HighUsageDetector(context, policy, mBatteryStatsHelper));
        addBatteryTipFromDetector(tips,
                new SmartBatteryDetector(policy, context.getContentResolver()));
        addBatteryTipFromDetector(tips, new EarlyWarningDetector(policy, context));
        // Add summary detector at last since it need other detectors to update the mVisibleTips
        addBatteryTipFromDetector(tips, new SummaryDetector(policy, mVisibleTips));
        tips.add(new LowBatteryDetector(policy, batteryInfo).detect());
        tips.add(new HighUsageDetector(context, policy, mBatteryStatsHelper).detect());
        tips.add(new SmartBatteryDetector(policy, context.getContentResolver()).detect());
        tips.add(new EarlyWarningDetector(policy, context).detect());
        tips.add(new SummaryDetector(policy).detect());

        Collections.sort(tips);
        return tips;
@@ -93,12 +87,4 @@ public class BatteryTipLoader extends AsyncLoader<List<BatteryTip>> {
        return tips;
    }

    @VisibleForTesting
    void addBatteryTipFromDetector(final List<BatteryTip> tips,
            final BatteryTipDetector detector) {
        final BatteryTip batteryTip = detector.detect();
        mVisibleTips += batteryTip.isVisible() ? 1 : 0;
        tips.add(batteryTip);
    }

}
+1 −0
Original line number Diff line number Diff line
@@ -98,6 +98,7 @@ public class BatteryTipPreferenceController extends BasePreferenceController {
                final Preference preference = batteryTip.buildPreference(mPrefContext);
                mBatteryTipMap.put(preference.getKey(), batteryTip);
                mPreferenceGroup.addPreference(preference);
                break;
            }
        }
    }
+2 −4
Original line number Diff line number Diff line
@@ -26,17 +26,15 @@ import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
 */
public class SummaryDetector implements BatteryTipDetector {
    private BatteryTipPolicy mPolicy;
    private int mVisibleTips;

    public SummaryDetector(BatteryTipPolicy policy, int visibleTips) {
    public SummaryDetector(BatteryTipPolicy policy) {
        mPolicy = policy;
        mVisibleTips = visibleTips;
    }

    @Override
    public BatteryTip detect() {
        // Show it if there is no other tips shown
        final int state = mPolicy.summaryEnabled && mVisibleTips == 0
        final int state = mPolicy.summaryEnabled
                ? BatteryTip.StateType.NEW
                : BatteryTip.StateType.INVISIBLE;
        return new SummaryTip(state);
+6 −6
Original line number Diff line number Diff line
@@ -52,13 +52,13 @@ public abstract class BatteryTip implements Comparable<BatteryTip>, Parcelable {
            TipType.REDUCED_BATTERY,
            TipType.LOW_BATTERY})
    public @interface TipType {
        int SUMMARY = 0;
        int BATTERY_SAVER = 1;
        int SMART_BATTERY_MANAGER = 0;
        int APP_RESTRICTION = 1;
        int HIGH_DEVICE_USAGE = 2;
        int SMART_BATTERY_MANAGER = 3;
        int APP_RESTRICTION = 4;
        int REDUCED_BATTERY = 5;
        int LOW_BATTERY = 6;
        int BATTERY_SAVER = 3;
        int REDUCED_BATTERY = 4;
        int LOW_BATTERY = 5;
        int SUMMARY = 6;
    }

    private static final String KEY_PREFIX = "key_battery_tip";
+30 −25
Original line number Diff line number Diff line
@@ -18,12 +18,18 @@ package com.android.settings.fuelgauge.batterytip;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;

import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;

import com.android.internal.os.BatteryStatsHelper;
import com.android.settings.TestConfig;
import com.android.settings.fuelgauge.BatteryInfo;
import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.fuelgauge.batterytip.detectors.BatteryTipDetector;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -42,46 +48,45 @@ import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class BatteryTipLoaderTest {
    private static final int[] TIP_ORDER = {
            BatteryTip.TipType.SMART_BATTERY_MANAGER,
            BatteryTip.TipType.HIGH_DEVICE_USAGE,
            BatteryTip.TipType.BATTERY_SAVER,
            BatteryTip.TipType.LOW_BATTERY,
            BatteryTip.TipType.SUMMARY};
    @Mock
    private BatteryStatsHelper mBatteryStatsHelper;
    @Mock
    private BatteryTipDetector mBatteryTipDetector;
    private PowerManager mPowerManager;
    @Mock
    private BatteryTip mBatteryTip;
    private Intent mIntent;
    @Mock
    private BatteryUtils mBatteryUtils;
    @Mock
    private BatteryInfo mBatteryInfo;
    private Context mContext;
    private BatteryTipLoader mBatteryTipLoader;
    private List<BatteryTip> mBatteryTips;

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

        mContext = RuntimeEnvironment.application;
        doReturn(mBatteryTip).when(mBatteryTipDetector).detect();
        mContext = spy(RuntimeEnvironment.application);
        doReturn(mContext).when(mContext).getApplicationContext();
        doReturn(mPowerManager).when(mContext).getSystemService(Context.POWER_SERVICE);
        doReturn(mIntent).when(mContext).registerReceiver(any(), any());
        doReturn(mBatteryInfo).when(mBatteryUtils).getBatteryInfo(any(), any());
        mBatteryTipLoader = new BatteryTipLoader(mContext, mBatteryStatsHelper);
        mBatteryTips = new ArrayList<>();
        mBatteryTipLoader.mBatteryUtils = mBatteryUtils;
    }

    @Test
    public void testAddBatteryTipFromDetector_tipVisible_addAndUpdateCount() {
        doReturn(true).when(mBatteryTip).isVisible();
        mBatteryTipLoader.mVisibleTips = 0;
    public void testLoadBackground_containsAllTipsWithOrder() {
        final List<BatteryTip> batteryTips = mBatteryTipLoader.loadInBackground();

        mBatteryTipLoader.addBatteryTipFromDetector(mBatteryTips, mBatteryTipDetector);

        assertThat(mBatteryTips.contains(mBatteryTip)).isTrue();
        assertThat(mBatteryTipLoader.mVisibleTips).isEqualTo(1);
        assertThat(batteryTips.size()).isEqualTo(TIP_ORDER.length);
        for (int i = 0, size = batteryTips.size(); i < size; i++) {
            assertThat(batteryTips.get(i).getType()).isEqualTo(TIP_ORDER[i]);
        }

    @Test
    public void testAddBatteryTipFromDetector_tipInvisible_doNotAddCount() {
        doReturn(false).when(mBatteryTip).isVisible();
        mBatteryTipLoader.mVisibleTips = 0;

        mBatteryTipLoader.addBatteryTipFromDetector(mBatteryTips, mBatteryTipDetector);

        assertThat(mBatteryTips.contains(mBatteryTip)).isTrue();
        assertThat(mBatteryTipLoader.mVisibleTips).isEqualTo(0);
    }

}
Loading