diff options
Diffstat (limited to 'library/gingerbread/src/com/android/setupwizardlib/view/RichTextView.java')
-rw-r--r-- | library/gingerbread/src/com/android/setupwizardlib/view/RichTextView.java | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/library/gingerbread/src/com/android/setupwizardlib/view/RichTextView.java b/library/gingerbread/src/com/android/setupwizardlib/view/RichTextView.java index 6694cb2..1b1f82e 100644 --- a/library/gingerbread/src/com/android/setupwizardlib/view/RichTextView.java +++ b/library/gingerbread/src/com/android/setupwizardlib/view/RichTextView.java @@ -25,7 +25,7 @@ import android.support.v7.widget.AppCompatTextView; import android.text.Annotation; import android.text.SpannableString; import android.text.Spanned; -import android.text.method.LinkMovementMethod; +import android.text.method.MovementMethod; import android.text.style.ClickableSpan; import android.text.style.TextAppearanceSpan; import android.util.AttributeSet; @@ -36,6 +36,7 @@ import com.android.setupwizardlib.span.LinkSpan; import com.android.setupwizardlib.span.LinkSpan.OnLinkClickListener; import com.android.setupwizardlib.span.SpanHelper; import com.android.setupwizardlib.util.LinkAccessibilityHelper; +import com.android.setupwizardlib.view.TouchableMovementMethod.TouchableLinkMovementMethod; /** * An extension of TextView that automatically replaces the annotation tags as specified in @@ -121,7 +122,7 @@ public class RichTextView extends AppCompatTextView implements OnLinkClickListen // nullifying any return values of MovementMethod.onTouchEvent. // To still allow propagating touch events to the parent when this view doesn't have // links, we only set the movement method here if the text contains links. - setMovementMethod(LinkMovementMethod.getInstance()); + setMovementMethod(TouchableLinkMovementMethod.getInstance()); } else { setMovementMethod(null); } @@ -153,6 +154,25 @@ public class RichTextView extends AppCompatTextView implements OnLinkClickListen } @Override + @SuppressWarnings("ClickableViewAccessibility") // super.onTouchEvent is called + public boolean onTouchEvent(MotionEvent event) { + // Since View#onTouchEvent always return true if the view is clickable (which is the case + // when a TextView has a movement method), override the implementation to allow the movement + // method, if it implements TouchableMovementMethod, to say that the touch is not handled, + // allowing the event to bubble up to the parent view. + boolean superResult = super.onTouchEvent(event); + MovementMethod movementMethod = getMovementMethod(); + if (movementMethod instanceof TouchableMovementMethod) { + TouchableMovementMethod touchableMovementMethod = + (TouchableMovementMethod) movementMethod; + if (touchableMovementMethod.getLastTouchEvent() == event) { + return touchableMovementMethod.isLastTouchEventHandled(); + } + } + return superResult; + } + + @Override protected boolean dispatchHoverEvent(MotionEvent event) { if (mAccessibilityHelper != null && mAccessibilityHelper.dispatchHoverEvent(event)) { return true; |