Merge "Fix b/265746746: Announce "Battery usage for [slot_timestamp]" instead of changing focus when Talk Back on."
diff --git a/res/xml/power_usage_advanced.xml b/res/xml/power_usage_advanced.xml
index 0d89252..2a1a23c 100644
--- a/res/xml/power_usage_advanced.xml
+++ b/res/xml/power_usage_advanced.xml
@@ -38,7 +38,7 @@
 
     </PreferenceCategory>
 
-    <com.android.settings.fuelgauge.batteryusage.AccessibilityFocusablePreferenceCategory
+    <PreferenceCategory
         android:key="battery_usage_breakdown"
         settings:controller=
             "com.android.settings.fuelgauge.batteryusage.BatteryUsageBreakdownController"
@@ -58,5 +58,5 @@
             settings:isPreferenceVisible="false"
             settings:searchable="false" />
 
-    </com.android.settings.fuelgauge.batteryusage.AccessibilityFocusablePreferenceCategory>
+    </PreferenceCategory>
 </PreferenceScreen>
diff --git a/src/com/android/settings/fuelgauge/batteryusage/AccessibilityFocusablePreferenceCategory.java b/src/com/android/settings/fuelgauge/batteryusage/AccessibilityFocusablePreferenceCategory.java
deleted file mode 100644
index f215aae..0000000
--- a/src/com/android/settings/fuelgauge/batteryusage/AccessibilityFocusablePreferenceCategory.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
index 004c8bf..d9ac14e 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
@@ -296,6 +296,8 @@
             mDailyChartIndex = trapezoidIndex;
             mHourlyChartIndex = BatteryChartViewModel.SELECTED_INDEX_ALL;
             refreshUi();
+            mHandler.post(() -> mDailyChartView.announceForAccessibility(
+                    getAccessibilityAnnounceMessage()));
             mMetricsFeatureProvider.action(
                     mPrefContext,
                     trapezoidIndex == BatteryChartViewModel.SELECTED_INDEX_ALL
@@ -311,6 +313,8 @@
             Log.d(TAG, "onHourlyChartSelect:" + trapezoidIndex);
             mHourlyChartIndex = trapezoidIndex;
             refreshUi();
+            mHandler.post(() -> mHourlyChartView.announceForAccessibility(
+                    getAccessibilityAnnounceMessage()));
             mMetricsFeatureProvider.action(
                     mPrefContext,
                     trapezoidIndex == BatteryChartViewModel.SELECTED_INDEX_ALL
@@ -439,6 +443,15 @@
         return String.format("%s %s", selectedDayText, selectedHourText);
     }
 
+    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);
+    }
+
     private void animateBatteryChartViewGroup() {
         if (mBatteryChartViewGroup != null && mBatteryChartViewGroup.getAlpha() == 0) {
             mBatteryChartViewGroup.animate().alpha(1f).setDuration(FADE_IN_ANIMATION_DURATION)
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java
index 34a37e3..d44f266 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java
@@ -27,6 +27,7 @@
 import android.widget.AdapterView;
 
 import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
 import androidx.preference.PreferenceGroup;
 import androidx.preference.PreferenceScreen;
 
@@ -74,7 +75,7 @@
     @VisibleForTesting
     Context mPrefContext;
     @VisibleForTesting
-    AccessibilityFocusablePreferenceCategory mRootPreference;
+    PreferenceCategory mRootPreference;
     @VisibleForTesting
     SpinnerPreference mSpinnerPreference;
     @VisibleForTesting
@@ -203,9 +204,6 @@
                 : mPrefContext.getString(
                         R.string.battery_usage_breakdown_title_for_slot, slotTimestamp));
         mRootPreference.setVisible(true);
-        mHandler.post(() -> {
-            mRootPreference.requestAccessibilityFocus();
-        });
     }
 
     private void showFooterPreference(boolean isAllBatteryUsageEmpty, String slotTimestamp) {