Merge "Update accessibility content description for battery usage chart view." into main
This commit is contained in:
@@ -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
|
||||
? 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 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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user