Sync the charge time with battery info on settings

Test: atest SettingsTests

Bug: 296793655
Change-Id: I407de30589e77ba09916f54f06f4f9c345adf330
This commit is contained in:
Trina
2023-08-09 09:38:31 +00:00
parent a9a819a5d7
commit c17809f03b
2 changed files with 46 additions and 0 deletions

View File

@@ -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;

View File

@@ -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)