diff options
Diffstat (limited to 'core/java/android/view/View.java')
| -rw-r--r-- | core/java/android/view/View.java | 60 |
1 files changed, 39 insertions, 21 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index b0ea3f167608..3d6a6fee081b 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -16,6 +16,8 @@ package android.view; +import static android.view.accessibility.AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED; + import static java.lang.Math.max; import android.animation.AnimatorInflater; @@ -8548,6 +8550,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.setLongClickable(isLongClickable()); info.setContextClickable(isContextClickable()); info.setLiveRegion(getAccessibilityLiveRegion()); + if ((mTooltipInfo != null) && (mTooltipInfo.mTooltipText != null)) { + info.setTooltipText(mTooltipInfo.mTooltipText); + info.addAction((mTooltipInfo.mTooltipPopup == null) + ? AccessibilityNodeInfo.AccessibilityAction.ACTION_SHOW_TOOLTIP + : AccessibilityNodeInfo.AccessibilityAction.ACTION_HIDE_TOOLTIP); + } // TODO: These make sense only if we are in an AdapterView but all // views can be selected. Maybe from accessibility perspective @@ -8951,8 +8959,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return; } mAccessibilityTraversalBeforeId = beforeId; - notifyAccessibilityStateChanged( - AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + notifyAccessibilityStateChanged(CONTENT_CHANGE_TYPE_UNDEFINED); } /** @@ -8995,8 +9002,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return; } mAccessibilityTraversalAfterId = afterId; - notifyAccessibilityStateChanged( - AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + notifyAccessibilityStateChanged(CONTENT_CHANGE_TYPE_UNDEFINED); } /** @@ -9038,8 +9044,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, && mID == View.NO_ID) { mID = generateViewId(); } - notifyAccessibilityStateChanged( - AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + notifyAccessibilityStateChanged(CONTENT_CHANGE_TYPE_UNDEFINED); } /** @@ -10539,7 +10544,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (pflags3 != mPrivateFlags3) { mPrivateFlags3 = pflags3; - notifyAccessibilityStateChanged(AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + notifyAccessibilityStateChanged(CONTENT_CHANGE_TYPE_UNDEFINED); } } @@ -11369,8 +11374,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mPrivateFlags2 &= ~PFLAG2_ACCESSIBILITY_LIVE_REGION_MASK; mPrivateFlags2 |= (mode << PFLAG2_ACCESSIBILITY_LIVE_REGION_SHIFT) & PFLAG2_ACCESSIBILITY_LIVE_REGION_MASK; - notifyAccessibilityStateChanged( - AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + notifyAccessibilityStateChanged(CONTENT_CHANGE_TYPE_UNDEFINED); } } @@ -11429,8 +11433,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (!maySkipNotify || oldIncludeForAccessibility != includeForAccessibility()) { notifyAccessibilitySubtreeChanged(); } else { - notifyAccessibilityStateChanged( - AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + notifyAccessibilityStateChanged(CONTENT_CHANGE_TYPE_UNDEFINED); } } } @@ -11840,8 +11843,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, || getAccessibilitySelectionEnd() != end) && (start == end)) { setAccessibilitySelection(start, end); - notifyAccessibilityStateChanged( - AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + notifyAccessibilityStateChanged(CONTENT_CHANGE_TYPE_UNDEFINED); return true; } } break; @@ -11858,6 +11860,21 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return true; } } break; + case R.id.accessibilityActionShowTooltip: { + if ((mTooltipInfo != null) && (mTooltipInfo.mTooltipPopup != null)) { + // Tooltip already showing + return false; + } + return showLongClickTooltip(0, 0); + } + case R.id.accessibilityActionHideTooltip: { + if ((mTooltipInfo == null) || (mTooltipInfo.mTooltipPopup == null)) { + // No tooltip showing + return false; + } + hideTooltip(); + return true; + } } return false; } @@ -13891,12 +13908,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (oldIncludeForAccessibility != includeForAccessibility()) { notifyAccessibilitySubtreeChanged(); } else { - notifyAccessibilityStateChanged( - AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + notifyAccessibilityStateChanged(CONTENT_CHANGE_TYPE_UNDEFINED); } } else if ((changed & ENABLED_MASK) != 0) { - notifyAccessibilityStateChanged( - AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + notifyAccessibilityStateChanged(CONTENT_CHANGE_TYPE_UNDEFINED); } } } @@ -21856,8 +21871,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (selected) { sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); } else { - notifyAccessibilityStateChanged( - AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + notifyAccessibilityStateChanged(CONTENT_CHANGE_TYPE_UNDEFINED); } } } @@ -27059,6 +27073,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final boolean fromTouch = (mPrivateFlags3 & PFLAG3_FINGER_DOWN) == PFLAG3_FINGER_DOWN; mTooltipInfo.mTooltipPopup.show(this, x, y, fromTouch, mTooltipInfo.mTooltipText); mAttachInfo.mTooltipHost = this; + // The available accessibility actions have changed + notifyAccessibilityStateChanged(CONTENT_CHANGE_TYPE_UNDEFINED); return true; } @@ -27077,6 +27093,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (mAttachInfo != null) { mAttachInfo.mTooltipHost = null; } + // The available accessibility actions have changed + notifyAccessibilityStateChanged(CONTENT_CHANGE_TYPE_UNDEFINED); } private boolean showLongClickTooltip(int x, int y) { @@ -27085,8 +27103,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return showTooltip(x, y, true); } - private void showHoverTooltip() { - showTooltip(mTooltipInfo.mAnchorX, mTooltipInfo.mAnchorY, false); + private boolean showHoverTooltip() { + return showTooltip(mTooltipInfo.mAnchorX, mTooltipInfo.mAnchorY, false); } boolean dispatchTooltipHoverEvent(MotionEvent event) { |
