package jp.gr.procon.proconapp.ui.fragment; import android.app.Activity; import android.graphics.Bitmap; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; import android.webkit.WebViewClient; import jp.gr.procon.proconapp.R; public class WebFragment extends BaseFragment { private static final String ARG_URL = "arg_url"; private static final String ARG_DATA = "arg_data"; private static final String MINE_TYPE_TEXT_PLAIN = "text/html"; private static final String ENCODING_UTF8 = "utf8"; public interface OnLoadUrlListener { boolean onLoadUrl(String url); } private WebView mWebView; private String mUrlString; private String mDataString; private OnLoadUrlListener mOnLoadUrlListener; public static WebFragment newInstance(String url) { return newInstance(url, null); } public static WebFragment newInstanceWithData(String data) { return newInstance(null, data); } /** * @param url loadUrlで開くページurl * @param data loadDataWithBaseUrlで表示するhtmlデータ * @return WebFragment */ private static WebFragment newInstance(String url, String data) { WebFragment fragment = new WebFragment(); Bundle args = new Bundle(); args.putString(ARG_URL, url); args.putString(ARG_DATA, data); fragment.setArguments(args); return fragment; } public WebFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mUrlString = getArguments().getString(ARG_URL); mDataString = getArguments().getString(ARG_DATA); } } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_webview, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mWebView = (WebView) view.findViewById(R.id.web_view); final View loadingView = view.findViewById(R.id.progress); mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (mOnLoadUrlListener != null) { if (mOnLoadUrlListener.onLoadUrl(url)) { return true; } } return super.shouldOverrideUrlLoading(view, url); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); loadingView.setVisibility(View.VISIBLE); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); loadingView.setVisibility(View.GONE); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); loadingView.setVisibility(View.GONE); } }); if (!TextUtils.isEmpty(mUrlString)) { mWebView.loadUrl(mUrlString); } else if (!TextUtils.isEmpty(mDataString)) { mWebView.loadDataWithBaseURL(null, mDataString, MINE_TYPE_TEXT_PLAIN, ENCODING_UTF8, null); } } @Override public void onAttach(Activity activity) { super.onAttach(activity); Fragment parent = getParentFragment(); if (parent != null && parent instanceof OnLoadUrlListener) { mOnLoadUrlListener = (OnLoadUrlListener) parent; } else if (activity instanceof OnLoadUrlListener) { mOnLoadUrlListener = (OnLoadUrlListener) activity; } } @Override public void onDetach() { super.onDetach(); mOnLoadUrlListener = null; } @Override public void onDestroy() { if (mWebView != null) { mWebView.stopLoading(); mWebView.setWebViewClient(null); mWebView.destroy(); mWebView = null; } super.onDestroy(); } }