| 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 679523249b08b25c8a1cf50a9441352dc7952ea9..8d9c66e4913e7dbcb70f356c1bf969a0af14d8e1 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
|
| @@ -194,7 +194,11 @@
|
| public boolean showActionMode() {
|
| if (isEmpty()) return false;
|
|
|
| - destroyActionModeAndKeepSelection();
|
| + // Just refreshes the view if it is already showing.
|
| + if (isActionModeValid()) {
|
| + invalidateActionMode();
|
| + return true;
|
| + }
|
|
|
| if (mView.getParent() != null) {
|
| // On ICS, startActionMode throws an NPE when getParent() is null.
|
| @@ -289,6 +293,28 @@
|
|
|
| // Should be nulled out in case #onDestroyActionMode() is not invoked in response.
|
| mActionMode = null;
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * @see ActionMode#invalidate()
|
| + * Note that invalidation will also reset visibility state. The caller
|
| + * should account for this when making subsequent visibility updates.
|
| + */
|
| + private void invalidateActionMode() {
|
| + if (!isActionModeValid()) return;
|
| + if (mHidden) {
|
| + assert canHideActionMode();
|
| + mHidden = false;
|
| + mView.removeCallbacks(mRepeatingHideRunnable);
|
| + mPendingInvalidateContentRect = false;
|
| + }
|
| +
|
| + // Try/catch necessary for framework bug, crbug.com/446717.
|
| + try {
|
| + mActionMode.invalidate();
|
| + } catch (NullPointerException e) {
|
| + Log.w(TAG, "Ignoring NPE from ActionMode.invalidate() as workaround for L", e);
|
| }
|
| }
|
|
|
|
|