summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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());
+ }
}
}