From 1d134d6665c49bd661ea0a1460a548ebd1badaa1 Mon Sep 17 00:00:00 2001 From: mxyyiyi Date: Thu, 23 May 2024 10:39:49 +0800 Subject: [PATCH] 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 --- .../fuelgauge/batteryusage/BatteryChartView.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java index 37d2fceece2..4acaeeaf5bb 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java @@ -767,6 +767,10 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick } private class BatteryChartAccessibilityNodeProvider extends AccessibilityNodeProvider { + private static final int UNDEFINED = Integer.MIN_VALUE; + + private int mAccessibilityFocusNodeViewId = UNDEFINED; + @Override public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualViewId) { 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, slotTimeInfo, batteryLevelInfo)); + childInfo.setAccessibilityFocused(virtualViewId == mAccessibilityFocusNodeViewId); final Rect bounds = new Rect(); getBoundsOnScreen(bounds, true); @@ -815,10 +820,14 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick return true; case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS: + mAccessibilityFocusNodeViewId = virtualViewId; return sendAccessibilityEvent( virtualViewId, AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED); case AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS: + if (mAccessibilityFocusNodeViewId == virtualViewId) { + mAccessibilityFocusNodeViewId = UNDEFINED; + } return sendAccessibilityEvent( virtualViewId, AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED);