package triaina.webview;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.google.inject.Inject;
import triaina.commons.utils.SystemUtils;
import triaina.injector.TriainaEnvironment;
import triaina.injector.fragment.TriainaFragment;
import triaina.webview.annotation.Bridge;
import triaina.webview.config.WebViewBridgeConfigurator;
import triaina.webview.entity.Params;
import triaina.webview.entity.device.EnvironmentSetParams;
import triaina.webview.entity.device.FormPictureSelectParams;
import triaina.webview.entity.device.FormPictureSelectResult;
import triaina.webview.entity.device.NetBrowserOpenParams;
public abstract class AbstractWebViewBridgeFragment extends TriainaFragment {
private static final String TAG = AbstractWebViewBridgeFragment.class.getSimpleName();
private WebViewBridge mWebViewBridge;
@Inject
private WebViewBridgeConfigurator mConfigurator;
@Inject
private WebViewRestoreManager mRestoreManager;
@Inject
private TriainaEnvironment mEnvironment;
private boolean mIsRestored;
final public String[] getDomains() {
return mWebViewBridge.getDomainConfig().getDomains();
}
public void call(String channel, Params params) {
mWebViewBridge.call(channel, params);
}
public void call(String channel, Params params, Callback<?> callback) {
mWebViewBridge.call(channel, params, callback);
}
final public WebViewBridge getWebViewBridge() {
return mWebViewBridge;
}
final public WebViewBridgeConfigurator getConfigurator() {
return mConfigurator;
}
@Bridge("system.environment.set")
public void doEnvironmentSet(EnvironmentSetParams params) {
mEnvironment.set(params.getName(), params.getValue());
}
@Bridge("system.form.picture.select")
public void doFormPictureSelect(FormPictureSelectParams params, Callback<FormPictureSelectResult> callback) {
// TODO need to implement Triaina Framework original logic
}
@Bridge("system.net.browser.open")
public void doNetBrowserOpen(NetBrowserOpenParams params) {
SystemUtils.launchExternalBrowser(getActivity(), Uri.parse(params.getUrl()));
}
@Bridge("system.web.error")
public void doWebError() {
// ignore
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View inflatedView = mConfigurator.loadInflatedView(this, inflater, container);
mWebViewBridge = mConfigurator.loadWebViewBridge(this, inflatedView);
mConfigurator.configure(mWebViewBridge);
mConfigurator.registerBridge(mWebViewBridge, this);
configureSettings();
configureClients();
return inflatedView;
}
protected void configureSettings() {
mConfigurator.configureSetting(mWebViewBridge);
}
protected void configureClients() {
mWebViewBridge.setWebChromeClient(new TriainaWebChromeClient(getActivity()));
mWebViewBridge.setWebViewClient(new TriainaWebViewClient());
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mIsRestored = mRestoreManager.restoreWebView(mWebViewBridge, savedInstanceState);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mWebViewBridge != null)
storeWebView(outState);
}
protected void storeWebView(Bundle outState) {
mRestoreManager.storeWebView(mWebViewBridge, outState);
}
@Override
public void onResume() {
super.onResume();
mWebViewBridge.resume();
}
@Override
public void onPause() {
mWebViewBridge.pause();
super.onPause();
}
@Override
public void onDestroyView() {
try {
mWebViewBridge.destroy();
} catch (Exception exp) {
Log.w(TAG, exp.getMessage() + "", exp);
}
mWebViewBridge = null;
super.onDestroyView();
}
public boolean isRestored() {
return mIsRestored;
}
}