Merge "Update the flow of charging optimization strings." into main
diff --git a/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java
index 06c3cee..8467b2f 100644
--- a/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java
@@ -86,13 +86,14 @@
return mContext.getString(
com.android.settingslib.R.string.battery_info_status_charging_on_hold);
}
+ if (info.remainingLabel != null
+ && mBatterySettingsFeatureProvider.isChargingOptimizationMode(mContext)) {
+ return info.remainingLabel;
+ }
if (info.remainingLabel == null
|| info.batteryStatus == BatteryManager.BATTERY_STATUS_NOT_CHARGING) {
return info.statusLabel;
}
- if (mBatterySettingsFeatureProvider.isChargingOptimizationMode(mContext)) {
- return info.remainingLabel;
- }
if (info.pluggedStatus == BatteryManager.BATTERY_PLUGGED_WIRELESS) {
final CharSequence wirelessChargingLabel =
mBatterySettingsFeatureProvider.getWirelessChargingLabel(mContext, info);
diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java
index c333a33..b54801a 100644
--- a/src/com/android/settings/fuelgauge/BatteryInfo.java
+++ b/src/com/android/settings/fuelgauge/BatteryInfo.java
@@ -390,12 +390,37 @@
info.remainingLabel = null;
int chargingLimitedResId = R.string.power_charging_limited;
info.chargeLabel = context.getString(chargingLimitedResId, info.batteryPercentString);
- } else if ((chargeTimeMs > 0
+ return;
+ }
+ final BatterySettingsFeatureProvider featureProvider =
+ FeatureFactory.getFeatureFactory().getBatterySettingsFeatureProvider();
+ if (featureProvider.isChargingOptimizationMode(context)) {
+ final CharSequence chargeLabel =
+ featureProvider.getChargingOptimizationChargeLabel(
+ context,
+ info.batteryLevel,
+ info.batteryPercentString,
+ chargeTimeMs,
+ currentTimeMs);
+ if (chargeLabel != null) {
+ final CharSequence remainingLabel =
+ featureProvider.getChargingOptimizationRemainingLabel(
+ context,
+ info.batteryLevel,
+ info.pluggedStatus,
+ chargeTimeMs,
+ currentTimeMs);
+ if (remainingLabel != null) {
+ info.chargeLabel = chargeLabel;
+ info.remainingLabel = remainingLabel;
+ return;
+ }
+ }
+ }
+ if ((chargeTimeMs > 0
&& status != BatteryManager.BATTERY_STATUS_FULL
&& dockDefenderMode == BatteryUtils.DockDefenderMode.DISABLED)
|| dockDefenderMode == BatteryUtils.DockDefenderMode.TEMPORARILY_BYPASSED) {
- final BatterySettingsFeatureProvider featureProvider =
- FeatureFactory.getFeatureFactory().getBatterySettingsFeatureProvider();
// Battery is charging to full
info.remainingTimeUs = PowerUtil.convertMsToUs(chargeTimeMs);
int resId = getChargingDurationResId(info.isFastCharging);
@@ -419,8 +444,7 @@
info.batteryPercentString,
chargeTimeMs,
info.isFastCharging,
- currentTimeMs,
- featureProvider);
+ currentTimeMs);
} else if (dockDefenderMode == BatteryUtils.DockDefenderMode.FUTURE_BYPASS) {
// Dock defender will be triggered in the future, charging will be optimized.
info.chargeLabel =
@@ -447,14 +471,6 @@
int pluggedStatus,
long currentTimeMs,
BatterySettingsFeatureProvider featureProvider) {
- if (featureProvider.isChargingOptimizationMode(context)) {
- final CharSequence chargingOptimizationRemainingLabel =
- featureProvider.getChargingOptimizationRemainingLabel(
- context, chargeRemainingTimeMs, currentTimeMs);
- if (chargingOptimizationRemainingLabel != null) {
- return chargingOptimizationRemainingLabel;
- }
- }
if (pluggedStatus == BatteryManager.BATTERY_PLUGGED_WIRELESS) {
final CharSequence wirelessChargingRemainingLabel =
featureProvider.getWirelessChargingRemainingLabel(
@@ -488,16 +504,7 @@
String batteryPercentString,
long chargeTimeMs,
boolean isFastCharging,
- long currentTimeMs,
- BatterySettingsFeatureProvider featureProvider) {
- if (featureProvider.isChargingOptimizationMode(context)) {
- final CharSequence chargingOptimizationChargeLabel =
- featureProvider.getChargingOptimizationChargeLabel(
- context, batteryPercentString, chargeTimeMs, currentTimeMs);
- if (chargingOptimizationChargeLabel != null) {
- return chargingOptimizationChargeLabel;
- }
- }
+ long currentTimeMs) {
if (com.android.settingslib.fuelgauge.BatteryUtils.isChargingStringV2Enabled()) {
var timeString =
PowerUtil.getTargetTimeShortString(context, chargeTimeMs, currentTimeMs);
diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
index ab6d5ac..454a295 100644
--- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
@@ -60,13 +60,18 @@
/** Return a charging remaining time label for charging optimization mode. */
@Nullable
CharSequence getChargingOptimizationRemainingLabel(
- @NonNull Context context, long chargeRemainingTimeMs, long currentTimeMs);
+ @NonNull Context context,
+ int batteryLevel,
+ int pluggedStatus,
+ long chargeRemainingTimeMs,
+ long currentTimeMs);
/** Return a charge label for charging optimization mode. */
@Nullable
CharSequence getChargingOptimizationChargeLabel(
@NonNull Context context,
- @NonNull String batteryPercentageString,
+ int batteryLevel,
+ String batteryPercentageString,
long chargeRemainingTimeMs,
long currentTimeMs);
}
diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
index b2db347..40cfd0c 100644
--- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
@@ -76,7 +76,11 @@
@Nullable
@Override
public CharSequence getChargingOptimizationRemainingLabel(
- @NonNull Context context, long chargeRemainingTimeMs, long currentTimeMs) {
+ @NonNull Context context,
+ int batteryLevel,
+ int pluggedStatus,
+ long chargeRemainingTimeMs,
+ long currentTimeMs) {
return null;
}
@@ -84,7 +88,8 @@
@Override
public CharSequence getChargingOptimizationChargeLabel(
@NonNull Context context,
- @NonNull String batteryPercentageString,
+ int batteryLevel,
+ String batteryPercentageString,
long chargeRemainingTimeMs,
long currentTimeMs) {
return null;
diff --git a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
index 08d49f1..fd0d820 100644
--- a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
@@ -159,6 +159,11 @@
com.android.settingslib.R.string.power_charging_on_hold_settings_home_page,
info.batteryPercentString);
}
+ final BatterySettingsFeatureProvider featureProvider =
+ FeatureFactory.getFeatureFactory().getBatterySettingsFeatureProvider();
+ if (info.chargeLabel != null && featureProvider.isChargingOptimizationMode(mContext)) {
+ return info.chargeLabel;
+ }
if (info.batteryStatus == BatteryManager.BATTERY_STATUS_NOT_CHARGING) {
// Present status only if no remaining time or status anomalous
return info.statusLabel;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
index bc6dadc..1899eab 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
@@ -286,8 +286,9 @@
/* isFastCharging= */ true,
/* isChargingStringV2= */ true);
batteryInfo.pluggedStatus = BatteryManager.BATTERY_PLUGGED_WIRELESS;
- when(mFactory.batterySettingsFeatureProvider.getWirelessChargingLabel(eq(mContext),
- any(BatteryInfo.class))).thenReturn(label);
+ when(mFactory.batterySettingsFeatureProvider.getWirelessChargingLabel(
+ eq(mContext), any(BatteryInfo.class)))
+ .thenReturn(label);
mController.updateBatteryStatus(/* label= */ null, batteryInfo);
@@ -326,14 +327,64 @@
verify(mBatteryUsageProgressBarPref).setBottomSummary(expectedChargingString);
}
+ @Test
+ public void updateBatteryStatus_chargingOptimizationMode_remainingLabel() {
+ var batteryInfo =
+ arrangeUpdateBatteryStatusTestWithRemainingLabel(
+ /* remainingLabel= */ "Expected remaining label",
+ /* statusLabel= */ "Fast Charging",
+ /* isFastCharging= */ true,
+ /* isChargingStringV2= */ true);
+ var expectedChargingString = batteryInfo.remainingLabel;
+ when(mFactory.batterySettingsFeatureProvider.isChargingOptimizationMode(mContext))
+ .thenReturn(true);
+
+ mController.updateBatteryStatus(/* label= */ null, batteryInfo);
+
+ verify(mBatteryUsageProgressBarPref).setBottomSummary(expectedChargingString);
+ }
+
+ @Test
+ public void updateBatteryStatus_chargingOptimizationModeNoRemainingLabel_statusLabel() {
+ var batteryInfo =
+ arrangeUpdateBatteryStatusTestWithRemainingLabel(
+ /* remainingLabel= */ null,
+ /* statusLabel= */ "Fast Charging",
+ /* isFastCharging= */ true,
+ /* isChargingStringV2= */ true);
+ var expectedChargingString = batteryInfo.statusLabel;
+ when(mFactory.batterySettingsFeatureProvider.isChargingOptimizationMode(mContext))
+ .thenReturn(true);
+
+ mController.updateBatteryStatus(/* label= */ null, batteryInfo);
+
+ verify(mBatteryUsageProgressBarPref).setBottomSummary(expectedChargingString);
+ }
+
+ @Test
+ public void updateBatteryStatus_notChargingOptimizationMode_statusWithRemainingLabel() {
+ var batteryInfo =
+ arrangeUpdateBatteryStatusTestWithRemainingLabel(
+ /* remainingLabel= */ "Full by 1:30 PM",
+ /* statusLabel= */ "Fast Charging",
+ /* isFastCharging= */ true,
+ /* isChargingStringV2= */ true);
+ var expectedChargingString = batteryInfo.statusLabel + " • " + batteryInfo.remainingLabel;
+ when(mFactory.batterySettingsFeatureProvider.isChargingOptimizationMode(mContext))
+ .thenReturn(false);
+
+ mController.updateBatteryStatus(/* label= */ null, batteryInfo);
+
+ verify(mBatteryUsageProgressBarPref).setBottomSummary(expectedChargingString);
+ }
+
private BatteryInfo arrangeUpdateBatteryStatusTestWithRemainingLabel(
String remainingLabel,
String statusLabel,
boolean isFastCharging,
boolean isChargingStringV2) {
SystemProperties.set(
- BatteryUtils.PROPERTY_CHARGING_STRING_V2_KEY,
- String.valueOf(isChargingStringV2));
+ BatteryUtils.PROPERTY_CHARGING_STRING_V2_KEY, String.valueOf(isChargingStringV2));
mBatteryInfo.isBatteryDefender = false;
mBatteryInfo.remainingLabel = remainingLabel;
mBatteryInfo.statusLabel = statusLabel;
@@ -389,8 +440,11 @@
mController.updateHeaderPreference(mBatteryInfo);
- verify(mBatteryUsageProgressBarPref).setBottomSummary(mContext.getString(
- com.android.settingslib.R.string.battery_info_status_charging_on_hold));
+ verify(mBatteryUsageProgressBarPref)
+ .setBottomSummary(
+ mContext.getString(
+ com.android.settingslib.R.string
+ .battery_info_status_charging_on_hold));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
index a1081f4..7bafc6d 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
@@ -724,15 +724,15 @@
Intent batteryIntent =
createIntentForGetBatteryInfoTest(
ChargingType.WIRED, ChargingSpeed.REGULAR, /* batteryLevel= */ 65);
- var expectedRemainingLabel = "Done charging by";
+ var expectedRemainingLabel = "Expected remaining label";
var expectedChargeLabel = "65% - " + expectedRemainingLabel;
when(mFeatureFactory.batterySettingsFeatureProvider.isChargingOptimizationMode(mContext))
.thenReturn(true);
when(mFeatureFactory.batterySettingsFeatureProvider.getChargingOptimizationRemainingLabel(
- eq(mContext), anyLong(), anyLong()))
+ eq(mContext), anyInt(), anyInt(), anyLong(), anyLong()))
.thenReturn(expectedRemainingLabel);
when(mFeatureFactory.batterySettingsFeatureProvider.getChargingOptimizationChargeLabel(
- eq(mContext), anyString(), anyLong(), anyLong()))
+ eq(mContext), anyInt(), anyString(), anyLong(), anyLong()))
.thenReturn(expectedChargeLabel);
var expectedStatusLabel = "Charging";
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java
index c55a121..9f04892 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java
@@ -19,6 +19,7 @@
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
+import android.os.BatteryManager;
import androidx.test.core.app.ApplicationProvider;
@@ -87,12 +88,15 @@
@Test
public void getChargingOptimizationRemainingLabel_default_returnNull() {
- assertThat(mImpl.getChargingOptimizationRemainingLabel(mContext, 1000L, 1000L)).isNull();
+ assertThat(
+ mImpl.getChargingOptimizationRemainingLabel(
+ mContext, 75, BatteryManager.BATTERY_PLUGGED_AC, 1000L, 1000L))
+ .isNull();
}
@Test
public void getChargingOptimizationChargeLabel_default_returnNull() {
- assertThat(mImpl.getChargingOptimizationChargeLabel(mContext, "70%", 1000L, 1000L))
+ assertThat(mImpl.getChargingOptimizationChargeLabel(mContext, 70, "70%", 1000L, 1000L))
.isNull();
}
}