Add a11y focus on battery chart a11y node.

- Let Talkback annouce the a11y action `Double-tap to ativate`.

Bug: 317001884
Test: Talkback
Change-Id: Ic383c9639950eb6a69ed7b3e1537a5d95d18ea08
This commit is contained in:
mxyyiyi
2024-05-23 10:39:49 +08:00
parent 9c0654daea
commit 1d134d6665

View File

@@ -767,6 +767,10 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick
} }
private class BatteryChartAccessibilityNodeProvider extends AccessibilityNodeProvider { private class BatteryChartAccessibilityNodeProvider extends AccessibilityNodeProvider {
private static final int UNDEFINED = Integer.MIN_VALUE;
private int mAccessibilityFocusNodeViewId = UNDEFINED;
@Override @Override
public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualViewId) { public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualViewId) {
if (virtualViewId == AccessibilityNodeProvider.HOST_VIEW_ID) { if (virtualViewId == AccessibilityNodeProvider.HOST_VIEW_ID) {
@@ -794,6 +798,7 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick
R.string.battery_usage_time_info_and_battery_level, R.string.battery_usage_time_info_and_battery_level,
slotTimeInfo, slotTimeInfo,
batteryLevelInfo)); batteryLevelInfo));
childInfo.setAccessibilityFocused(virtualViewId == mAccessibilityFocusNodeViewId);
final Rect bounds = new Rect(); final Rect bounds = new Rect();
getBoundsOnScreen(bounds, true); getBoundsOnScreen(bounds, true);
@@ -815,10 +820,14 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick
return true; return true;
case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS: case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS:
mAccessibilityFocusNodeViewId = virtualViewId;
return sendAccessibilityEvent( return sendAccessibilityEvent(
virtualViewId, AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED); virtualViewId, AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
case AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS: case AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS:
if (mAccessibilityFocusNodeViewId == virtualViewId) {
mAccessibilityFocusNodeViewId = UNDEFINED;
}
return sendAccessibilityEvent( return sendAccessibilityEvent(
virtualViewId, virtualViewId,
AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED); AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED);