From 44131dbc24f74457eee28e958677205360ca7dd5 Mon Sep 17 00:00:00 2001 From: josephpv Date: Mon, 3 Jun 2024 10:22:54 +0000 Subject: [PATCH] Add accessibility delegate and populate itemCount Change made to fix accessibility issue for talkback to announce correct number in the list numbers as suggeste in b/333672369#comment4 Bug: 333672369 Test: Manual Change-Id: I7f4ed0b39a40040c1185809e0b348d12e1eabf29 --- .../HidePrivateSpaceSettings.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/com/android/settings/privatespace/HidePrivateSpaceSettings.java b/src/com/android/settings/privatespace/HidePrivateSpaceSettings.java index 64f27144280..0c24db5e6ed 100644 --- a/src/com/android/settings/privatespace/HidePrivateSpaceSettings.java +++ b/src/com/android/settings/privatespace/HidePrivateSpaceSettings.java @@ -18,6 +18,15 @@ package com.android.settings.privatespace; import android.app.settings.SettingsEnums; import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityNodeInfo; + +import androidx.annotation.NonNull; +import androidx.preference.Preference; +import androidx.preference.PreferenceGroup; +import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; @@ -25,6 +34,7 @@ import com.android.settingslib.widget.IllustrationPreference; public class HidePrivateSpaceSettings extends DashboardFragment { private static final String TAG = "HidePrivateSpaceSettings"; + private static final int IMPORTANT_FOR_ACCESSIBILITY_ITEM_COUNT = 5; private static final String PRIVATE_SPACE_HIDE_ILLUSTRATION_KEY = "private_space_hide_illustration"; @@ -36,6 +46,34 @@ public class HidePrivateSpaceSettings extends DashboardFragment { } } + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View root = super.onCreateView(inflater, container, savedInstanceState); + PreferenceScreen preferenceScreen = getPreferenceScreen(); + final int itemCount = countPreferencesRecursive(preferenceScreen); + root.setAccessibilityDelegate( + new View.AccessibilityDelegate() { + @Override + public void onInitializeAccessibilityNodeInfo( + @NonNull View host, @NonNull AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfo(host, info); + //TODO(b/346712220) - Replace the hardcoded accessibility count with + //value computed from xml Preference + info.setCollectionInfo( + new AccessibilityNodeInfo.CollectionInfo.Builder() + .setRowCount(itemCount) + .setColumnCount(1) + .setItemCount(itemCount) + .setImportantForAccessibilityItemCount( + IMPORTANT_FOR_ACCESSIBILITY_ITEM_COUNT) + .build() + ); + } + }); + return root; + } + @Override public void onStart() { super.onStart(); @@ -66,4 +104,15 @@ public class HidePrivateSpaceSettings extends DashboardFragment { protected String getLogTag() { return TAG; } + + private int countPreferencesRecursive(PreferenceGroup preferenceGroup) { + int count = preferenceGroup.getPreferenceCount(); + for (int i = 0; i < preferenceGroup.getPreferenceCount(); i++) { + Preference preference = preferenceGroup.getPreference(i); + if (preference instanceof PreferenceGroup) { + count += countPreferencesRecursive((PreferenceGroup) preference); + } + } + return count; + } }