Chromium Code Reviews| Index: content/public/android/java/src/org/chromium/content/browser/SelectionPopupController.java |
| diff --git a/content/public/android/java/src/org/chromium/content/browser/SelectionPopupController.java b/content/public/android/java/src/org/chromium/content/browser/SelectionPopupController.java |
| index 9471abf0c9d7d40125ddd096fca0449df7121518..6185019a20a809bc3ebd74f2cecdf663ff1c57e7 100644 |
| --- a/content/public/android/java/src/org/chromium/content/browser/SelectionPopupController.java |
| +++ b/content/public/android/java/src/org/chromium/content/browser/SelectionPopupController.java |
| @@ -223,23 +223,43 @@ public class SelectionPopupController extends ActionModeCallbackHelper { |
| return actionMode; |
| } |
| - void showPastePopup(int x, int y) { |
| + void createAndShowPastePopup(int x, int y) { |
| if (mView.getParent() == null || mView.getVisibility() != View.VISIBLE) { |
| return; |
| } |
| if (!supportsFloatingActionMode() && !canPaste()) return; |
| + PastePopupMenuDelegate delegate = new PastePopupMenuDelegate() { |
|
boliu
2017/03/17 22:54:20
does it matter if mPastePopupMenu already exists h
amaralp
2017/03/21 00:26:24
Addressed in crrev.com/2757313003.
|
| + @Override |
| + public void paste() { |
| + mWebContents.paste(); |
| + mWebContents.dismissTextHandles(); |
| + } |
| - PastePopupMenu pastePopupMenu = getPastePopup(); |
| - if (pastePopupMenu == null) return; |
| + @Override |
| + public boolean canPaste() { |
| + return SelectionPopupController.this.canPaste(); |
| + } |
| + }; |
| + Context windowContext = mWindowAndroid.getContext().get(); |
| + if (windowContext == null) return; |
| + if (supportsFloatingActionMode()) { |
| + mPastePopupMenu = new FloatingPastePopupMenu(windowContext, mView, delegate); |
| + } else { |
| + mPastePopupMenu = new LegacyPastePopupMenu(windowContext, mView, delegate); |
| + } |
| + showPastePopup(x, y); |
| + } |
| + private void showPastePopup(int x, int y) { |
| + if (mPastePopupMenu == null) return; |
| // Coordinates are in DIP. |
| final float deviceScale = mRenderCoordinates.getDeviceScaleFactor(); |
| final int xPix = (int) (x * deviceScale); |
| final int yPix = (int) (y * deviceScale); |
| final float browserControlsShownPix = mRenderCoordinates.getContentOffsetYPix(); |
| try { |
| - pastePopupMenu.show(xPix, (int) (yPix + browserControlsShownPix)); |
| + mPastePopupMenu.show(xPix, (int) (yPix + browserControlsShownPix)); |
| } catch (WindowManager.BadTokenException e) { |
| } |
| } |
| @@ -253,31 +273,6 @@ public class SelectionPopupController extends ActionModeCallbackHelper { |
| if (mPastePopupMenu != null) mPastePopupMenu.hide(); |
| } |
| - private PastePopupMenu getPastePopup() { |
| - if (mPastePopupMenu == null) { |
| - PastePopupMenuDelegate delegate = new PastePopupMenuDelegate() { |
| - @Override |
| - public void paste() { |
| - mWebContents.paste(); |
| - mWebContents.dismissTextHandles(); |
| - } |
| - |
| - @Override |
| - public boolean canPaste() { |
| - return SelectionPopupController.this.canPaste(); |
| - } |
| - }; |
| - Context windowContext = mWindowAndroid.getContext().get(); |
| - if (windowContext == null) return null; |
| - if (supportsFloatingActionMode()) { |
| - mPastePopupMenu = new FloatingPastePopupMenu(windowContext, mView, delegate); |
| - } else { |
| - mPastePopupMenu = new LegacyPastePopupMenu(windowContext, mView, delegate); |
| - } |
| - } |
| - return mPastePopupMenu; |
| - } |
| - |
| void destroyPastePopup() { |
| hidePastePopup(); |
| mPastePopupMenu = null; |
| @@ -798,7 +793,7 @@ public class SelectionPopupController extends ActionModeCallbackHelper { |
| case SelectionEventType.INSERTION_HANDLE_MOVED: |
| mSelectionRect.set(left, top, right, bottom); |
| if (!isScrollInProgress && isPastePopupShowing()) { |
| - mWebContents.showContextMenuAtPoint(xAnchor, yAnchor); |
| + showPastePopup(xAnchor, yAnchor); |
| } else { |
| hidePastePopup(); |
| } |