package treehou.se.habit.ui.widgets.factories;
import android.util.Log;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import se.treehou.ng.ohcommunicator.connector.models.OHLinkedPage;
import se.treehou.ng.ohcommunicator.connector.models.OHWidget;
import treehou.se.habit.R;
import treehou.se.habit.ui.widgets.WidgetFactory;
public class WebWidgetFactory implements IWidgetFactory {
@Override
public WidgetFactory.IWidgetHolder build(WidgetFactory widgetFactory, OHLinkedPage page, final OHWidget widget, final OHWidget parent) {
return WebWidgetHolder.create(widgetFactory, widget, parent);
}
public static class WebWidgetHolder implements WidgetFactory.IWidgetHolder {
private static final String TAG = "WebWidgetHolder";
private BaseWidgetFactory.BaseWidgetHolder baseHolder;
private WebView webView;
private OHWidget widget;
public static WebWidgetHolder create(WidgetFactory factory, OHWidget widget, OHWidget parent){
return new WebWidgetHolder(widget, parent, factory);
}
private WebWidgetHolder(OHWidget widget, OHWidget parent, WidgetFactory factory) {
baseHolder = new BaseWidgetFactory.BaseWidgetHolder.Builder(factory)
.setWidget(widget)
.setFlat(false)
.setShowLabel(true)
.setParent(parent)
.build();
final View itemView = factory.getInflater().inflate(R.layout.item_widget_web, null);
webView = (WebView) itemView.findViewById(R.id.webView);
WebViewClient client = new WebViewClient();
webView.setWebViewClient(client);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
webView.setFocusableInTouchMode(true);
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
settings.setDomStorageEnabled(true);
settings.setDatabaseEnabled(true);
settings.setAppCacheEnabled(true);
baseHolder.getSubView().addView(itemView);
update(widget);
}
@Override
public void update(final OHWidget widget) {
Log.d(TAG, "update " + widget);
if (widget == null) {
return;
}
OHWidget oldWidget = this.widget;
if(oldWidget == null || !oldWidget.getUrl().equals(widget.getUrl())){
webView.loadUrl(widget.getUrl());
}
baseHolder.update(widget);
this.widget = widget;
}
@Override
public View getView() {
return baseHolder.getView();
}
}
}