Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 44131dbc authored by josephpv's avatar josephpv
Browse files

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
parent bcb87740
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
@@ -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;
    }
}