diff --git a/res/values/strings.xml b/res/values/strings.xml index dea6b60821e..b34a682093a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6108,6 +6108,8 @@ View by systems < %1$s + + less than %1$s diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java index 47c171e26bd..f9565f47a3e 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java @@ -88,6 +88,7 @@ public class BatteryUsageBreakdownController extends BasePreferenceController @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 @@ public class BatteryUsageBreakdownController extends BasePreferenceController 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 @@ public class BatteryUsageBreakdownController extends BasePreferenceController @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 fca618beceb..2f6b30ed341 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java +++ b/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java @@ -18,6 +18,7 @@ package com.android.settings.fuelgauge.batteryusage; 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 @@ public class PowerGaugePreference extends AppPreference { private BatteryDiffEntry mBatteryDiffEntry; private CharSequence mContentDescription; private CharSequence mProgress; + private CharSequence mProgressContentDescription; private boolean mShowAnomalyIcon; public PowerGaugePreference( @@ -87,6 +89,13 @@ public class PowerGaugePreference extends AppPreference { /** 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 @@ public class PowerGaugePreference extends AppPreference { 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 7dcbe3a5ab7..4c648083106 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 @@ public final class BatteryUsageBreakdownControllerTest { @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 @@ public final class BatteryUsageBreakdownControllerTest { 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 @@ public final class BatteryUsageBreakdownControllerTest { 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 ef4460bd8d6..f64ef495aeb 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 @@ public class PowerGaugePreferenceTest { 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); + } }