From 901a46c93e0627006a459e949384818da76e6859 Mon Sep 17 00:00:00 2001 From: Yiling Chuang Date: Mon, 22 Apr 2024 10:04:57 +0000 Subject: [PATCH] Customize the remaining time label during wireless charging. Bug: 336204618 Test: robotests Change-Id: Ic7025f219ee09fba0922ac183daa891e7b63b673 --- .../settings/fuelgauge/BatteryInfo.java | 22 +++++- .../BatterySettingsFeatureProvider.java | 5 ++ .../BatterySettingsFeatureProviderImpl.java | 7 ++ .../settings/fuelgauge/BatteryInfoTest.java | 76 +++++++++++++++++++ ...atterySettingsFeatureProviderImplTest.java | 8 +- 5 files changed, 115 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java index 904923aecdf..f71b29138be 100644 --- a/src/com/android/settings/fuelgauge/BatteryInfo.java +++ b/src/com/android/settings/fuelgauge/BatteryInfo.java @@ -396,7 +396,11 @@ public class BatteryInfo { chargeTimeMs <= 0 ? null : getPowerRemainingChargingLabel( - context, chargeTimeMs, info.isFastCharging, currentTimeMs); + context, + chargeTimeMs, + info.isFastCharging, + info.pluggedStatus, + currentTimeMs); info.chargeLabel = chargeTimeMs <= 0 @@ -428,7 +432,21 @@ public class BatteryInfo { } private static CharSequence getPowerRemainingChargingLabel( - Context context, long remainingTimeMs, boolean isFastCharging, long currentTimeMs) { + Context context, + long remainingTimeMs, + boolean isFastCharging, + int pluggedStatus, + long currentTimeMs) { + if (pluggedStatus == BatteryManager.BATTERY_PLUGGED_WIRELESS) { + BatterySettingsFeatureProvider provider = + FeatureFactory.getFeatureFactory().getBatterySettingsFeatureProvider(); + final CharSequence wirelessChargingRemainingLabel = + provider.getWirelessChargingRemainingLabel( + context, remainingTimeMs, currentTimeMs); + if (wirelessChargingRemainingLabel != null) { + return wirelessChargingRemainingLabel; + } + } if (com.android.settingslib.fuelgauge.BatteryUtils.isChargingStringV2Enabled()) { int chargeLabelResId = isFastCharging diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java index c6fd6d4cf4d..3f674ba7471 100644 --- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java +++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java @@ -48,4 +48,9 @@ public interface BatterySettingsFeatureProvider { /** Return a label for the bottom summary during wireless charging. */ @Nullable CharSequence getWirelessChargingLabel(@NonNull Context context, @NonNull BatteryInfo info); + + /** Return a remaining time label for wireless charging. */ + @Nullable + CharSequence getWirelessChargingRemainingLabel( + @NonNull Context context, long remainingTimeMs, long currentTimeMs); } diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java index a4900fb1eac..49db450bc58 100644 --- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java +++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java @@ -60,4 +60,11 @@ public class BatterySettingsFeatureProviderImpl implements BatterySettingsFeatur @NonNull Context context, @NonNull BatteryInfo info) { return null; } + + @Nullable + @Override + public CharSequence getWirelessChargingRemainingLabel( + @NonNull Context context, long remainingTimeMs, long currentTimeMs) { + return null; + } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java index d5887e6224a..bd5215b399b 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java @@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertWithMessage; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.any; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; @@ -634,6 +635,81 @@ public class BatteryInfoTest { expectedChargeLabel); } + @Test + public void + getBatteryInfo_customizedWirelessChargingLabel_updateRemainingLabelAndStatusLabel() { + prepareTestGetBatteryInfoEnvironment( + /* remainingTimeMs= */ Duration.ofHours(1).toMillis(), + /* chargingStringV2Enabled= */ true); + Intent batteryIntent = + createIntentForGetBatteryInfoTest( + ChargingType.WIRELESS, ChargingSpeed.REGULAR, /* batteryLevel= */ 45); + CharSequence expectedLabel = "Full by 8:00 AM"; + when(mFeatureFactory.batterySettingsFeatureProvider.getWirelessChargingRemainingLabel( + eq(mContext), anyLong(), anyLong())) + .thenReturn(expectedLabel); + var currentTimeMillis = Instant.parse("2021-02-09T13:00:00.00Z").toEpochMilli(); + var info = + BatteryInfo.getBatteryInfo( + mContext, + batteryIntent, + mBatteryUsageStats, + MOCK_ESTIMATE, + /* elapsedRealtimeUs= */ UNUSED_TIME_MS, + /* shortString= */ false, + /* currentTimeMillis= */ currentTimeMillis); + + assertThat(info.remainingLabel).isEqualTo(expectedLabel); + } + + @Test + public void + getBatteryInfo_noCustomizedWirelessChargingLabel_updateRemainingLabelAndStatusLabel() { + prepareTestGetBatteryInfoEnvironment( + /* remainingTimeMs= */ Duration.ofHours(1).toMillis(), + /* chargingStringV2Enabled= */ true); + Intent batteryIntent = + createIntentForGetBatteryInfoTest( + ChargingType.WIRELESS, ChargingSpeed.REGULAR, /* batteryLevel= */ 45); + when(mFeatureFactory.batterySettingsFeatureProvider.getWirelessChargingRemainingLabel( + eq(mContext), anyLong(), anyLong())) + .thenReturn(null); + var expectedStatusLabel = "Charging"; + var expectedRemainingLabel = "Fully charged by"; + var expectedChargeLabel = "45% - " + expectedRemainingLabel; + var currentTimeMillis = Instant.parse("2024-04-01T15:00:00Z").toEpochMilli(); + + assertGetBatteryInfo( + batteryIntent, + currentTimeMillis, + expectedStatusLabel, + expectedRemainingLabel, + expectedChargeLabel); + } + + @Test + public void getBatteryInfo_noCustomWirelessChargingLabelWithV1_updateRemainingAndStatusLabel() { + prepareTestGetBatteryInfoEnvironment( + /* remainingTimeMs= */ Duration.ofMinutes(130).toMillis(), + /* chargingStringV2Enabled= */ false); + Intent batteryIntent = + createIntentForGetBatteryInfoTest( + ChargingType.WIRELESS, ChargingSpeed.REGULAR, /* batteryLevel= */ 10); + when(mFeatureFactory.batterySettingsFeatureProvider.getWirelessChargingRemainingLabel( + eq(mContext), anyLong(), anyLong())) + .thenReturn(null); + var expectedStatusLabel = "Charging wirelessly"; + var expectedRemainingLabel = "2 hr, 10 min left until full"; + var expectedChargeLabel = "10% - " + expectedRemainingLabel; + + assertGetBatteryInfo( + batteryIntent, + /* currentTimeMillis= */ UNUSED_TIME_MS, + expectedStatusLabel, + expectedRemainingLabel, + expectedChargeLabel); + } + private enum ChargingSpeed { FAST, REGULAR, diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java index 158756a52c9..c6241abf5c2 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java @@ -70,7 +70,13 @@ public class BatterySettingsFeatureProviderImplTest { assertThat(expectedResult).isTrue(); } - @Test void getWirelessChargingLabel_returnNull() { + @Test + public void getWirelessChargingLabel_returnNull() { assertThat(mImpl.getWirelessChargingLabel(mContext, new BatteryInfo())).isNull(); } + + @Test + public void getWirelessChargingRemainingLabel_returnNull() { + assertThat(mImpl.getWirelessChargingRemainingLabel(mContext, 1000L, 1000L)).isNull(); + } }