package com.hawkbrowser.chromecontent;
import org.chromium.content.browser.ActivityContentVideoViewClient;
import org.chromium.content.browser.ContentVideoViewClient;
import org.chromium.content.browser.ContentView;
import org.chromium.content.browser.ContentViewClient;
import org.chromium.content.common.ProcessInitException;
import org.chromium.content_shell.ShellManager;
import org.chromium.ui.base.ActivityWindowAndroid;
import org.chromium.ui.base.WindowAndroid;
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.FrameLayout;
public class WebView extends FrameLayout {
private ShellManager mShellManager;
private WindowAndroid mWindowAndroid;
private Activity mHostActivity;
private String mPendingLoadUrl;
public WebView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public void init(Activity activity) throws ProcessInitException {
if(null != mShellManager)
return;
ChromeInitializer.get().ensureLibraryLoaded();
mHostActivity = activity;
mShellManager = new ShellManager(getContext(), null);
mShellManager.setLayoutParams(new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
mWindowAndroid = new ActivityWindowAndroid(activity);
mShellManager.setWindow(mWindowAndroid);
addView(mShellManager, new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
if(!ChromeInitializer.get().isChromeStartFinished()) {
ChromeInitializer.get().setCallback(new ChromeInitializer.InitializeCallback() {
@Override
public void onSuccess(boolean alreadyStarted) {
// TODO Auto-generated method stub
if(null != mPendingLoadUrl)
loadUrlAfterChromeStart(mPendingLoadUrl);
mPendingLoadUrl = null;
}
@Override
public void onFailure() {
// TODO Auto-generated method stub
}
});
ChromeInitializer.get().startChrome(activity);
}
}
public void loadUrl(String url) {
if(ChromeInitializer.get().isChromeStartFinished())
loadUrlAfterChromeStart(url);
else
mPendingLoadUrl = url;
}
private void loadUrlAfterChromeStart(String url) {
if(mShellManager.getActiveShell() != null)
mShellManager.getActiveShell().loadUrl(url);
else {
mShellManager.launchShell(url);
getContentView().setContentViewClient(new ContentViewClient() {
@Override
public ContentVideoViewClient getContentVideoViewClient() {
return new ActivityContentVideoViewClient(mHostActivity);
}
});
}
}
public String getUrl() {
if(null == mShellManager.getActiveShell())
return "";
else
return mShellManager.getActiveShell().getContentView().getUrl();
}
public boolean canGoBack() {
if(null == mShellManager.getActiveShell())
return false;
else
return mShellManager.getActiveShell().getContentView().canGoBack();
}
public boolean canGoForward() {
if(null == mShellManager.getActiveShell())
return false;
else
return mShellManager.getActiveShell().getContentView().canGoForward();
}
public void goBack() {
if(null != mShellManager.getActiveShell())
mShellManager.getActiveShell().getContentView().goBack();
}
public void goForward() {
if(null != mShellManager.getActiveShell())
mShellManager.getActiveShell().getContentView().goForward();
}
public ContentView getContentView() {
if(null != mShellManager.getActiveShell())
return mShellManager.getActiveShell().getContentView();
else
return null;
}
}