summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yinglei Wang <yingleiw@google.com> 2024-12-10 01:17:00 +0000
committer Yinglei Wang <yingleiw@google.com> 2025-01-16 18:37:59 +0000
commite5fd8ebc79ea5bd7a5d2a92a0211ac2b5bbbd9a1 (patch)
tree03e552389d999607e8ef5987508cb44a63c648f9
parent3fa794b61228a0804c8f23f414c982551a03be05 (diff)
PreviewPageFrame checked state updates
Send the new checked event. Updated to the new checked api. This widget is using getSelected() as the checked state. We can't send the event in setSelected() because setSelected in called in onBindViewHolder and the widget is not attached yet. So we send the new event when the widget is clicked. Test: tested on the print preview and checked the new event is sent when clicked. Flag: android.view.accessibility.tri_state_checked Bug: 380327448 Change-Id: I1591425bf7d35ef361cae94ee394cb26b20014ff
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/widget/PreviewPageFrame.java23
1 files changed, 22 insertions, 1 deletions
diff --git a/packages/PrintSpooler/src/com/android/printspooler/widget/PreviewPageFrame.java b/packages/PrintSpooler/src/com/android/printspooler/widget/PreviewPageFrame.java
index 95bdb093aafe..e735610a81ac 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/widget/PreviewPageFrame.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/widget/PreviewPageFrame.java
@@ -16,6 +16,8 @@
package com.android.printspooler.widget;
+import static android.view.accessibility.Flags.triStateChecked;
+
import android.content.Context;
import android.util.AttributeSet;
import android.view.accessibility.AccessibilityEvent;
@@ -38,6 +40,20 @@ public final class PreviewPageFrame extends LinearLayout {
}
@Override
+ public boolean performClick() {
+ final boolean result = super.performClick();
+ // This widget is incorrectly using the notion of "selection"
+ // to represent checked state. We can't send this event in
+ // setSelected() because setSelected() is called when this widget
+ // is not attached.
+ if (triStateChecked()) {
+ notifyViewAccessibilityStateChangedIfNeeded(
+ AccessibilityEvent.CONTENT_CHANGE_TYPE_CHECKED);
+ }
+ return result;
+ }
+
+ @Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
event.setChecked(isSelected());
@@ -48,6 +64,11 @@ public final class PreviewPageFrame extends LinearLayout {
super.onInitializeAccessibilityNodeInfo(info);
info.setSelected(false);
info.setCheckable(true);
- info.setChecked(isSelected());
+ if (triStateChecked()) {
+ info.setChecked(isSelected() ? AccessibilityNodeInfo.CHECKED_STATE_TRUE :
+ AccessibilityNodeInfo.CHECKED_STATE_FALSE);
+ } else {
+ info.setChecked(isSelected());
+ }
}
}