Add content description string for '<1%'.

Bug: 322855583
Test: atest SettingsRoboTests:com.android.settings.fuelgauge.batteryusage
Change-Id: I704a591ab4cba21644e86457c2dd1000ceecc291
diff --git a/res/values/strings.xml b/res/values/strings.xml
index dea6b60..b34a682 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6108,6 +6108,8 @@
     <string name="battery_usage_spinner_view_by_systems">View by systems</string>
     <!-- [CHAR_LIMIT=NONE] Less than some percentage, e.g. < 1% -->
     <string name="battery_usage_less_than_percent">&lt; <xliff:g id="percentage">%1$s</xliff:g></string>
+    <!-- [CHAR_LIMIT=NONE] Accessibility content description for less than some percentage, e.g. less than 1% -->
+    <string name="battery_usage_less_than_percent_content_description">less than <xliff:g id="percentage">%1$s</xliff:g></string>
     <!-- Process Stats strings -->
     <skip />
     <!-- Description of battery information footer text. [CHAR LIMIT=NONE] -->
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java
index 47c171e..f9565f4 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java
@@ -88,6 +88,7 @@
     @VisibleForTesting FooterPreference mFooterPreference;
     @VisibleForTesting BatteryDiffData mBatteryDiffData;
     @VisibleForTesting String mPercentLessThanThresholdText;
+    @VisibleForTesting String mPercentLessThanThresholdContentDescription;
     @VisibleForTesting boolean mIsHighlightSlot;
     @VisibleForTesting int mAnomalyKeyNumber;
     @VisibleForTesting String mAnomalyEntryKey;
@@ -202,10 +203,14 @@
         mSpinnerPreference = screen.findPreference(SPINNER_PREFERENCE_KEY);
         mAppListPreferenceGroup = screen.findPreference(APP_LIST_PREFERENCE_KEY);
         mFooterPreference = screen.findPreference(FOOTER_PREFERENCE_KEY);
+        final String formatPercentage =
+                Utils.formatPercentage(BatteryDiffData.SMALL_PERCENTAGE_THRESHOLD, false);
         mPercentLessThanThresholdText =
+                mPrefContext.getString(R.string.battery_usage_less_than_percent, formatPercentage);
+        mPercentLessThanThresholdContentDescription =
                 mPrefContext.getString(
-                        R.string.battery_usage_less_than_percent,
-                        Utils.formatPercentage(BatteryDiffData.SMALL_PERCENTAGE_THRESHOLD, false));
+                        R.string.battery_usage_less_than_percent_content_description,
+                        formatPercentage);
 
         mAppListPreferenceGroup.setOrderingAsAdded(false);
         mSpinnerPreference.initializeSpinner(
@@ -394,12 +399,15 @@
 
     @VisibleForTesting
     void setPreferencePercentage(PowerGaugePreference preference, BatteryDiffEntry entry) {
-        preference.setPercentage(
-                entry.getPercentage() < BatteryDiffData.SMALL_PERCENTAGE_THRESHOLD
-                        ? mPercentLessThanThresholdText
-                        : Utils.formatPercentage(
-                                entry.getPercentage() + entry.getAdjustPercentageOffset(),
-                                /* round= */ true));
+        if (entry.getPercentage() < BatteryDiffData.SMALL_PERCENTAGE_THRESHOLD) {
+            preference.setPercentage(mPercentLessThanThresholdText);
+            preference.setPercentageContentDescription(mPercentLessThanThresholdContentDescription);
+        } else {
+            preference.setPercentage(
+                    Utils.formatPercentage(
+                            entry.getPercentage() + entry.getAdjustPercentageOffset(),
+                            /* round= */ true));
+        }
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java b/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java
index fca618b..2f6b30e 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.ViewGroup;
@@ -47,6 +48,7 @@
     private BatteryDiffEntry mBatteryDiffEntry;
     private CharSequence mContentDescription;
     private CharSequence mProgress;
+    private CharSequence mProgressContentDescription;
     private boolean mShowAnomalyIcon;
 
     public PowerGaugePreference(
@@ -87,6 +89,13 @@
     /** Sets the percentage to show. */
     public void setPercentage(CharSequence percentage) {
         mProgress = percentage;
+        mProgressContentDescription = percentage;
+        notifyChanged();
+    }
+
+    /** Sets the content description of the percentage. */
+    public void setPercentageContentDescription(CharSequence contentDescription) {
+        mProgressContentDescription = contentDescription;
         notifyChanged();
     }
 
@@ -133,6 +142,9 @@
 
         final TextView subtitle = (TextView) view.findViewById(R.id.widget_summary);
         subtitle.setText(mProgress);
+        if (!TextUtils.isEmpty(mProgressContentDescription)) {
+            subtitle.setContentDescription(mProgressContentDescription);
+        }
         if (mShowAnomalyIcon) {
             subtitle.setCompoundDrawablesRelativeWithIntrinsicBounds(
                     R.drawable.ic_warning_24dp, 0, 0, 0);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java
index 7dcbe3a..4c64808 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java
@@ -271,7 +271,7 @@
 
     @Test
     public void setPreferencePercent_lessThanThreshold_expectedFormat() {
-        final PowerGaugePreference pref = new PowerGaugePreference(mContext);
+        final PowerGaugePreference pref = spy(new PowerGaugePreference(mContext));
         final BatteryDiffEntry batteryDiffEntry =
                 createBatteryDiffEntry(
                         /* isSystem= */ true,
@@ -282,15 +282,18 @@
         batteryDiffEntry.mConsumePower = 0.8;
         batteryDiffEntry.setTotalConsumePower(100);
         mBatteryUsageBreakdownController.mPercentLessThanThresholdText = "< 1%";
+        mBatteryUsageBreakdownController.mPercentLessThanThresholdContentDescription =
+                "test content description";
 
         mBatteryUsageBreakdownController.setPreferencePercentage(pref, batteryDiffEntry);
 
         assertThat(pref.getPercentage()).isEqualTo("< 1%");
+        verify(pref).setPercentageContentDescription("test content description");
     }
 
     @Test
     public void setPreferencePercent_greaterThanThreshold_expectedFormat() {
-        final PowerGaugePreference pref = new PowerGaugePreference(mContext);
+        final PowerGaugePreference pref = spy(new PowerGaugePreference(mContext));
         final BatteryDiffEntry batteryDiffEntry =
                 createBatteryDiffEntry(
                         /* isSystem= */ true,
@@ -301,10 +304,13 @@
         batteryDiffEntry.mConsumePower = 16;
         batteryDiffEntry.setTotalConsumePower(100);
         mBatteryUsageBreakdownController.mPercentLessThanThresholdText = "< 1%";
+        mBatteryUsageBreakdownController.mPercentLessThanThresholdContentDescription =
+                "test content description";
 
         mBatteryUsageBreakdownController.setPreferencePercentage(pref, batteryDiffEntry);
 
         assertThat(pref.getPercentage()).isEqualTo("16%");
+        verify(pref, never()).setPercentageContentDescription(any());
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java
index ef4460b..f64ef49 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java
@@ -101,4 +101,13 @@
         assertThat(mPreferenceViewHolder.findViewById(android.R.id.title).getContentDescription())
                 .isEqualTo(CONTENT_DESCRIPTION);
     }
+
+    @Test
+    public void testOnBindViewHolder_bindPercentageContentDescription() {
+        mPowerGaugePreference.setPercentageContentDescription(CONTENT_DESCRIPTION);
+        mPowerGaugePreference.onBindViewHolder(mPreferenceViewHolder);
+
+        assertThat(mPreferenceViewHolder.findViewById(R.id.widget_summary).getContentDescription())
+                .isEqualTo(CONTENT_DESCRIPTION);
+    }
 }