Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d92f82b4 authored by Xinyi Mao's avatar Xinyi Mao Committed by Android (Google) Code Review
Browse files

Merge "Update accessibility content description for battery usage chart view." into main

parents 2a5dda45 b20f910c
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -5866,12 +5866,16 @@
    <string name="battery_usage_timestamps_hyphen"><xliff:g id="from_timestamp">%1$s</xliff:g> - <xliff:g id="to_timestamp">%2$s</xliff:g></string>
    <!-- [CHAR_LIMIT=NONE] The first slot is a week day (e.g. "Monday"); the second slot is a hourly time span (e.g. "6 AM - 8 AM"). -->
    <string name="battery_usage_day_and_hour"><xliff:g id="day">%1$s</xliff:g> <xliff:g id="hour">%2$s</xliff:g></string>
    <!-- [CHAR_LIMIT=NONE] Accessibility content description for each slot in battery chart view. -->
    <string name="battery_usage_time_info_and_battery_level"><xliff:g id="time_info" example="Battery usage for Monday 6 AM - 8 AM">%1$s</xliff:g> <xliff:g id="battery_level" example="Battery level percentage from 83% to 59%">%2$s</xliff:g></string>
    <!-- [CHAR_LIMIT=NONE] Accessibility content description for battery chart view. -->
    <string name="battery_usage_chart">Battery usage chart</string>
    <!-- [CHAR_LIMIT=NONE] Accessibility content description for daily battery chart view. -->
    <string name="daily_battery_usage_chart">Daily battery usage chart</string>
    <!-- [CHAR_LIMIT=NONE] Accessibility content description for hourly battery chart view. -->
    <string name="hourly_battery_usage_chart">Hourly battery usage chart</string>
    <!-- [CHAR_LIMIT=NONE] Accessibility content description for battery level percentage. -->
    <string name="battery_level_percentage">Battery level percentage from <xliff:g id="start_percentage">%1$s</xliff:g> to <xliff:g id="end_percentage">%2$s</xliff:g></string>
    <!-- [CHAR_LIMIT=NONE] Battery usage breakdown title since last full charge -->
    <string name="battery_usage_breakdown_title_since_last_full_charge">Battery usage since last full charge</string>
    <!-- [CHAR_LIMIT=NONE] Battery usage breakdown title for a selected slot -->
+52 −7
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -427,13 +428,35 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
                R.string.battery_usage_day_and_hour, selectedDayText, selectedHourText);
    }

    @VisibleForTesting
    String getBatteryLevelPercentageInfo() {
        if (mDailyViewModel == null || mHourlyViewModels == null) {
            // No data
            return "";
        }

        if (mDailyChartIndex == BatteryChartViewModel.SELECTED_INDEX_ALL
                || mHourlyChartIndex == BatteryChartViewModel.SELECTED_INDEX_ALL) {
            return mDailyViewModel.getSlotBatteryLevelText(mDailyChartIndex);
        }

        return mHourlyViewModels.get(mDailyChartIndex).getSlotBatteryLevelText(mHourlyChartIndex);
    }

    private String getAccessibilityAnnounceMessage() {
        final String slotInformation = getSlotInformation();
        return slotInformation == null
        final String slotInformationMessage =
                slotInformation == null
                        ? mPrefContext.getString(
                                R.string.battery_usage_breakdown_title_since_last_full_charge)
                        : mPrefContext.getString(
                                R.string.battery_usage_breakdown_title_for_slot, slotInformation);
        final String batteryLevelPercentageMessage = getBatteryLevelPercentageInfo();

        return mPrefContext.getString(
                R.string.battery_usage_time_info_and_battery_level,
                slotInformationMessage,
                batteryLevelPercentageMessage);
    }

    private void animateBatteryChartViewGroup() {
@@ -573,7 +596,29 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
        return null;
    }

    private final class DailyChartLabelTextGenerator
    private abstract class BaseLabelTextGenerator
            implements BatteryChartViewModel.LabelTextGenerator {
        @Override
        public String generateSlotBatteryLevelText(List<Integer> levels, int index) {
            final int fromBatteryLevelIndex =
                    index == BatteryChartViewModel.SELECTED_INDEX_ALL ? 0 : index;
            final int toBatteryLevelIndex =
                    index == BatteryChartViewModel.SELECTED_INDEX_ALL
                            ? levels.size() - 1
                            : index + 1;
            return mPrefContext.getString(
                    R.string.battery_level_percentage,
                    generateBatteryLevelText(levels.get(fromBatteryLevelIndex)),
                    generateBatteryLevelText(levels.get(toBatteryLevelIndex)));
        }

        @VisibleForTesting
        private static String generateBatteryLevelText(Integer level) {
            return Utils.formatPercentage(level);
        }
    }

    private final class DailyChartLabelTextGenerator extends BaseLabelTextGenerator
            implements BatteryChartViewModel.LabelTextGenerator {
        @Override
        public String generateText(List<Long> timestamps, int index) {
@@ -588,7 +633,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
        }
    }

    private final class HourlyChartLabelTextGenerator
    private final class HourlyChartLabelTextGenerator extends BaseLabelTextGenerator
            implements BatteryChartViewModel.LabelTextGenerator {
        private static final int FULL_CHARGE_BATTERY_LEVEL = 100;

+8 −2
Original line number Diff line number Diff line
@@ -784,10 +784,16 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick
            }
            final AccessibilityNodeInfo childInfo =
                    new AccessibilityNodeInfo(BatteryChartView.this, index);
            final String slotTimeInfo = mViewModel.getFullText(index);
            final String batteryLevelInfo = mViewModel.getSlotBatteryLevelText(index);
            onInitializeAccessibilityNodeInfo(childInfo);
            childInfo.setClickable(isValidToDraw(mViewModel, index));
            childInfo.setText(mViewModel.getFullText(index));
            childInfo.setContentDescription(mViewModel.getFullText(index));
            childInfo.setText(slotTimeInfo);
            childInfo.setContentDescription(
                    mContext.getString(
                            R.string.battery_usage_time_info_and_battery_level,
                            slotTimeInfo,
                            batteryLevelInfo));

            final Rect bounds = new Rect();
            getBoundsOnScreen(bounds, true);
+17 −2
Original line number Diff line number Diff line
@@ -40,11 +40,14 @@ class BatteryChartViewModel {
    }

    interface LabelTextGenerator {
        /** Generate the label text. The text may be abbreviated to save space. */
        /** Generates the label text. The text may be abbreviated to save space. */
        String generateText(List<Long> timestamps, int index);

        /** Generate the full text for accessibility. */
        /** Generates the full text for accessibility. */
        String generateFullText(List<Long> timestamps, int index);

        /** Generates the battery level text of a slot for accessibility.*/
        String generateSlotBatteryLevelText(List<Integer> levels, int index);
    }

    private final List<Integer> mLevels;
@@ -53,6 +56,7 @@ class BatteryChartViewModel {
    private final LabelTextGenerator mLabelTextGenerator;
    private final String[] mTexts;
    private final String[] mFullTexts;
    private final String[] mBatteryLevelTexts;

    private int mSelectedIndex = SELECTED_INDEX_ALL;
    private int mHighlightSlotIndex = SELECTED_INDEX_INVALID;
@@ -75,6 +79,8 @@ class BatteryChartViewModel {
        mLabelTextGenerator = labelTextGenerator;
        mTexts = new String[size()];
        mFullTexts = new String[size()];
        // Last one for SELECTED_INDEX_ALL
        mBatteryLevelTexts = new String[size() + 1];
    }

    public int size() {
@@ -99,6 +105,15 @@ class BatteryChartViewModel {
        return mFullTexts[index];
    }

    public String getSlotBatteryLevelText(int index) {
        final int textIndex = index != SELECTED_INDEX_ALL ? index : size();
        if (mBatteryLevelTexts[textIndex] == null) {
            mBatteryLevelTexts[textIndex] =
                    mLabelTextGenerator.generateSlotBatteryLevelText(mLevels, index);
        }
        return mBatteryLevelTexts[textIndex];
    }

    public AxisLabelPosition axisLabelPosition() {
        return mAxisLabelPosition;
    }
+16 −0
Original line number Diff line number Diff line
@@ -384,6 +384,8 @@ public final class BatteryChartPreferenceControllerTest {
        mBatteryChartPreferenceController.mHourlyChartIndex = SELECTED_INDEX_ALL;

        assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(null);
        assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
                .isEqualTo("Battery level percentage from 100% to 66%");
    }

    @Test
@@ -393,6 +395,8 @@ public final class BatteryChartPreferenceControllerTest {
        mBatteryChartPreferenceController.mHourlyChartIndex = SELECTED_INDEX_ALL;

        assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(null);
        assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
                .isEqualTo("Battery level percentage from 100% to 66%");
    }

    @Test
@@ -402,6 +406,8 @@ public final class BatteryChartPreferenceControllerTest {
        mBatteryChartPreferenceController.mHourlyChartIndex = SELECTED_INDEX_ALL;

        assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo("Sunday");
        assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
                .isEqualTo("Battery level percentage from 83% to 59%");
    }

    @Test
@@ -412,6 +418,8 @@ public final class BatteryChartPreferenceControllerTest {

        assertThat(mBatteryChartPreferenceController.getSlotInformation())
                .isEqualTo("10 AM - 12 PM");
        assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
                .isEqualTo("Battery level percentage from 97% to 95%");
    }

    @Test
@@ -422,6 +430,8 @@ public final class BatteryChartPreferenceControllerTest {

        assertThat(mBatteryChartPreferenceController.getSlotInformation())
                .isEqualTo("Sunday 4 PM - 6 PM");
        assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
                .isEqualTo("Battery level percentage from 67% to 65%");
    }

    @Test
@@ -432,6 +442,8 @@ public final class BatteryChartPreferenceControllerTest {

        assertThat(mBatteryChartPreferenceController.getSlotInformation())
                .isEqualTo("7:01 AM - 8 AM");
        assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
                .isEqualTo("Battery level percentage from 100% to 99%");
    }

    @Test
@@ -441,6 +453,8 @@ public final class BatteryChartPreferenceControllerTest {
        mBatteryChartPreferenceController.mHourlyChartIndex = 3;

        assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo("12 PM - now");
        assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
                .isEqualTo("Battery level percentage from 95% to 66%");
    }

    @Test
@@ -451,6 +465,8 @@ public final class BatteryChartPreferenceControllerTest {

        assertThat(mBatteryChartPreferenceController.getSlotInformation())
                .isEqualTo("7:01 AM - now");
        assertThat(mBatteryChartPreferenceController.getBatteryLevelPercentageInfo())
                .isEqualTo("Battery level percentage from 100% to 66%");
    }

    @Test