summaryrefslogtreecommitdiff
path: root/packages/PrintSpooler/src
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 /packages/PrintSpooler/src
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
Diffstat (limited to 'packages/PrintSpooler/src')
-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());
+ }
}
}