Commit 856d84ec authored by Jinsuk Kim's avatar Jinsuk Kim Committed by Commit Bot

Android: Makes SelectionPopupController init simpler

Embedders have to do a bit convoluted initialization for
SelectionPopupController (its action mode callback to be set
requires a helper instance from the SPC itself). This CL makes
it simpler by delegating the helper initialization to
action mode callback constructor.

|ceateContentViewCore| in Tab.java, For instance:

From:
SelectionPopupController controller = SelectionPopupController.fromWebContents(webContents);
ChromeActionModeCallback actionModeCallback =
    new ChromeActionModeCallback(this, controller.getActionModeCallbackHelper());
controller.setActionModeCallback(actionModeCallback);

SelectionPopupController.fromWebContents(webContents)
    setActionModeCallback(new ChromeActionModeCallback(this, webContents));

to: 
Change-Id: Ifec52ce2c1f9446f47de72295be1abc5e1c361d7
Reviewed-on: https://chromium-review.googlesource.com/1029757Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556037}
parent c5db5071
...@@ -17,6 +17,8 @@ import android.view.MenuItem; ...@@ -17,6 +17,8 @@ import android.view.MenuItem;
import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.metrics.RecordUserAction;
import org.chromium.content.R; import org.chromium.content.R;
import org.chromium.content_public.browser.ActionModeCallbackHelper; 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 Android WebView. * A class that handles selection action mode for Android WebView.
...@@ -27,11 +29,11 @@ public class AwActionModeCallback implements ActionMode.Callback { ...@@ -27,11 +29,11 @@ public class AwActionModeCallback implements ActionMode.Callback {
private final ActionModeCallbackHelper mHelper; private final ActionModeCallbackHelper mHelper;
private int mAllowedMenuItems; private int mAllowedMenuItems;
public AwActionModeCallback(Context context, AwContents awContents, public AwActionModeCallback(Context context, AwContents awContents, WebContents webContents) {
ActionModeCallbackHelper helper) {
mContext = context; mContext = context;
mAwContents = awContents; mAwContents = awContents;
mHelper = helper; mHelper =
SelectionPopupController.fromWebContents(webContents).getActionModeCallbackHelper();
mHelper.setAllowedMenuItems(0); // No item is allowed by default for WebView. mHelper.setAllowedMenuItems(0); // No item is allowed by default for WebView.
} }
......
...@@ -875,8 +875,7 @@ public class AwContents implements SmartClipProvider { ...@@ -875,8 +875,7 @@ public class AwContents implements SmartClipProvider {
viewDelegate, internalDispatcher, windowAndroid); viewDelegate, internalDispatcher, windowAndroid);
mContentViewCore.setHideKeyboardOnBlur(false); mContentViewCore.setHideKeyboardOnBlur(false);
SelectionPopupController controller = SelectionPopupController.fromWebContents(webContents); SelectionPopupController controller = SelectionPopupController.fromWebContents(webContents);
controller.setActionModeCallback( controller.setActionModeCallback(new AwActionModeCallback(mContext, this, webContents));
new AwActionModeCallback(mContext, this, controller.getActionModeCallbackHelper()));
if (mAutofillProvider != null) { if (mAutofillProvider != null) {
controller.setNonSelectionActionModeCallback( controller.setNonSelectionActionModeCallback(
new AutofillActionModeCallback(mContext, mAutofillProvider)); new AutofillActionModeCallback(mContext, mAutofillProvider));
......
...@@ -23,6 +23,8 @@ import org.chromium.components.feature_engagement.EventConstants; ...@@ -23,6 +23,8 @@ import org.chromium.components.feature_engagement.EventConstants;
import org.chromium.content.R; import org.chromium.content.R;
import org.chromium.content_public.browser.ActionModeCallbackHelper; import org.chromium.content_public.browser.ActionModeCallbackHelper;
import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.SelectionPopupController;
import org.chromium.content_public.browser.WebContents;
import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.PageTransition;
/** /**
...@@ -32,9 +34,14 @@ public class ChromeActionModeCallback implements ActionMode.Callback { ...@@ -32,9 +34,14 @@ public class ChromeActionModeCallback implements ActionMode.Callback {
private final Tab mTab; private final Tab mTab;
private final ActionModeCallbackHelper mHelper; private final ActionModeCallbackHelper mHelper;
public ChromeActionModeCallback(Tab tab, ActionModeCallbackHelper helper) { public ChromeActionModeCallback(Tab tab, WebContents webContents) {
mTab = tab; mTab = tab;
mHelper = helper; mHelper = getActionModeCallbackHelper(webContents);
}
@VisibleForTesting
protected ActionModeCallbackHelper getActionModeCallbackHelper(WebContents webContents) {
return SelectionPopupController.fromWebContents(webContents).getActionModeCallbackHelper();
} }
@Override @Override
......
...@@ -1795,10 +1795,8 @@ public class Tab ...@@ -1795,10 +1795,8 @@ public class Tab
R.string.accessibility_content_view)); R.string.accessibility_content_view));
ContentViewCore cvc = ContentViewCore.create(mThemedApplicationContext, PRODUCT_VERSION, ContentViewCore cvc = ContentViewCore.create(mThemedApplicationContext, PRODUCT_VERSION,
webContents, new TabViewAndroidDelegate(this, cv), cv, getWindowAndroid()); webContents, new TabViewAndroidDelegate(this, cv), cv, getWindowAndroid());
SelectionPopupController controller = SelectionPopupController.fromWebContents(webContents); SelectionPopupController.fromWebContents(webContents)
ChromeActionModeCallback actionModeCallback = .setActionModeCallback(new ChromeActionModeCallback(this, webContents));
new ChromeActionModeCallback(this, controller.getActionModeCallbackHelper());
controller.setActionModeCallback(actionModeCallback);
return cvc; return cvc;
} }
......
...@@ -28,6 +28,7 @@ import org.chromium.chrome.browser.locale.LocaleManager; ...@@ -28,6 +28,7 @@ import org.chromium.chrome.browser.locale.LocaleManager;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.content.R; import org.chromium.content.R;
import org.chromium.content_public.browser.ActionModeCallbackHelper; import org.chromium.content_public.browser.ActionModeCallbackHelper;
import org.chromium.content_public.browser.WebContents;
import org.chromium.testing.local.LocalRobolectricTestRunner; import org.chromium.testing.local.LocalRobolectricTestRunner;
/** /**
...@@ -45,7 +46,18 @@ public class ChromeActionModeCallbackTest { ...@@ -45,7 +46,18 @@ public class ChromeActionModeCallbackTest {
@Mock @Mock
private Menu mMenu; private Menu mMenu;
private ChromeActionModeCallback mActionModeCallback; private class TestChromeActionModeCallback extends ChromeActionModeCallback {
public TestChromeActionModeCallback(Tab tab, ActionModeCallbackHelper helper) {
super(tab, null);
}
@Override
public ActionModeCallbackHelper getActionModeCallbackHelper(WebContents webContents) {
return mActionModeCallbackHelper;
}
}
private TestChromeActionModeCallback mActionModeCallback;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
...@@ -55,7 +67,7 @@ public class ChromeActionModeCallbackTest { ...@@ -55,7 +67,7 @@ public class ChromeActionModeCallbackTest {
RecordUserAction.setDisabledForTests(true); RecordUserAction.setDisabledForTests(true);
mActionModeCallback = mActionModeCallback =
Mockito.spy(new ChromeActionModeCallback(mTab, mActionModeCallbackHelper)); Mockito.spy(new TestChromeActionModeCallback(mTab, mActionModeCallbackHelper));
} }
@After @After
......
...@@ -306,8 +306,8 @@ public class Shell extends LinearLayout { ...@@ -306,8 +306,8 @@ public class Shell extends LinearLayout {
mContentViewCore = (ContentViewCoreImpl) ContentViewCore.create( mContentViewCore = (ContentViewCoreImpl) ContentViewCore.create(
context, "", webContents, mViewAndroidDelegate, cv, mWindow); context, "", webContents, mViewAndroidDelegate, cv, mWindow);
mWebContents = webContents; mWebContents = webContents;
SelectionPopupController controller = SelectionPopupController.fromWebContents(webContents); SelectionPopupController.fromWebContents(webContents)
controller.setActionModeCallback(defaultActionCallback()); .setActionModeCallback(defaultActionCallback());
mNavigationController = mWebContents.getNavigationController(); mNavigationController = mWebContents.getNavigationController();
if (getParent() != null) mWebContents.onShow(); if (getParent() != null) mWebContents.onShow();
if (mWebContents.getVisibleUrl() != null) { if (mWebContents.getVisibleUrl() != null) {
......
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