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:
weblayer
browser
java
org
chromium
weblayer_private
public
java
org
chromium
weblayer
shell
android
src
org
chromium
weblayer
@ -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));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user