From 37a35d5833825e110a766a8c1314df64045d4e31 Mon Sep 17 00:00:00 2001 From: Yiling Chuang Date: Mon, 15 Apr 2024 07:24:59 +0000 Subject: [PATCH] Update wireless charging string Add a capability to provide different strings during wireless charging. Bug: 316239566 Test: robotests Change-Id: Ic7c70ae33ae951dfe931995e5ab0d478222d57c9 --- res/values/strings.xml | 2 + .../BatteryHeaderPreferenceController.java | 14 ++++- .../BatterySettingsFeatureProvider.java | 7 +++ .../BatterySettingsFeatureProviderImpl.java | 10 ++++ ...BatteryHeaderPreferenceControllerTest.java | 54 +++++++++++++++++++ ...atterySettingsFeatureProviderImplTest.java | 4 ++ 6 files changed, 90 insertions(+), 1 deletion(-) 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(); + } }