Commit bee06070 authored by Clark DuVall's avatar Clark DuVall Committed by Commit Bot

[WebLayer] Fix action mode popup when selecting text

This enables the action mode bar, which has the "Copy", "Select", "Share
all" and "Web search" options when text is selected.

Change-Id: Id91ce30e7f389d9105626f1f463fa687751dfa65
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1900570
Commit-Queue: Clark DuVall <cduvall@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#712858}
parent b0950924
...@@ -33,6 +33,7 @@ android_library("java") { ...@@ -33,6 +33,7 @@ android_library("java") {
"org/chromium/weblayer_private/ContentView.java", "org/chromium/weblayer_private/ContentView.java",
"org/chromium/weblayer_private/ContentViewRenderView.java", "org/chromium/weblayer_private/ContentViewRenderView.java",
"org/chromium/weblayer_private/DownloadCallbackProxy.java", "org/chromium/weblayer_private/DownloadCallbackProxy.java",
"org/chromium/weblayer_private/ActionModeCallback.java",
"org/chromium/weblayer_private/FullscreenCallbackProxy.java", "org/chromium/weblayer_private/FullscreenCallbackProxy.java",
"org/chromium/weblayer_private/NavigationControllerImpl.java", "org/chromium/weblayer_private/NavigationControllerImpl.java",
"org/chromium/weblayer_private/NavigationImpl.java", "org/chromium/weblayer_private/NavigationImpl.java",
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.weblayer_private;
import android.app.SearchManager;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
import org.chromium.base.PackageManagerUtils;
import org.chromium.content_public.browser.ActionModeCallbackHelper;
import org.chromium.content_public.browser.SelectionPopupController;
import org.chromium.content_public.browser.WebContents;
/**
* A class that handles selection action mode for WebLayer.
*/
public final class ActionModeCallback implements ActionMode.Callback {
private final ActionModeCallbackHelper mHelper;
public ActionModeCallback(WebContents webContents) {
mHelper =
SelectionPopupController.fromWebContents(webContents).getActionModeCallbackHelper();
}
@Override
public final boolean onCreateActionMode(ActionMode mode, Menu menu) {
int allowedActionModes = ActionModeCallbackHelper.MENU_ITEM_PROCESS_TEXT
| ActionModeCallbackHelper.MENU_ITEM_SHARE;
if (isWebSearchAvailable()) {
allowedActionModes |= ActionModeCallbackHelper.MENU_ITEM_WEB_SEARCH;
}
mHelper.setAllowedMenuItems(allowedActionModes);
mHelper.onCreateActionMode(mode, menu);
return true;
}
private boolean isWebSearchAvailable() {
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.EXTRA_NEW_SEARCH, true);
return !PackageManagerUtils.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)
.isEmpty();
}
@Override
public final boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return mHelper.onPrepareActionMode(mode, menu);
}
@Override
public final boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return mHelper.onActionItemClicked(mode, item);
}
@Override
public final void onDestroyActionMode(ActionMode mode) {
mHelper.onDestroyActionMode();
}
}
...@@ -12,6 +12,7 @@ import org.chromium.base.Callback; ...@@ -12,6 +12,7 @@ import org.chromium.base.Callback;
import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods; import org.chromium.base.annotations.NativeMethods;
import org.chromium.content_public.browser.SelectionPopupController;
import org.chromium.content_public.browser.ViewEventSink; import org.chromium.content_public.browser.ViewEventSink;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
import org.chromium.ui.base.ViewAndroidDelegate; import org.chromium.ui.base.ViewAndroidDelegate;
...@@ -120,6 +121,8 @@ public final class BrowserControllerImpl extends IBrowserController.Stub { ...@@ -120,6 +121,8 @@ public final class BrowserControllerImpl extends IBrowserController.Stub {
mFragment = fragment; mFragment = fragment;
mWebContents.setTopLevelNativeWindow(fragment.getWindowAndroid()); mWebContents.setTopLevelNativeWindow(fragment.getWindowAndroid());
mViewAndroidDelegate.setContainerView(fragment.getViewAndroidDelegateContainerView()); mViewAndroidDelegate.setContainerView(fragment.getViewAndroidDelegateContainerView());
SelectionPopupController.fromWebContents(mWebContents)
.setActionModeCallback(new ActionModeCallback(mWebContents));
} }
public BrowserFragmentControllerImpl getFragment() { public BrowserFragmentControllerImpl getFragment() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment