| 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 1d6364b5d1da54889e7efa43249db29d31e6f433..2b68c4412ee07600b3e1e356b79d6a80dc248181 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
|
| @@ -9,6 +9,7 @@ import android.content.res.Configuration;
|
| import android.graphics.Canvas;
|
| import android.os.Bundle;
|
| import android.util.Log;
|
| +import android.view.ActionMode;
|
| import android.view.KeyEvent;
|
| import android.view.MotionEvent;
|
| import android.view.View;
|
| @@ -146,6 +147,16 @@ public class ContentViewCore implements MotionEventDelegate {
|
| // will be mistakenly fired.
|
| private boolean mIgnoreSingleTap;
|
|
|
| + // Only valid when focused on a text / password field.
|
| + private ImeAdapter mImeAdapter;
|
| +
|
| + // 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 String mLastSelectedText;
|
| + private boolean mSelectionEditable;
|
| + private ActionMode mActionMode;
|
| +
|
| // The legacy webview DownloadListener.
|
| private DownloadListener mDownloadListener;
|
| // ContentViewDownloadDelegate adds support for authenticated downloads
|
| @@ -472,6 +483,10 @@ public class ContentViewCore implements MotionEventDelegate {
|
| if (mNativeContentViewCore != 0) nativeClearHistory(mNativeContentViewCore);
|
| }
|
|
|
| + String getSelectedText() {
|
| + return mHasSelection ? mLastSelectedText : "";
|
| + }
|
| +
|
| // End FrameLayout overrides.
|
|
|
|
|
| @@ -718,6 +733,63 @@ public class ContentViewCore implements MotionEventDelegate {
|
| return mDownloadDelegate;
|
| }
|
|
|
| + private void showSelectActionBar() {
|
| + if (mActionMode != null) {
|
| + mActionMode.invalidate();
|
| + return;
|
| + }
|
| +
|
| + // Start a new action mode with a SelectActionModeCallback.
|
| + SelectActionModeCallback.ActionHandler actionHandler =
|
| + new SelectActionModeCallback.ActionHandler() {
|
| + @Override
|
| + public boolean selectAll() {
|
| + return mImeAdapter.selectAll();
|
| + }
|
| +
|
| + @Override
|
| + public boolean cut() {
|
| + return mImeAdapter.cut();
|
| + }
|
| +
|
| + @Override
|
| + public boolean copy() {
|
| + return mImeAdapter.copy();
|
| + }
|
| +
|
| + @Override
|
| + public boolean paste() {
|
| + return mImeAdapter.paste();
|
| + }
|
| +
|
| + @Override
|
| + public boolean isSelectionEditable() {
|
| + return mSelectionEditable;
|
| + }
|
| +
|
| + @Override
|
| + public String getSelectedText() {
|
| + return ContentViewCore.this.getSelectedText();
|
| + }
|
| +
|
| + @Override
|
| + public void onDestroyActionMode() {
|
| + mActionMode = null;
|
| + mImeAdapter.unselect();
|
| + getContentViewClient().onContextualActionBarHidden();
|
| + }
|
| + };
|
| + mActionMode = mContainerView.startActionMode(
|
| + getContentViewClient().getSelectActionModeCallback(getContext(), actionHandler,
|
| + nativeIsIncognito(mNativeContentViewCore)));
|
| + if (mActionMode == null) {
|
| + // There is no ActionMode, so remove the selection.
|
| + mImeAdapter.unselect();
|
| + } else {
|
| + getContentViewClient().onContextualActionBarShown();
|
| + }
|
| + }
|
| +
|
| /**
|
| * @return Whether the native ContentView has crashed.
|
| */
|
|
|