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

Commit 425b0282 authored by Salvador Martinez's avatar Salvador Martinez Committed by Android (Google) Code Review
Browse files

Merge "Update getBatteryInfo to allow drain time override"

parents dc59bdca a8f6ede2
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -789,15 +789,22 @@

    <!-- [CHAR_LIMIT=40] Label for estimated remaining duration of battery discharging -->
    <string name="power_remaining_duration_only">About <xliff:g id="time">%1$s</xliff:g> left</string>
    <!-- [CHAR_LIMIT=60] Label for estimated remaining duration of battery discharging -->
    <string name="power_remaining_duration_only_enhanced">About <xliff:g id="time">%1$s</xliff:g> left based on your usage</string>
    <!-- [CHAR_LIMIT=40] Label for estimated remaining duration of battery charging -->
    <string name="power_remaining_charging_duration_only"><xliff:g id="time">%1$s</xliff:g> left until fully charged</string>

    <!-- [CHAR_LIMIT=40] Short label for estimated remaining duration of battery charging/discharging -->
    <string name="power_remaining_duration_only_short"><xliff:g id="time">%1$s</xliff:g> left</string>
    <!-- [CHAR_LIMIT=60] Short label for estimated remaining duration of battery charging/discharging -->
    <string name="power_remaining_duration_only_short_enhanced"><xliff:g id="time">%1$s</xliff:g> left based on your usage</string>

    <!-- [CHAR_LIMIT=40] Label for battery level chart when discharging with duration -->
    <string name="power_discharging_duration"><xliff:g id="level">%1$s</xliff:g>
        - about <xliff:g id="time">%2$s</xliff:g> left</string>
    <!-- [CHAR_LIMIT=60] Label for battery level chart when discharging with duration and using enhanced estimate -->
    <string name="power_discharging_duration_enhanced"><xliff:g id="level">%1$s</xliff:g>
        - about <xliff:g id="time">%2$s</xliff:g> left based on your usage</string>

    <!-- [CHAR_LIMIT=40] Label for battery level chart when discharging with duration -->
    <string name="power_discharging_duration_short"><xliff:g id="level">%1$s</xliff:g>
+22 −8
Original line number Diff line number Diff line
@@ -129,6 +129,13 @@ public class BatteryInfo {

    public static BatteryInfo getBatteryInfo(Context context, Intent batteryBroadcast,
            BatteryStats stats, long elapsedRealtimeUs, boolean shortString) {
        return getBatteryInfo(context, batteryBroadcast, stats, elapsedRealtimeUs, shortString,
                stats.computeBatteryTimeRemaining(elapsedRealtimeUs), false);
    }

    public static BatteryInfo getBatteryInfo(Context context, Intent batteryBroadcast,
            BatteryStats stats, long elapsedRealtimeUs, boolean shortString, long drainTimeUs,
            boolean basedOnUsage) {
        BatteryInfo info = new BatteryInfo();
        info.mStats = stats;
        info.batteryLevel = Utils.getBatteryLevel(batteryBroadcast);
@@ -138,18 +145,25 @@ public class BatteryInfo {

        info.statusLabel = Utils.getBatteryStatus(resources, batteryBroadcast);
        if (!info.mCharging) {
            final long drainTime = stats.computeBatteryTimeRemaining(elapsedRealtimeUs);
            if (drainTime > 0) {
                info.remainingTimeUs = drainTime;
            if (drainTimeUs > 0) {
                info.remainingTimeUs = drainTimeUs;
                String timeString = Formatter.formatShortElapsedTime(context,
                        drainTime / 1000);
                        drainTimeUs / 1000);
                info.remainingLabel = resources.getString(
                        shortString ? R.string.power_remaining_duration_only_short
                                : R.string.power_remaining_duration_only,
                        shortString ?
                                (basedOnUsage ?
                                        R.string.power_remaining_duration_only_short_enhanced :
                                        R.string.power_remaining_duration_only_short) :
                                (basedOnUsage ?
                                        R.string.power_remaining_duration_only_enhanced :
                                        R.string.power_remaining_duration_only),
                        timeString);
                info.chargeLabelString = resources.getString(
                        shortString ? R.string.power_discharging_duration_short
                                : R.string.power_discharging_duration,
                        shortString ?
                                R.string.power_discharging_duration_short :
                                basedOnUsage ?
                                        R.string.power_discharging_duration_enhanced :
                                        R.string.power_discharging_duration,
                        info.batteryPercentString, timeString);
            } else {
                info.remainingLabel = null;
+52 −4
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settingslib;

import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.BatteryManager;
import android.os.BatteryStats;
import android.os.SystemClock;
@@ -25,14 +26,17 @@ import android.os.SystemClock;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.AdditionalMatchers;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

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

import static org.mockito.AdditionalMatchers.*;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.eq;
@@ -48,13 +52,18 @@ public class BatteryInfoTest {
    private static final int PLUGGED_IN = 1;
    private static final long REMAINING_TIME_NULL = -1;
    private static final long REMAINING_TIME = 2;
    public static final String ENHANCED_STRING_SUFFIX = "left based on your usage";
    private Intent mDisChargingBatteryBroadcast;
    private Intent mChargingBatteryBroadcast;
    private Context mRealContext;

    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private BatteryStats mBatteryStats;
    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private Context mContext;
    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private Resources mResources;


    @Before
    public void setUp() {
@@ -81,13 +90,14 @@ public class BatteryInfoTest {
                any())).thenReturn(STATUS_CHARGING_NO_TIME);
        when(mContext.getResources().getString(eq(R.string.power_charging_duration), any(),
                any())).thenReturn(STATUS_CHARGING_TIME);
        mRealContext = RuntimeEnvironment.application;
    }

    @Test
    public void testGetBatteryInfo_hasStatusLabel() {
        doReturn(REMAINING_TIME_NULL).when(mBatteryStats).computeBatteryTimeRemaining(anyLong());
        BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
                mBatteryStats, SystemClock.elapsedRealtime() * 1000, true);
                mBatteryStats, SystemClock.elapsedRealtime() * 1000, true /* shortString */);

        assertThat(info.statusLabel).isEqualTo(STATUS_FULL);
    }
@@ -96,7 +106,7 @@ public class BatteryInfoTest {
    public void testGetBatteryInfo_doNotShowChargingMethod_hasRemainingTime() {
        doReturn(REMAINING_TIME).when(mBatteryStats).computeChargeTimeRemaining(anyLong());
        BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
                mBatteryStats, SystemClock.elapsedRealtime() * 1000, false);
                mBatteryStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */);

        assertThat(info.chargeLabelString).isEqualTo(STATUS_CHARGING_TIME);
    }
@@ -105,7 +115,7 @@ public class BatteryInfoTest {
    public void testGetBatteryInfo_doNotShowChargingMethod_noRemainingTime() {
        doReturn(REMAINING_TIME_NULL).when(mBatteryStats).computeChargeTimeRemaining(anyLong());
        BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
                mBatteryStats, SystemClock.elapsedRealtime() * 1000, false);
                mBatteryStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */);

        assertThat(info.chargeLabelString).isEqualTo(STATUS_CHARGING_NO_TIME);
    }
@@ -113,8 +123,46 @@ public class BatteryInfoTest {
    @Test
    public void testGetBatteryInfo_pluggedIn_dischargingFalse() {
        BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
                mBatteryStats, SystemClock.elapsedRealtime() * 1000, true);
                mBatteryStats, SystemClock.elapsedRealtime() * 1000, true /* shortString */);

        assertThat(info.discharging).isEqualTo(false);
    }

    @Test
    public void testGetBatteryInfo_basedOnUsageTrue_usesUsageString() {
        doReturn(mResources).when(mContext).getResources();
        when(mResources.getString(eq(R.string.battery_info_status_full))).thenReturn("");
        when(mResources.getString(eq(R.string.power_remaining_duration_only_enhanced), any()))
                .thenReturn(ENHANCED_STRING_SUFFIX);
        when(mResources.getString(eq(R.string.power_remaining_duration_only_short_enhanced), any()))
                .thenReturn(ENHANCED_STRING_SUFFIX);
        BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
                mBatteryStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */,
                1000, true /* basedOnUsage */);
        BatteryInfo info2 = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
                mBatteryStats, SystemClock.elapsedRealtime() * 1000, true /* shortString */,
                1000, true /* basedOnUsage */);

        assertThat(info.remainingLabel).contains(ENHANCED_STRING_SUFFIX);
        assertThat(info2.remainingLabel).contains(ENHANCED_STRING_SUFFIX);
    }

    @Test
    public void testGetBatteryInfo_basedOnUsageFalse_usesDefaultString() {
        doReturn(mResources).when(mContext).getResources();
        when(mResources.getString(eq(R.string.battery_info_status_full))).thenReturn("");
        when(mResources.getString(not(eq(R.string.power_remaining_duration_only_enhanced)), any()))
                .thenReturn(ENHANCED_STRING_SUFFIX);
        when(mResources.getString(not(eq(R.string.power_remaining_duration_only_short_enhanced)),
                any())).thenReturn("");
        BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
                mBatteryStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */,
                1000, false /* basedOnUsage */);
        BatteryInfo info2 = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
                mBatteryStats, SystemClock.elapsedRealtime() * 1000, true /* shortString */,
                1000, false /* basedOnUsage */);

        assertThat(info.remainingLabel).doesNotContain(ENHANCED_STRING_SUFFIX);
        assertThat(info2.remainingLabel).doesNotContain(ENHANCED_STRING_SUFFIX);
    }
}