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

Commit c17809f0 authored by Trina's avatar Trina
Browse files

Sync the charge time with battery info on settings

Test: atest SettingsTests

Bug: 296793655
Change-Id: I407de30589e77ba09916f54f06f4f9c345adf330
parent a9a819a5
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.os.BatteryStats.HistoryItem;
import android.os.BatteryStatsManager;
import android.os.BatteryUsageStats;
import android.os.SystemClock;
import android.provider.Settings;
import android.text.format.Formatter;
import android.util.Log;
import android.util.SparseIntArray;
@@ -43,6 +44,7 @@ import com.android.settingslib.utils.StringUtil;

public class BatteryInfo {
    private static final String TAG = "BatteryInfo";
    private static final String GLOBAL_TIME_TO_FULL_MILLIS = "time_to_full_millis";

    public CharSequence chargeLabel;
    public CharSequence remainingLabel;
@@ -147,6 +149,12 @@ public class BatteryInfo {
        BatteryInfo.getBatteryInfo(context, callback,  /* batteryUsageStats */ null, shortString);
    }

    static long getSettingsChargeTimeRemaining(final Context context) {
        return Settings.Global.getLong(
                context.getContentResolver(),
                GLOBAL_TIME_TO_FULL_MILLIS, -1);
    }

    public static void getBatteryInfo(final Context context, final Callback callback,
            @Nullable final BatteryUsageStats batteryUsageStats,
            boolean shortString) {
@@ -276,6 +284,13 @@ public class BatteryInfo {
            BatteryUsageStats stats, BatteryInfo info, boolean compactStatus) {
        final Resources resources = context.getResources();
        final long chargeTimeMs = stats.getChargeTimeRemainingMs();
        if (getSettingsChargeTimeRemaining(context) != chargeTimeMs) {
            Settings.Global.putLong(
                    context.getContentResolver(),
                    GLOBAL_TIME_TO_FULL_MILLIS,
                    chargeTimeMs);
        }

        final int status = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_STATUS,
                BatteryManager.BATTERY_STATUS_UNKNOWN);
        info.discharging = false;
+31 −0
Original line number Diff line number Diff line
@@ -229,6 +229,37 @@ public class BatteryInfoTest {
        assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_PAUSED);
    }

    @Test
    public void testGetBatteryInfo_getChargeTimeRemaining_updateSettingsGlobal() {
        doReturn(TEST_CHARGE_TIME_REMAINING)
                .when(mBatteryUsageStats)
                .getChargeTimeRemainingMs();

        BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
                mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
                false /* shortString */);

        assertThat(BatteryInfo.getSettingsChargeTimeRemaining(mContext)).isEqualTo(
                TEST_CHARGE_TIME_REMAINING);
    }

    @Test
    public void testGetBatteryInfo_differentChargeTimeRemaining_updateSettingsGlobal() {
        doReturn(TEST_CHARGE_TIME_REMAINING)
                .when(mBatteryUsageStats)
                .getChargeTimeRemainingMs();
        final long newTimeToFull = 300L;
        doReturn(newTimeToFull)
                .when(mBatteryUsageStats)
                .getChargeTimeRemainingMs();

        BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
                mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
                false /* shortString */);

        assertThat(BatteryInfo.getSettingsChargeTimeRemaining(mContext)).isEqualTo(newTimeToFull);
    }

    @Test
    public void testGetBatteryInfo_dockDefenderActive_updateChargeString() {
        doReturn(TEST_CHARGE_TIME_REMAINING / 1000)