Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(314)

Unified Diff: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java

Issue 2089933002: Context Menu Refactor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixing nits Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
index b0e1e037e500feffe28500b4e0171819d5bbfdee..9dd2f6421d7584f9ca77ad11533235cbef3dea3d 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
@@ -7,13 +7,9 @@ package org.chromium.content.browser;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
-import android.app.SearchManager;
import android.app.assist.AssistStructure.ViewNode;
-import android.content.ClipboardManager;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Rect;
@@ -22,11 +18,8 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.ResultReceiver;
import android.os.SystemClock;
-import android.provider.Browser;
-import android.text.TextUtils;
import android.util.Pair;
import android.util.TypedValue;
-import android.view.ActionMode;
import android.view.HapticFeedbackConstants;
import android.view.InputDevice;
import android.view.KeyEvent;
@@ -34,7 +27,6 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewStructure;
-import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener;
@@ -54,23 +46,17 @@ import org.chromium.base.TraceEvent;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
-import org.chromium.base.metrics.RecordUserAction;
-import org.chromium.content.R;
import org.chromium.content.browser.ScreenOrientationListener.ScreenOrientationObserver;
import org.chromium.content.browser.accessibility.BrowserAccessibilityManager;
import org.chromium.content.browser.accessibility.captioning.CaptioningBridgeFactory;
import org.chromium.content.browser.accessibility.captioning.SystemCaptioningBridge;
import org.chromium.content.browser.accessibility.captioning.TextTrackSettings;
import org.chromium.content.browser.input.AnimationIntervalProvider;
-import org.chromium.content.browser.input.FloatingPastePopupMenu;
import org.chromium.content.browser.input.GamepadList;
import org.chromium.content.browser.input.ImeAdapter;
import org.chromium.content.browser.input.InputMethodManagerWrapper;
import org.chromium.content.browser.input.JoystickScrollProvider;
import org.chromium.content.browser.input.JoystickZoomProvider;
-import org.chromium.content.browser.input.LegacyPastePopupMenu;
-import org.chromium.content.browser.input.PastePopupMenu;
-import org.chromium.content.browser.input.PastePopupMenu.PastePopupMenuDelegate;
import org.chromium.content.browser.input.SelectPopup;
import org.chromium.content.browser.input.SelectPopupDialog;
import org.chromium.content.browser.input.SelectPopupDropdown;
@@ -86,7 +72,6 @@ import org.chromium.ui.base.ViewAndroidDelegate;
import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.base.ime.TextInputType;
import org.chromium.ui.gfx.DeviceDisplayInfo;
-import org.chromium.ui.touch_selection.SelectionEventType;
import java.lang.annotation.Annotation;
import java.lang.ref.WeakReference;
@@ -490,11 +475,6 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
// Only valid when focused on a text / password field.
private ImeAdapter mImeAdapter;
- // Lazily created paste popup menu, triggered either via long press in an
- // editable region or from tapping the insertion handle.
- private PastePopupMenu mPastePopupMenu;
- private boolean mWasPastePopupShowingOnInsertionDragStart;
-
// Size of the viewport in physical pixels as set from onSizeChanged.
private int mViewportWidthPix;
private int mViewportHeightPix;
@@ -514,20 +494,10 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
private boolean mIsMobileOptimizedHint;
- // Tracks whether a selection is currently active. When applied to selected text, indicates
- // whether the last selected text is still highlighted.
- private boolean mHasSelection;
- private boolean mHasInsertion;
- private boolean mDraggingSelection;
private String mLastSelectedText;
private boolean mFocusedNodeEditable;
- private boolean mFocusedNodeIsPassword;
- private WebActionMode mActionMode;
- private boolean mFloatingActionModeCreationFailed;
- private boolean mUnselectAllOnActionModeDismiss;
private boolean mPreserveSelectionOnNextLossOfFocus;
- private WebActionModeCallback.ActionHandler mActionHandler;
- private final Rect mSelectionRect = new Rect();
+ private boolean mUnselectAllOnActionModeDismiss;
// Delegate that will handle GET downloads, and be notified of completion of POST downloads.
private ContentViewDownloadDelegate mDownloadDelegate;
@@ -827,7 +797,6 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
// TODO(yusufo): Rename this call to be general for tab reparenting.
// Clean up cached popups that may have been created with an old activity.
mSelectPopup = null;
- mPastePopupMenu = null;
}
@VisibleForTesting
@@ -858,7 +827,6 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
TraceEvent.begin("ContentViewCore.setContainerView");
if (mContainerView != null) {
assert mOverscrollRefreshHandler == null;
- mPastePopupMenu = null;
hidePopupsAndClearSelection();
}
@@ -998,7 +966,6 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
ScreenOrientationListener.getInstance().removeObserver(this);
mContainerViewObservers.clear();
hidePopupsAndPreserveSelection();
- mPastePopupMenu = null;
// See warning in javadoc before adding more clean up code here.
}
@@ -1134,14 +1101,7 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
*/
@VisibleForTesting
public String getSelectedText() {
- return mHasSelection ? mLastSelectedText : "";
- }
-
- /**
- * @return Whether the current selection is editable (false if no text selected).
- */
- public boolean isSelectionEditable() {
- return mHasSelection ? mFocusedNodeEditable : false;
+ return mLastSelectedText;
}
/**
@@ -1268,7 +1228,6 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
private void setTouchScrollInProgress(boolean inProgress) {
if (mTouchScrollInProgress == inProgress) return;
mTouchScrollInProgress = inProgress;
- updateActionModeVisibility();
}
@SuppressWarnings("unused")
@@ -1293,7 +1252,6 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
@CalledByNative
private void onScrollBeginEventAck() {
setTouchScrollInProgress(true);
- hidePastePopup();
mZoomControlsDelegate.invokeZoomPicker();
updateGestureStateListener(GestureEventType.SCROLL_START);
}
@@ -1334,7 +1292,6 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
mGestureStateListenersIterator.hasNext();) {
mGestureStateListenersIterator.next().onSingleTap(consumed, x, y);
}
- hidePastePopup();
}
@SuppressWarnings("unused")
@@ -1441,7 +1398,6 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
assert mWebContents != null;
mWebContents.onShow();
setAccessibilityState(mAccessibilityManager.isEnabled());
- restoreSelectionPopupsIfNecessary();
}
/**
@@ -1472,28 +1428,11 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
}
private void hidePopups() {
- hideSelectActionMode();
- hidePastePopup();
hideSelectPopupWithCancelMesage();
mPopupZoomer.hide(false);
if (mUnselectAllOnActionModeDismiss) dismissTextHandles();
}
- private void restoreSelectionPopupsIfNecessary() {
- if (mHasSelection && mActionMode == null) showSelectActionMode(true);
- }
-
- public void hideSelectActionMode() {
- if (mActionMode != null) {
- mActionMode.finish();
- mActionMode = null;
- }
- }
-
- public boolean isSelectActionBarShowing() {
- return mActionMode != null;
- }
-
private void resetGestureDetection() {
if (mNativeContentViewCore == 0) return;
nativeResetGestureDetection(mNativeContentViewCore);
@@ -1522,9 +1461,7 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
*/
public void updateTextSelectionUI(boolean focused) {
setTextHandlesTemporarilyHidden(!focused);
- if (focused) {
- restoreSelectionPopupsIfNecessary();
- } else {
+ if (!focused) {
hidePopupsAndPreserveSelection();
}
}
@@ -1651,7 +1588,6 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
*/
public void onWindowFocusChanged(boolean hasWindowFocus) {
if (!hasWindowFocus) resetGestureDetection();
- if (mActionMode != null) mActionMode.onWindowFocusChanged(hasWindowFocus);
for (mGestureStateListenersIterator.rewind(); mGestureStateListenersIterator.hasNext();) {
mGestureStateListenersIterator.next().onWindowFocusChanged(hasWindowFocus);
}
@@ -1661,9 +1597,7 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
mImeAdapter.onViewFocusChanged(gainFocus);
mJoystickScrollProvider.setEnabled(gainFocus && !mFocusedNodeEditable);
- if (gainFocus) {
- restoreSelectionPopupsIfNecessary();
- } else {
+ if (!gainFocus) {
cancelRequestToScrollFocusedEditableNodeIntoView();
if (mPreserveSelectionOnNextLossOfFocus) {
mPreserveSelectionOnNextLossOfFocus = false;
@@ -1990,264 +1924,6 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
return mDownloadDelegate;
}
- @VisibleForTesting
- public WebActionModeCallback.ActionHandler getSelectActionHandler() {
- return mActionHandler;
- }
-
- private void showSelectActionMode(boolean allowFallbackIfFloatingActionModeCreationFails) {
- if (mActionMode != null) {
- mActionMode.invalidate();
- return;
- }
-
- // Start a new action mode with a WebActionModeCallback.
- if (mActionHandler == null) {
- mActionHandler = new WebActionModeCallback.ActionHandler() {
- /**
- * Android Intent size limitations prevent sending over a megabyte of data. Limit
- * query lengths to 100kB because other things may be added to the Intent.
- */
- private static final int MAX_SHARE_QUERY_LENGTH = 100000;
-
- /** Google search doesn't support requests slightly larger than this. */
- private static final int MAX_SEARCH_QUERY_LENGTH = 1000;
-
- // All WebContents actions record a user action internally.
- @Override
- public void selectAll() {
- mWebContents.selectAll();
- // Even though the above statement logged a SelectAll user action, we want to
- // track whether the focus was in an editable field, so log that too.
- if (isFocusedNodeEditable()) {
- RecordUserAction.record("MobileActionMode.SelectAllWasEditable");
- } else {
- RecordUserAction.record("MobileActionMode.SelectAllWasNonEditable");
- }
- }
-
- @Override
- public void cut() {
- mWebContents.cut();
- }
-
- @Override
- public void copy() {
- mWebContents.copy();
- }
-
- @Override
- public void paste() {
- mWebContents.paste();
- }
-
- @Override
- public void share() {
- RecordUserAction.record("MobileActionMode.Share");
- final String query = sanitizeQuery(getSelectedText(), MAX_SHARE_QUERY_LENGTH);
- if (TextUtils.isEmpty(query)) return;
-
- Intent send = new Intent(Intent.ACTION_SEND);
- send.setType("text/plain");
- send.putExtra(Intent.EXTRA_TEXT, query);
- try {
- Intent i = Intent.createChooser(send, getContext().getString(
- R.string.actionbar_share));
- i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- getContext().startActivity(i);
- } catch (android.content.ActivityNotFoundException ex) {
- // If no app handles it, do nothing.
- }
- }
-
- @Override
- public void processText(Intent intent) {
- RecordUserAction.record("MobileActionMode.ProcessTextIntent");
- assert Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
-
- final String query = sanitizeQuery(getSelectedText(), MAX_SEARCH_QUERY_LENGTH);
- if (TextUtils.isEmpty(query)) return;
-
- intent.putExtra(Intent.EXTRA_PROCESS_TEXT, query);
- try {
- if (getContentViewClient().doesPerformProcessText()) {
- getContentViewClient().startProcessTextIntent(intent);
- } else {
- getWindowAndroid().showIntent(
- intent, new WindowAndroid.IntentCallback() {
- @Override
- public void onIntentCompleted(WindowAndroid window,
- int resultCode, ContentResolver contentResolver,
- Intent data) {
- onReceivedProcessTextResult(resultCode, data);
- }
- }, null);
- }
- } catch (android.content.ActivityNotFoundException ex) {
- // If no app handles it, do nothing.
- }
- }
-
- @Override
- public void search() {
- RecordUserAction.record("MobileActionMode.WebSearch");
- final String query = sanitizeQuery(getSelectedText(), MAX_SEARCH_QUERY_LENGTH);
- if (TextUtils.isEmpty(query)) return;
-
- // See if ContentViewClient wants to override.
- if (getContentViewClient().doesPerformWebSearch()) {
- getContentViewClient().performWebSearch(query);
- return;
- }
-
- Intent i = new Intent(Intent.ACTION_WEB_SEARCH);
- i.putExtra(SearchManager.EXTRA_NEW_SEARCH, true);
- i.putExtra(SearchManager.QUERY, query);
- i.putExtra(Browser.EXTRA_APPLICATION_ID, getContext().getPackageName());
- i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- try {
- getContext().startActivity(i);
- } catch (android.content.ActivityNotFoundException ex) {
- // If no app handles it, do nothing.
- }
- }
-
- @Override
- public boolean isSelectionPassword() {
- return mFocusedNodeIsPassword;
- }
-
- @Override
- public boolean isSelectionEditable() {
- return mFocusedNodeEditable;
- }
-
- @Override
- public boolean isInsertion() {
- return mHasInsertion;
- }
-
- @Override
- public void onDestroyActionMode() {
- mActionMode = null;
- if (mUnselectAllOnActionModeDismiss) {
- dismissTextHandles();
- clearSelection();
- }
- if (!supportsFloatingActionMode()) {
- getContentViewClient().onContextualActionBarHidden();
- }
- }
-
- @Override
- public void onGetContentRect(Rect outRect) {
- // The selection coordinates are relative to the content viewport, but we need
- // coordinates relative to the containing View.
- outRect.set(mSelectionRect);
- outRect.offset(0, (int) mRenderCoordinates.getContentOffsetYPix());
- }
-
- @Override
- public boolean isIncognito() {
- return mWebContents.isIncognito();
- }
-
- @Override
- public boolean isSelectActionModeAllowed(int actionModeItem) {
- boolean isAllowedByClient =
- getContentViewClient().isSelectActionModeAllowed(actionModeItem);
- if (actionModeItem == WebActionModeCallback.MENU_ITEM_SHARE) {
- return isAllowedByClient && isShareAvailable();
- }
-
- if (actionModeItem == WebActionModeCallback.MENU_ITEM_WEB_SEARCH) {
- return isAllowedByClient && isWebSearchAvailable();
- }
-
- return isAllowedByClient;
- }
-
- private boolean isShareAvailable() {
- Intent intent = new Intent(Intent.ACTION_SEND);
- intent.setType("text/plain");
- return getContext().getPackageManager().queryIntentActivities(intent,
- PackageManager.MATCH_DEFAULT_ONLY).size() > 0;
- }
-
- private boolean isWebSearchAvailable() {
- if (getContentViewClient().doesPerformWebSearch()) return true;
- Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
- intent.putExtra(SearchManager.EXTRA_NEW_SEARCH, true);
- return getContext().getPackageManager().queryIntentActivities(intent,
- PackageManager.MATCH_DEFAULT_ONLY).size() > 0;
- }
-
- private String sanitizeQuery(String query, int maxLength) {
- if (TextUtils.isEmpty(query) || query.length() < maxLength) return query;
- Log.w(TAG, "Truncating oversized query (" + query.length() + ").");
- return query.substring(0, maxLength) + "…";
- }
- };
- }
- mActionMode = null;
- // On ICS, startActionMode throws an NPE when getParent() is null.
- if (mContainerView.getParent() != null) {
- assert mWebContents != null;
- ActionMode actionMode = startActionMode(allowFallbackIfFloatingActionModeCreationFails);
- if (actionMode != null) mActionMode = new WebActionMode(actionMode, mContainerView);
- }
- mUnselectAllOnActionModeDismiss = true;
- if (mActionMode == null) {
- // There is no ActionMode, so remove the selection.
- clearSelection();
- } else {
- // TODO(jdduke): Refactor ContentViewClient.onContextualActionBarShown to be aware of
- // non-action-bar (i.e., floating) ActionMode instances, crbug.com/524666.
- if (!supportsFloatingActionMode()) {
- getContentViewClient().onContextualActionBarShown();
- }
- }
- }
-
- private boolean supportsFloatingActionMode() {
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return false;
- return !mFloatingActionModeCreationFailed;
- }
-
- private ActionMode startActionMode(boolean allowFallbackIfFloatingActionModeCreationFails) {
- WebActionModeCallback callback =
- new WebActionModeCallback(mContainerView.getContext(), mActionHandler);
- if (supportsFloatingActionMode()) {
- ActionMode actionMode = startFloatingActionMode(callback);
- if (actionMode != null) return actionMode;
- mFloatingActionModeCreationFailed = true;
- if (!allowFallbackIfFloatingActionModeCreationFails) return null;
- }
- return startDefaultActionMode(callback);
- }
-
- private ActionMode startDefaultActionMode(WebActionModeCallback callback) {
- return mContainerView.startActionMode(callback);
- }
-
- @TargetApi(Build.VERSION_CODES.M)
- private ActionMode startFloatingActionMode(WebActionModeCallback callback) {
- ActionMode.Callback2 callback2 = new FloatingWebActionModeCallback(callback);
- return mContainerView.startActionMode(callback2, ActionMode.TYPE_FLOATING);
- }
-
- private void invalidateActionModeContentRect() {
- if (mActionMode != null) mActionMode.invalidateContentRect();
- }
-
- private void updateActionModeVisibility() {
- if (mActionMode == null) return;
- // The active fling count isn't reliable with WebView, so only use the
- // active touch scroll signal for hiding. The fling animation movement
- // will naturally hide the ActionMode by invalidating its content rect.
- mActionMode.hide(mDraggingSelection || mTouchScrollInProgress);
- }
-
/**
* Clears the current text selection. Note that we will try to move cursor to selection
* end if applicable.
@@ -2268,107 +1944,11 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
mPreserveSelectionOnNextLossOfFocus = true;
}
- /**
- * @return Whether the page has an active, touch-controlled selection region.
- */
- @VisibleForTesting
- public boolean hasSelection() {
- return mHasSelection;
- }
-
- /**
- * @return Whether the page has an active, touch-controlled insertion handle.
- */
- @VisibleForTesting
- public boolean hasInsertion() {
- return mHasInsertion;
- }
-
@CalledByNative
private void onSelectionEvent(
- int eventType, int xAnchor, int yAnchor, int left, int top, int right, int bottom) {
+ int eventType, int xAnchor, int yAnchor) {
// Ensure the provided selection coordinates form a non-empty rect, as required by
// the selection action mode.
- if (left == right) ++right;
- if (top == bottom) ++bottom;
- switch (eventType) {
- case SelectionEventType.SELECTION_HANDLES_SHOWN:
- mSelectionRect.set(left, top, right, bottom);
- mHasSelection = true;
- mUnselectAllOnActionModeDismiss = true;
- showSelectActionMode(true);
- break;
-
- case SelectionEventType.SELECTION_HANDLES_MOVED:
- mSelectionRect.set(left, top, right, bottom);
- invalidateActionModeContentRect();
- break;
-
- case SelectionEventType.SELECTION_HANDLES_CLEARED:
- mHasSelection = false;
- mDraggingSelection = false;
- mUnselectAllOnActionModeDismiss = false;
- hideSelectActionMode();
- mSelectionRect.setEmpty();
- break;
-
- case SelectionEventType.SELECTION_HANDLE_DRAG_STARTED:
- mDraggingSelection = true;
- updateActionModeVisibility();
- break;
-
- case SelectionEventType.SELECTION_HANDLE_DRAG_STOPPED:
- mDraggingSelection = false;
- updateActionModeVisibility();
- break;
-
- case SelectionEventType.INSERTION_HANDLE_SHOWN:
- mSelectionRect.set(left, top, right, bottom);
- mHasInsertion = true;
- break;
-
- case SelectionEventType.INSERTION_HANDLE_MOVED:
- mSelectionRect.set(left, top, right, bottom);
- if (!isScrollInProgress() && isPastePopupShowing()) {
- showPastePopup(xAnchor, yAnchor);
- } else {
- hidePastePopup();
- }
- break;
-
- case SelectionEventType.INSERTION_HANDLE_TAPPED:
- if (mWasPastePopupShowingOnInsertionDragStart) {
- hidePastePopup();
- } else {
- showPastePopup(xAnchor, yAnchor);
- }
- mWasPastePopupShowingOnInsertionDragStart = false;
- break;
-
- case SelectionEventType.INSERTION_HANDLE_CLEARED:
- hidePastePopup();
- mHasInsertion = false;
- mSelectionRect.setEmpty();
- break;
-
- case SelectionEventType.INSERTION_HANDLE_DRAG_STARTED:
- mWasPastePopupShowingOnInsertionDragStart = isPastePopupShowing();
- hidePastePopup();
- break;
-
- case SelectionEventType.INSERTION_HANDLE_DRAG_STOPPED:
- if (mWasPastePopupShowingOnInsertionDragStart) {
- showPastePopup(xAnchor, yAnchor);
- }
- mWasPastePopupShowingOnInsertionDragStart = false;
- break;
- case SelectionEventType.SELECTION_ESTABLISHED:
- case SelectionEventType.SELECTION_DISSOLVED:
- break;
-
- default:
- assert false : "Invalid selection event type.";
- }
if (mContextualSearchClient != null) {
mContextualSearchClient.onSelectionEvent(eventType, xAnchor, yAnchor);
}
@@ -2478,7 +2058,6 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
TraceEvent.begin("ContentViewCore.updateImeAdapter");
boolean focusedNodeEditable = (textInputType != TextInputType.NONE);
boolean focusedNodeIsPassword = (textInputType == TextInputType.PASSWORD);
- if (!focusedNodeEditable) hidePastePopup();
mImeAdapter.attach(nativeImeAdapterAndroid);
mImeAdapter.updateKeyboardVisibility(
@@ -2486,14 +2065,6 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
mImeAdapter.updateState(text, selectionStart, selectionEnd, compositionStart,
compositionEnd, isNonImeChange);
- if (mActionMode != null) {
- final boolean actionModeConfigurationChanged =
- focusedNodeEditable != mFocusedNodeEditable
- || focusedNodeIsPassword != mFocusedNodeIsPassword;
- if (actionModeConfigurationChanged) mActionMode.invalidate();
- }
-
- mFocusedNodeIsPassword = focusedNodeIsPassword;
if (focusedNodeEditable != mFocusedNodeEditable) {
mFocusedNodeEditable = focusedNodeEditable;
mJoystickScrollProvider.setEnabled(!mFocusedNodeEditable);
@@ -2640,80 +2211,10 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
@SuppressWarnings("unused")
@CalledByNative
- private boolean showPastePopupWithFeedback(int x, int y) {
- if (showPastePopup(x, y)) {
- if (mWebContents != null) mWebContents.onContextMenuOpened();
- return true;
- } else {
- return false;
- }
- }
-
- @SuppressWarnings("unused")
- @CalledByNative
private void performLongPressHapticFeedback() {
mContainerView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
}
- @VisibleForTesting
- public boolean isPastePopupShowing() {
- if (mPastePopupMenu != null) return mPastePopupMenu.isShowing();
- return false;
- }
-
- private boolean showPastePopup(int x, int y) {
- if (mContainerView.getParent() == null || mContainerView.getVisibility() != View.VISIBLE) {
- return false;
- }
-
- if (!mHasInsertion || !canPaste()) return false;
- final float contentOffsetYPix = mRenderCoordinates.getContentOffsetYPix();
- PastePopupMenu pastePopupMenu = getPastePopup();
- if (pastePopupMenu == null) return false;
- try {
- pastePopupMenu.show(x, (int) (y + contentOffsetYPix));
- } catch (WindowManager.BadTokenException e) {
- return false;
- }
- return true;
- }
-
- private void hidePastePopup() {
- if (mPastePopupMenu != null) mPastePopupMenu.hide();
- }
-
- private PastePopupMenu getPastePopup() {
- if (mPastePopupMenu == null) {
- PastePopupMenuDelegate delegate = new PastePopupMenuDelegate() {
- @Override
- public void paste() {
- mWebContents.paste();
- dismissTextHandles();
- }
-
- @Override
- public void onDismiss() {
- if (mWebContents != null) mWebContents.onContextMenuClosed();
- }
- };
- Context windowContext = getWindowAndroid().getContext().get();
- if (windowContext == null) return null;
- if (supportsFloatingActionMode()) {
- mPastePopupMenu = new FloatingPastePopupMenu(
- windowContext, getContainerView(), delegate);
- } else {
- mPastePopupMenu = new LegacyPastePopupMenu(
- windowContext, getContainerView(), delegate);
- }
- }
- return mPastePopupMenu;
- }
-
- private boolean canPaste() {
- return ((ClipboardManager) mContext.getSystemService(
- Context.CLIPBOARD_SERVICE)).hasPrimaryClip();
- }
-
@SuppressWarnings("unused")
@CalledByNative
private void onRenderProcessChange() {
@@ -3164,7 +2665,7 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
* @param data the reply that contains the processed text.
*/
public void onReceivedProcessTextResult(int resultCode, Intent data) {
- if (mWebContents == null || !isSelectionEditable() || resultCode != Activity.RESULT_OK
+ if (mWebContents == null || resultCode != Activity.RESULT_OK // Fix this
|| data == null) {
return;
}
@@ -3354,14 +2855,6 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen
@Override
public void onScreenOrientationChanged(int orientation) {
- // ActionMode#invalidate() won't be able to re-layout the floating
- // action mode menu items according to the new orientation. So Chrome
- // has to re-create the action mode.
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && mActionMode != null) {
- hidePopupsAndPreserveSelection();
- showSelectActionMode(true);
- }
-
sendOrientationChangeEvent(orientation);
}

Powered by Google App Engine
This is Rietveld 408576698