diff options
author | Phil Weaver <pweaver@google.com> | 2017-05-12 09:07:38 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-05-12 09:07:38 +0000 |
commit | 0372df3e1fb6e4a1fc9a477e4f779aecd5c7be5c (patch) | |
tree | a173d89f4cb1a85308618c6114fb6b5829cc1762 /library/gingerbread/src | |
parent | e4aaa62e8f9b29e69d70668d9ce5da6ff7d35f5c (diff) | |
parent | 15eaab36c4bfd2c7396619473dbc54138c797156 (diff) | |
download | setupwizard-0372df3e1fb6e4a1fc9a477e4f779aecd5c7be5c.tar.gz |
Merge "Remove obsolete workaround for ClickableSpan a11y" into oc-dev am: cf3c368e44
am: 15eaab36c4
Change-Id: I16b09b3a0d14db203932ebe573273ae3c697b048
Diffstat (limited to 'library/gingerbread/src')
-rw-r--r-- | library/gingerbread/src/com/android/setupwizardlib/util/LinkAccessibilityHelper.java | 137 |
1 files changed, 130 insertions, 7 deletions
diff --git a/library/gingerbread/src/com/android/setupwizardlib/util/LinkAccessibilityHelper.java b/library/gingerbread/src/com/android/setupwizardlib/util/LinkAccessibilityHelper.java index e6fa497..3866551 100644 --- a/library/gingerbread/src/com/android/setupwizardlib/util/LinkAccessibilityHelper.java +++ b/library/gingerbread/src/com/android/setupwizardlib/util/LinkAccessibilityHelper.java @@ -16,14 +16,21 @@ package com.android.setupwizardlib.util; +import static android.support.v4.os.BuildCompat.isAtLeastO; + import android.graphics.Rect; import android.os.Bundle; +import android.support.v4.view.AccessibilityDelegateCompat; import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; +import android.support.v4.view.accessibility.AccessibilityNodeProviderCompat; import android.support.v4.widget.ExploreByTouchHelper; import android.text.Layout; import android.text.Spanned; import android.text.style.ClickableSpan; import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import android.widget.TextView; @@ -32,6 +39,10 @@ import java.util.List; /** * An accessibility delegate that allows {@link android.text.style.ClickableSpan} to be focused and * clicked by accessibility services. + * <p> + * <strong>Note: </strong> From Android O on, there is native support for ClickableSpan + * accessibility, so this class is not needed (and indeed has no effect.) + * </p> * * <p />Sample usage: * <pre> @@ -54,19 +65,135 @@ import java.util.List; * @see com.android.setupwizardlib.view.RichTextView * @see android.support.v4.widget.ExploreByTouchHelper */ -public class LinkAccessibilityHelper extends ExploreByTouchHelper { +public class LinkAccessibilityHelper extends AccessibilityDelegateCompat { private static final String TAG = "LinkAccessibilityHelper"; private final TextView mView; private final Rect mTempRect = new Rect(); + private final ExploreByTouchHelper mExploreByTouchHelper; public LinkAccessibilityHelper(TextView view) { - super(view); + if (!isAtLeastO()) { + // Pre-O, we essentially extend ExploreByTouchHelper to expose a virtual view hierarchy + mExploreByTouchHelper = new ExploreByTouchHelper(view) { + @Override + protected int getVirtualViewAt(float x, float y) { + return this.getVirtualViewAt(x, y); + } + + @Override + protected void getVisibleVirtualViews(List<Integer> virtualViewIds) { + this.getVisibleVirtualViews(virtualViewIds); + } + + @Override + protected void onPopulateEventForVirtualView(int virtualViewId, + AccessibilityEvent event) { + this.onPopulateEventForVirtualView(virtualViewId, event); + } + + @Override + protected void onPopulateNodeForVirtualView(int virtualViewId, + AccessibilityNodeInfoCompat infoCompat) { + this.onPopulateNodeForVirtualView(virtualViewId, infoCompat); + + } + + @Override + protected boolean onPerformActionForVirtualView(int virtualViewId, int action, + Bundle arguments) { + return this.onPerformActionForVirtualView(virtualViewId, action, arguments); + } + }; + } else { + mExploreByTouchHelper = null; + } mView = view; } @Override + public void sendAccessibilityEvent(View host, int eventType) { + if (mExploreByTouchHelper != null) { + mExploreByTouchHelper.sendAccessibilityEvent(host, eventType); + } else { + super.sendAccessibilityEvent(host, eventType); + } + } + + @Override + public void sendAccessibilityEventUnchecked(View host, AccessibilityEvent event) { + if (mExploreByTouchHelper != null) { + mExploreByTouchHelper.sendAccessibilityEventUnchecked(host, event); + } else { + super.sendAccessibilityEventUnchecked(host, event); + } + } + + @Override + public boolean dispatchPopulateAccessibilityEvent(View host, AccessibilityEvent event) { + return (mExploreByTouchHelper != null) + ? mExploreByTouchHelper.dispatchPopulateAccessibilityEvent(host, event) + : super.dispatchPopulateAccessibilityEvent(host, event); + } + + @Override + public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) { + if (mExploreByTouchHelper != null) { + mExploreByTouchHelper.onPopulateAccessibilityEvent(host, event); + } else { + super.onPopulateAccessibilityEvent(host, event); + } + } + + @Override + public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) { + if (mExploreByTouchHelper != null) { + mExploreByTouchHelper.onInitializeAccessibilityEvent(host, event); + } else { + super.onInitializeAccessibilityEvent(host, event); + } + } + + @Override + public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) { + if (mExploreByTouchHelper != null) { + mExploreByTouchHelper.onInitializeAccessibilityNodeInfo(host, info); + } else { + super.onInitializeAccessibilityNodeInfo(host, info); + } + } + + @Override + public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child, + AccessibilityEvent event) { + return (mExploreByTouchHelper != null) + ? mExploreByTouchHelper.onRequestSendAccessibilityEvent(host, child, event) + : super.onRequestSendAccessibilityEvent(host, child, event); + } + + @Override + public AccessibilityNodeProviderCompat getAccessibilityNodeProvider(View host) { + return (mExploreByTouchHelper != null) + ? mExploreByTouchHelper.getAccessibilityNodeProvider(host) + : super.getAccessibilityNodeProvider(host); + } + + @Override + public boolean performAccessibilityAction(View host, int action, Bundle args) { + return (mExploreByTouchHelper != null) + ? mExploreByTouchHelper.performAccessibilityAction(host, action, args) + : super.performAccessibilityAction(host, action, args); + } + + /** + * Delegated to {@link ExploreByTouchHelper} + */ + public final boolean dispatchHoverEvent(MotionEvent event) { + return (mExploreByTouchHelper != null) ? mExploreByTouchHelper.dispatchHoverEvent(event) + : false; + } + protected int getVirtualViewAt(float x, float y) { final CharSequence text = mView.getText(); if (text instanceof Spanned) { @@ -78,10 +205,9 @@ public class LinkAccessibilityHelper extends ExploreByTouchHelper { return spannedText.getSpanStart(linkSpan); } } - return INVALID_ID; + return ExploreByTouchHelper.INVALID_ID; } - @Override protected void getVisibleVirtualViews(List<Integer> virtualViewIds) { final CharSequence text = mView.getText(); if (text instanceof Spanned) { @@ -94,7 +220,6 @@ public class LinkAccessibilityHelper extends ExploreByTouchHelper { } } - @Override protected void onPopulateEventForVirtualView(int virtualViewId, AccessibilityEvent event) { final ClickableSpan span = getSpanForOffset(virtualViewId); if (span != null) { @@ -105,7 +230,6 @@ public class LinkAccessibilityHelper extends ExploreByTouchHelper { } } - @Override protected void onPopulateNodeForVirtualView(int virtualViewId, AccessibilityNodeInfoCompat info) { final ClickableSpan span = getSpanForOffset(virtualViewId); @@ -126,7 +250,6 @@ public class LinkAccessibilityHelper extends ExploreByTouchHelper { info.addAction(AccessibilityNodeInfoCompat.ACTION_CLICK); } - @Override protected boolean onPerformActionForVirtualView(int virtualViewId, int action, Bundle arguments) { if (action == AccessibilityNodeInfoCompat.ACTION_CLICK) { |