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
This commit is contained in:
josephpv
2024-06-03 10:22:54 +00:00
parent bcb877406f
commit 44131dbc24

View File

@@ -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;
}
}