From a52da7b5991a6b47595cb91c0977544ca553e336 Mon Sep 17 00:00:00 2001 From: Zaiyue Xue Date: Tue, 17 Jan 2023 17:05:17 +0800 Subject: [PATCH] Support accessibility for battery usage in U (1) Fix b/265746746: TalkBack doesn't have any feedback after the actual double-tap of day bar and bi-hourly bar. When users double clicked a time slot in battery usage chart with TalkBack on, jump the accessibility focus to the app list category title to let users know what happened after click. screen record: https://drive.google.com/file/d/1ZuKQDBiTA2F8hHZDFvNx5nJEP-rMA0eZ/view?usp=sharing&resourcekey=0-2Q552VNxN4QwI2b5sdnvqg Bug: 265746746 Fix: 265746746 Test: manual Change-Id: I5485e714149014a96318fd88e8f8c854dde6cb67 --- res/xml/power_usage_advanced.xml | 4 +- ...essibilityFocusablePreferenceCategory.java | 68 +++++++++++++++++++ .../BatteryUsageBreakdownController.java | 5 +- 3 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 src/com/android/settings/fuelgauge/batteryusage/AccessibilityFocusablePreferenceCategory.java diff --git a/res/xml/power_usage_advanced.xml b/res/xml/power_usage_advanced.xml index 2a1a23c78fe..0d8925250c6 100644 --- a/res/xml/power_usage_advanced.xml +++ b/res/xml/power_usage_advanced.xml @@ -38,7 +38,7 @@ - - + diff --git a/src/com/android/settings/fuelgauge/batteryusage/AccessibilityFocusablePreferenceCategory.java b/src/com/android/settings/fuelgauge/batteryusage/AccessibilityFocusablePreferenceCategory.java new file mode 100644 index 00000000000..f215aae7dc2 --- /dev/null +++ b/src/com/android/settings/fuelgauge/batteryusage/AccessibilityFocusablePreferenceCategory.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.fuelgauge.batteryusage; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.accessibility.AccessibilityManager; + +import androidx.preference.PreferenceCategory; +import androidx.preference.PreferenceViewHolder; + +/** + * Preference category that supports requesting accessibility focus. + */ +public class AccessibilityFocusablePreferenceCategory extends PreferenceCategory { + private PreferenceViewHolder mView; + + public AccessibilityFocusablePreferenceCategory(Context context, AttributeSet attrs, + int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + public AccessibilityFocusablePreferenceCategory(Context context, AttributeSet attrs, + int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public AccessibilityFocusablePreferenceCategory(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public AccessibilityFocusablePreferenceCategory(Context context) { + super(context); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder view) { + super.onBindViewHolder(view); + mView = view; + } + + /** + * Call this to try to give accessibility focus to the category title. + */ + public void requestAccessibilityFocus() { + if (mView == null || mView.itemView == null) { + return; + } + if (!AccessibilityManager.getInstance(getContext()).isEnabled()) { + return; + } + mView.itemView.requestAccessibilityFocus(); + } +} diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java index 587fd6448f5..67402382464 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java @@ -27,7 +27,6 @@ import android.view.View; import android.widget.AdapterView; import androidx.preference.Preference; -import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceGroup; import androidx.preference.PreferenceScreen; @@ -75,7 +74,7 @@ public class BatteryUsageBreakdownController extends BasePreferenceController @VisibleForTesting Context mPrefContext; @VisibleForTesting - PreferenceCategory mRootPreference; + AccessibilityFocusablePreferenceCategory mRootPreference; @VisibleForTesting SpinnerPreference mSpinnerPreference; @VisibleForTesting @@ -193,7 +192,6 @@ public class BatteryUsageBreakdownController extends BasePreferenceController showFooterPreference(isAllUsageDataEmpty, slotTimestamp); } - // TODO: request accessibility focus on category title when slot selection updated. private void showCategoryTitle(String slotTimestamp) { mRootPreference.setTitle(slotTimestamp == null ? mPrefContext.getString( @@ -201,6 +199,7 @@ public class BatteryUsageBreakdownController extends BasePreferenceController : mPrefContext.getString( R.string.battery_usage_breakdown_title_for_slot, slotTimestamp)); mRootPreference.setVisible(true); + mRootPreference.requestAccessibilityFocus(); } private void showFooterPreference(boolean isAllBatteryUsageEmpty, String slotTimestamp) {