|
|
@@ -0,0 +1,157 @@
|
|
|
+/*
|
|
|
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
|
|
|
+ */
|
|
|
+package kr.co.zumo.app.lifeplus.view.screen.contents.view;
|
|
|
+
|
|
|
+import android.app.Activity;
|
|
|
+import android.graphics.Bitmap;
|
|
|
+import android.net.http.SslError;
|
|
|
+import android.util.Log;
|
|
|
+import android.view.View;
|
|
|
+import android.webkit.JavascriptInterface;
|
|
|
+import android.webkit.SslErrorHandler;
|
|
|
+import android.webkit.WebSettings;
|
|
|
+import android.webkit.WebView;
|
|
|
+import android.webkit.WebViewClient;
|
|
|
+
|
|
|
+import com.google.gson.Gson;
|
|
|
+
|
|
|
+import kr.co.zumo.app.R;
|
|
|
+import kr.co.zumo.app.lifeplus.bean.HtmlBean;
|
|
|
+import kr.co.zumo.app.lifeplus.bean.api.ContentsDetailImageBean;
|
|
|
+import kr.co.zumo.app.lifeplus.util.StringUtil;
|
|
|
+import kr.co.zumo.app.lifeplus.view.Event;
|
|
|
+import kr.co.zumo.app.lifeplus.view.IEventListener;
|
|
|
+import kr.co.zumo.app.lifeplus.view.custom.VideoWebChromeClient;
|
|
|
+
|
|
|
+/**
|
|
|
+ * ListicleHtmlViewHolder
|
|
|
+ * <pre>
|
|
|
+ * </pre>
|
|
|
+ *
|
|
|
+ * @author 민효동
|
|
|
+ * @version 1.0
|
|
|
+ * @history 민효동 [2019. 2. 19.] [최초 작성]
|
|
|
+ * @since 2019. 2. 19.
|
|
|
+ */
|
|
|
+public class ListicleHtmlViewHolder extends ListicleImageViewHolder {
|
|
|
+
|
|
|
+ private WebView webView;
|
|
|
+ private VideoWebChromeClient webChromeClient;
|
|
|
+
|
|
|
+ public ListicleHtmlViewHolder(View itemView, Activity activity) {
|
|
|
+ super(itemView, activity);
|
|
|
+
|
|
|
+ webView = itemView.findViewById(R.id.web_view);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void bind(ContentsDetailImageBean bean, IEventListener listener) {
|
|
|
+ this.bean = bean;
|
|
|
+ this.listener = listener;
|
|
|
+
|
|
|
+ String url = bean.getUtilityUrl();
|
|
|
+ if (null != webView && StringUtil.isFull(url)) {
|
|
|
+ webView.setWebViewClient(new WebViewClient() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onPageStarted(WebView view, String url, Bitmap favicon) {
|
|
|
+ super.onPageStarted(view, url, favicon);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
|
|
+ Log.d("APP# ContentsHtmlHolder | shouldOverrideUrlLoading", "| " + url);
|
|
|
+ view.loadUrl(url);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
|
|
|
+ Log.w("APP# ContentsHtmlHolder | onReceivedSslError", "|" + "message: " + error.toString());
|
|
|
+ handler.proceed();
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+ webChromeClient = new VideoWebChromeClient(activity) {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onShowCustomView(View view, CustomViewCallback callback) {
|
|
|
+ super.onShowCustomView(view, callback);
|
|
|
+ webView.setVisibility(View.GONE);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onHideCustomView() {
|
|
|
+ super.onHideCustomView();
|
|
|
+ webView.setVisibility(View.VISIBLE);
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ webView.setWebChromeClient(webChromeClient);
|
|
|
+
|
|
|
+ init(webView);
|
|
|
+
|
|
|
+ webView.loadUrl(url);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @JavascriptInterface
|
|
|
+ public void sendMessage(String json) {
|
|
|
+ try {
|
|
|
+ HtmlBean bean = new Gson().fromJson(json, HtmlBean.class);
|
|
|
+ if (null != bean) {
|
|
|
+ listener.onEvent(new Event.Builder(Event.CLICK_HTML).json(json).build());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void init(WebView webView) {
|
|
|
+ WebSettings settings = webView.getSettings();
|
|
|
+ // Javascript 사용하기
|
|
|
+ settings.setJavaScriptEnabled(true);
|
|
|
+ // WebView 내장 줌 사용여부
|
|
|
+ settings.setBuiltInZoomControls(false);
|
|
|
+ // 화면에 맞게 WebView 사이즈를 정의
|
|
|
+ settings.setLoadWithOverviewMode(true);
|
|
|
+ // ViewPort meta tag를 활성화 여부
|
|
|
+ settings.setUseWideViewPort(true);
|
|
|
+ // 줌 컨트롤 사용 여부
|
|
|
+ settings.setDisplayZoomControls(false);
|
|
|
+ // 사용자 제스처를 통한 줌 기능 활성화 여부
|
|
|
+ settings.setSupportZoom(false);
|
|
|
+ // TextEncoding 이름 정의
|
|
|
+ settings.setDefaultTextEncodingName("UTF-8");
|
|
|
+
|
|
|
+ // Setting Local Storage
|
|
|
+ settings.setDatabaseEnabled(true);
|
|
|
+ settings.setDomStorageEnabled(true);
|
|
|
+
|
|
|
+ // 캐쉬 사용 방법을 정의
|
|
|
+ settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void attach() {
|
|
|
+ draw(webView);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void detach() {
|
|
|
+ // nothing
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean dispatchBackPressed() {
|
|
|
+ // 풀 스크린 닫기
|
|
|
+ if (null != webChromeClient && webChromeClient.isShowFullScreenVideo()) {
|
|
|
+ webView.goBack();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|