diff --git a/res/values/strings.xml b/res/values/strings.xml
index f695be50ebf..8b605fab1a1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7198,6 +7198,8 @@
+
+
diff --git a/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java
index d77ec31084c..5872e814b4d 100644
--- a/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java
@@ -43,14 +43,18 @@ public class BatteryHeaderPreferenceController extends BasePreferenceController
@VisibleForTesting BatteryStatusFeatureProvider mBatteryStatusFeatureProvider;
@VisibleForTesting UsageProgressBarPreference mBatteryUsageProgressBarPref;
- private BatteryTip mBatteryTip;
private final PowerManager mPowerManager;
+ private final BatterySettingsFeatureProvider mBatterySettingsFeatureProvider;
+
+ private BatteryTip mBatteryTip;
public BatteryHeaderPreferenceController(Context context, String key) {
super(context, key);
mPowerManager = context.getSystemService(PowerManager.class);
mBatteryStatusFeatureProvider =
FeatureFactory.getFeatureFactory().getBatteryStatusFeatureProvider();
+ mBatterySettingsFeatureProvider =
+ FeatureFactory.getFeatureFactory().getBatterySettingsFeatureProvider();
}
@Override
@@ -74,6 +78,14 @@ public class BatteryHeaderPreferenceController extends BasePreferenceController
}
private CharSequence generateLabel(BatteryInfo info) {
+ if (info.pluggedStatus == BatteryManager.BATTERY_PLUGGED_WIRELESS) {
+ final CharSequence wirelessChargingLabel =
+ mBatterySettingsFeatureProvider.getWirelessChargingLabel(mContext, info);
+ if (wirelessChargingLabel != null) {
+ return wirelessChargingLabel;
+ }
+ }
+
if (Utils.containsIncompatibleChargers(mContext, TAG)) {
return mContext.getString(
com.android.settingslib.R.string.battery_info_status_not_charging);
diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
index 62be5dfc365..c6fd6d4cf4d 100644
--- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
@@ -18,6 +18,9 @@ package com.android.settings.fuelgauge;
import android.content.Context;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
@@ -41,4 +44,8 @@ public interface BatterySettingsFeatureProvider {
List batteryTips,
BatteryInfo batteryInfo,
BatteryTipPolicy batteryTipPolicy);
+
+ /** Return a label for the bottom summary during wireless charging. */
+ @Nullable
+ CharSequence getWirelessChargingLabel(@NonNull Context context, @NonNull BatteryInfo info);
}
diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
index f39837370d1..a4900fb1eac 100644
--- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
@@ -18,6 +18,9 @@ package com.android.settings.fuelgauge;
import android.content.Context;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy;
import com.android.settings.fuelgauge.batterytip.detectors.LowBatteryDetector;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
@@ -50,4 +53,11 @@ public class BatterySettingsFeatureProviderImpl implements BatterySettingsFeatur
BatteryTipPolicy batteryTipPolicy) {
batteryTips.add(new LowBatteryDetector(context, batteryTipPolicy, batteryInfo).detect());
}
+
+ @Override
+ @Nullable
+ public CharSequence getWirelessChargingLabel(
+ @NonNull Context context, @NonNull BatteryInfo info) {
+ return null;
+ }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
index 84f5dbad32e..bc6dadc72ac 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
@@ -17,6 +17,7 @@ package com.android.settings.fuelgauge;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -40,6 +41,7 @@ import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.fuelgauge.batterytip.tips.LowBatteryTip;
import com.android.settings.fuelgauge.batterytip.tips.SmartBatteryTip;
import com.android.settings.testutils.BatteryTestUtils;
+import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settings.widget.EntityHeaderController;
@@ -81,6 +83,7 @@ public class BatteryHeaderPreferenceControllerTest {
private Context mContext;
private ShadowPowerManager mShadowPowerManager;
private Intent mBatteryIntent;
+ private FakeFeatureFactory mFactory;
@Before
public void setUp() {
@@ -103,6 +106,7 @@ public class BatteryHeaderPreferenceControllerTest {
mBatteryInfo.batteryLevel = BATTERY_LEVEL;
mShadowPowerManager = Shadows.shadowOf(mContext.getSystemService(PowerManager.class));
+ mFactory = FakeFeatureFactory.setupForTest();
mController = spy(new BatteryHeaderPreferenceController(mContext, PREF_KEY));
mController.mBatteryUsageProgressBarPref = mBatteryUsageProgressBarPref;
@@ -272,6 +276,56 @@ public class BatteryHeaderPreferenceControllerTest {
verify(mBatteryUsageProgressBarPref).setBottomSummary(expectedChargingString);
}
+ @Test
+ public void updateBatteryStatus_customizedWirelessChargingLabel_customizedLabel() {
+ var label = "Customized Wireless Charging Label";
+ var batteryInfo =
+ arrangeUpdateBatteryStatusTestWithRemainingLabel(
+ /* remainingLabel= */ "Full by 1:30 PM",
+ /* statusLabel= */ "Fast Charging",
+ /* isFastCharging= */ true,
+ /* isChargingStringV2= */ true);
+ batteryInfo.pluggedStatus = BatteryManager.BATTERY_PLUGGED_WIRELESS;
+ when(mFactory.batterySettingsFeatureProvider.getWirelessChargingLabel(eq(mContext),
+ any(BatteryInfo.class))).thenReturn(label);
+
+ mController.updateBatteryStatus(/* label= */ null, batteryInfo);
+
+ verify(mBatteryUsageProgressBarPref).setBottomSummary(label);
+ }
+
+ @Test
+ public void updateBatteryStatus_noCustomizedWirelessChargingLabel_statusWithRemainingLabel() {
+ var batteryInfo =
+ arrangeUpdateBatteryStatusTestWithRemainingLabel(
+ /* remainingLabel= */ "Full by 1:30 PM",
+ /* statusLabel= */ "Fast Charging",
+ /* isFastCharging= */ true,
+ /* isChargingStringV2= */ true);
+ batteryInfo.pluggedStatus = BatteryManager.BATTERY_PLUGGED_WIRELESS;
+ var expectedChargingString = batteryInfo.statusLabel + " • " + batteryInfo.remainingLabel;
+
+ mController.updateBatteryStatus(/* label= */ null, batteryInfo);
+
+ verify(mBatteryUsageProgressBarPref).setBottomSummary(expectedChargingString);
+ }
+
+ @Test
+ public void updateBatteryStatus_noCustomizedWirelessChargingLabel_v1StatusWithRemainingLabel() {
+ var batteryInfo =
+ arrangeUpdateBatteryStatusTestWithRemainingLabel(
+ /* remainingLabel= */ "1 hr, 40 min left until full",
+ /* statusLabel= */ "Charging wirelessly",
+ /* isFastCharging= */ false,
+ /* isChargingStringV2= */ false);
+ batteryInfo.pluggedStatus = BatteryManager.BATTERY_PLUGGED_WIRELESS;
+ var expectedChargingString = batteryInfo.statusLabel + " • " + batteryInfo.remainingLabel;
+
+ mController.updateBatteryStatus(/* label= */ null, batteryInfo);
+
+ verify(mBatteryUsageProgressBarPref).setBottomSummary(expectedChargingString);
+ }
+
private BatteryInfo arrangeUpdateBatteryStatusTestWithRemainingLabel(
String remainingLabel,
String statusLabel,
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java
index 14ba337cda6..158756a52c9 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java
@@ -69,4 +69,8 @@ public class BatterySettingsFeatureProviderImplTest {
var expectedResult = tips.stream().anyMatch(tip -> tip instanceof LowBatteryTip);
assertThat(expectedResult).isTrue();
}
+
+ @Test void getWirelessChargingLabel_returnNull() {
+ assertThat(mImpl.getWirelessChargingLabel(mContext, new BatteryInfo())).isNull();
+ }
}