From 2f27fae102a7d20cbaa9b64c6fda983f1b03cc1a Mon Sep 17 00:00:00 2001 From: Yinglei Wang Date: Thu, 5 Dec 2024 23:10:43 +0000 Subject: [PATCH] CheckableRelativeLayout accessibility checked state updates Send the new checked event. Updated to the new checked api. Test: tested that the CheckableRelativeLayout sends out the new event. Flag: android.view.accessibility.tri_state_checked Bug: 380327448 Change-Id: I7020cc70e100f6bc732bf7ab4e55be76cea8e621 --- .../widget/CheckableRelativeLayout.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/widget/CheckableRelativeLayout.java b/src/com/android/settings/widget/CheckableRelativeLayout.java index d26c042dc29..f3c99291c32 100644 --- a/src/com/android/settings/widget/CheckableRelativeLayout.java +++ b/src/com/android/settings/widget/CheckableRelativeLayout.java @@ -16,6 +16,8 @@ package com.android.settings.widget; +import static android.view.accessibility.Flags.triStateChecked; + import android.content.Context; import android.util.AttributeSet; import android.view.View; @@ -90,10 +92,16 @@ public class CheckableRelativeLayout extends RelativeLayout implements Checkable if (mCheckable != null) { mCheckable.setChecked(checked); } + if (triStateChecked()) { + notifyViewAccessibilityStateChangedIfNeeded( + AccessibilityEvent.CONTENT_CHANGE_TYPE_CHECKED); + } } setStateDescriptionIfNeeded(); - notifyViewAccessibilityStateChangedIfNeeded( - AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + if (!triStateChecked()) { + notifyViewAccessibilityStateChangedIfNeeded( + AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + } } private void setStateDescriptionIfNeeded() { @@ -122,6 +130,11 @@ public class CheckableRelativeLayout extends RelativeLayout implements Checkable @Override public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(info); - info.setChecked(mChecked); + if (triStateChecked()) { + info.setChecked(mChecked ? AccessibilityNodeInfo.CHECKED_STATE_TRUE : + AccessibilityNodeInfo.CHECKED_STATE_FALSE); + } else { + info.setChecked(mChecked); + } } }