0

weblayer: adds url-field for shell on android

BUG=none
TEST=none

Change-Id: Iaee94bca7a3e3192fca11af11df4a84d3d034121
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1774204
Reviewed-by: John Abd-El-Malek <jam@chromium.org>
Commit-Queue: Scott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#691356}
This commit is contained in:
Scott Violet
2019-08-28 22:32:12 +00:00
committed by Commit Bot
parent ff6d4d58c4
commit 44c214be6b
3 changed files with 66 additions and 2 deletions
weblayer
browser
java
org
chromium
public
java
org
chromium
shell
android
src
org
chromium

@ -7,6 +7,9 @@ package org.chromium.weblayer_private;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.components.embedder_support.view.ContentViewRenderView;
@ -21,10 +24,14 @@ public final class BrowserControllerImpl {
private long mNativeBrowserController;
private ActivityWindowAndroid mWindowAndroid;
// This is set as the content view of the activity. It contains mContentView.
private LinearLayout mLinearLayout;
// This is parented to mLinearLayout.
private ContentViewRenderView mContentView;
private ProfileImpl mProfile;
private WebContents mWebContents;
private BrowserObserverProxy mBrowserObserverProxy;
private View mTopView;
private static class InternalAccessDelegateImpl
implements ViewEventSink.InternalAccessDelegate {
@ -51,9 +58,12 @@ public final class BrowserControllerImpl {
Activity activity, ProfileImpl profile, BrowserControllerClient client) {
mProfile = profile;
mLinearLayout = new LinearLayout(activity);
mLinearLayout.setOrientation(LinearLayout.VERTICAL);
mWindowAndroid = new ActivityWindowAndroid(activity);
mContentView = new ContentViewRenderView(activity);
activity.setContentView(mContentView);
activity.setContentView(mLinearLayout);
mWindowAndroid.setAnimationPlaceholderView(mContentView.getSurfaceView());
mContentView.onNativeLibraryLoaded(mWindowAndroid);
@ -65,6 +75,9 @@ public final class BrowserControllerImpl {
WebContents.createDefaultInternalsHolder());
mContentView.setCurrentWebContents(mWebContents);
mLinearLayout.addView(mContentView,
new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f));
mWebContents.onShow();
mBrowserObserverProxy = new BrowserObserverProxy(mNativeBrowserController, client);
}
@ -75,6 +88,17 @@ public final class BrowserControllerImpl {
mNativeBrowserController = 0;
}
public void setTopView(View view) {
if (mTopView == view) return;
if (mTopView != null) mLinearLayout.removeView(mTopView);
mTopView = view;
if (mTopView != null) {
mLinearLayout.addView(mTopView, 0,
new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 0f));
}
}
// TODO: this is temporary, move to NavigationControllerImpl.
public void navigate(String uri) {
mWebContents.getNavigationController().loadUrl(new LoadUrlParams(uri));

@ -6,6 +6,7 @@ package org.chromium.weblayer;
import android.app.Activity;
import android.net.Uri;
import android.view.View;
import org.chromium.weblayer_private.BrowserControllerClient;
import org.chromium.weblayer_private.BrowserControllerImpl;
@ -34,6 +35,10 @@ public final class BrowserController {
return mNavigationController;
}
public void setTopView(View view) {
mBrowserController.setTopView(view);
}
public void addObserver(BrowserObserver observer) {
mObservers.add(observer);
}

@ -7,9 +7,16 @@ package org.chromium.weblayer.shell;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.text.InputType;
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import org.chromium.base.CommandLine;
import org.chromium.weblayer.BrowserController;
import org.chromium.weblayer.BrowserObserver;
import org.chromium.weblayer.Profile;
import org.chromium.weblayer.WebLayer;
@ -24,6 +31,7 @@ public class WebLayerShellActivity extends Activity {
private WebLayer mWebLayer;
private Profile mProfile;
private BrowserController mBrowserController;
private EditText mUrlView;
@Override
protected void onCreate(final Bundle savedInstanceState) {
@ -35,13 +43,40 @@ public class WebLayerShellActivity extends Activity {
((WebLayerShellApplication) getApplication()).initCommandLine();
}
mUrlView = new EditText(this);
mUrlView.setSelectAllOnFocus(true);
mUrlView.setInputType(InputType.TYPE_TEXT_VARIATION_URI);
mUrlView.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((actionId != EditorInfo.IME_ACTION_GO)
&& (event == null || event.getKeyCode() != KeyEvent.KEYCODE_ENTER
|| event.getAction() != KeyEvent.ACTION_DOWN)) {
return false;
}
loadUrl(mUrlView.getText().toString());
return true;
}
});
mProfile = WebLayer.getInstance().createProfile(new File(""));
mBrowserController = new BrowserController(this, mProfile);
mBrowserController.getNavigationController().navigate(Uri.parse("http://google.com"));
mBrowserController.setTopView(mUrlView);
loadUrl("http://google.com");
mBrowserController.addObserver(new BrowserObserver() {
@Override
public void displayURLChanged(Uri uri) {
mUrlView.setText(uri.toString());
}
});
}
@Override
protected void onStart() {
super.onStart();
}
private void loadUrl(String url) {
mBrowserController.getNavigationController().navigate(Uri.parse(url));
}
}