From c17809f03b48b989de5f3b723aba1452c99b83a6 Mon Sep 17 00:00:00 2001 From: Trina Date: Wed, 9 Aug 2023 09:38:31 +0000 Subject: [PATCH] Sync the charge time with battery info on settings Test: atest SettingsTests Bug: 296793655 Change-Id: I407de30589e77ba09916f54f06f4f9c345adf330 --- .../settings/fuelgauge/BatteryInfo.java | 15 +++++++++ .../settings/fuelgauge/BatteryInfoTest.java | 31 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java index 4cc1b1b56aa..9a19e85ca03 100644 --- a/src/com/android/settings/fuelgauge/BatteryInfo.java +++ b/src/com/android/settings/fuelgauge/BatteryInfo.java @@ -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; diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java index b0d6da6ca2b..2ba9f33a9f8 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java @@ -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)