Index: ui/android/java/src/org/chromium/ui/widget/TextViewWithClickableSpans.java |
diff --git a/ui/android/java/src/org/chromium/ui/widget/TextViewWithClickableSpans.java b/ui/android/java/src/org/chromium/ui/widget/TextViewWithClickableSpans.java |
index d8f5fbf41aee33ee0b1d54f7c006f146c7cfe088..cde93fb738973b0cf9fe12d6972079ab261324e6 100644 |
--- a/ui/android/java/src/org/chromium/ui/widget/TextViewWithClickableSpans.java |
+++ b/ui/android/java/src/org/chromium/ui/widget/TextViewWithClickableSpans.java |
@@ -32,6 +32,7 @@ import org.chromium.base.VisibleForTesting; |
*/ |
public class TextViewWithClickableSpans extends TextView { |
private AccessibilityManager mAccessibilityManager; |
+ private PopupMenu mDisambiguationMenu; |
public TextViewWithClickableSpans(Context context) { |
super(context); |
@@ -147,11 +148,13 @@ public class TextViewWithClickableSpans extends TextView { |
private void openDisambiguationMenu() { |
ClickableSpan[] clickableSpans = getClickableSpans(); |
- if (clickableSpans == null || clickableSpans.length == 0) return; |
+ if (clickableSpans == null || clickableSpans.length == 0 || mDisambiguationMenu != null) { |
+ return; |
+ } |
SpannableString spannable = (SpannableString) getText(); |
- PopupMenu popup = new PopupMenu(getContext(), this); |
- Menu menu = popup.getMenu(); |
+ mDisambiguationMenu = new PopupMenu(getContext(), this); |
+ Menu menu = mDisambiguationMenu.getMenu(); |
for (final ClickableSpan clickableSpan : clickableSpans) { |
CharSequence itemText = spannable.subSequence( |
spannable.getSpanStart(clickableSpan), |
@@ -166,6 +169,12 @@ public class TextViewWithClickableSpans extends TextView { |
}); |
} |
- popup.show(); |
+ mDisambiguationMenu.setOnDismissListener(new PopupMenu.OnDismissListener() { |
+ @Override |
+ public void onDismiss(PopupMenu menu) { |
+ mDisambiguationMenu = null; |
+ } |
+ }); |
+ mDisambiguationMenu.show(); |
} |
} |