package com.cjj.nices.fragment;
import java.util.ArrayList;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import com.cjj.callback.ReLoadCallbackListener;
import com.cjj.loading.LoadingCjjLayout;
import com.cjj.nices.activity.R;
import com.cjj.nices.constant.Constants;
import com.cjj.nices.dao.UserDao;
import com.cjj.nices.model.NicesDetailModel;
import com.cjj.nices.util.AssetsUtils;
import com.cjj.volley.VolleyError;
import com.cjj.volley.callback.CallBackDataListener;
import com.cjj.volley.me.CjjVolley;
import com.cjj.volley.utils.LogUtil;
import de.keyboardsurfer.android.widget.crouton.Configuration;
import de.keyboardsurfer.android.widget.crouton.Crouton;
import de.keyboardsurfer.android.widget.crouton.Style;
/**
* 新闻详情类
* @author cjj
*
*/
@SuppressLint("NewApi") public class DetailFragment extends Fragment implements ReLoadCallbackListener , OnRefreshListener{
private WebView mWebView;
private long mNewsId = 0;
private LoadingCjjLayout loadingCjjLayout;
private SwipeRefreshLayout mSwipeLayout;
private boolean isRefresh = false;
private ArrayList<String> mDetailImageList = new ArrayList<String>();
public static DetailFragment newInstance(long id) {
DetailFragment fragment = new DetailFragment();
Bundle args = new Bundle();
args.putLong("id", id);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
if (savedInstanceState == null) {
Bundle bundle = getArguments();
mNewsId = bundle != null ? bundle.getLong("id") : 0;
} else {
mNewsId = savedInstanceState.getLong(Constants.ID);
}
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_detail, null);
loadingCjjLayout = new LoadingCjjLayout(getActivity(), v);
loadingCjjLayout.setReLoadCallbackListener(this);
return loadingCjjLayout;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
mWebView = (WebView) view.findViewById(R.id.webview);
mSwipeLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_container);
mSwipeLayout.setOnRefreshListener(this);
mSwipeLayout.setColorSchemeResources(android.R.color.holo_red_light,
android.R.color.holo_green_light, android.R.color.holo_orange_light, android.R.color.holo_blue_bright
);
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
loadingCjjLayout.show_LoadingView();
setWebView(mWebView);
mWebView.setWebViewClient(mWebViewClient);
LogUtil.LogMsg_I("id="+mNewsId);
getDetaiDatabyId(mNewsId);
super.onActivityCreated(savedInstanceState);
}
private void getDetaiDatabyId(long mNewsId) {
UserDao.getInstance().getDetaiDatabyIdFromNet(mNewsId,new CallBackDataListener() {
@Override
public void error(VolleyError error) {
if(isRefresh)
{
isRefresh = false;
mSwipeLayout.setRefreshing(false);
showCrouton("刷新失败", Style.ALERT, Configuration.DEFAULT);
}else
{
toastMsg("网络错误");
loadingCjjLayout.show_FailView();
}
}
@Override
public void callBack(Object data) {
if(data instanceof NicesDetailModel)
{
if(isRefresh)
{
mSwipeLayout.setRefreshing(false);
showCrouton("刷新成功", Style.TRANSPARENT, Configuration.DEFAULT);
isRefresh = false;
}
loadingCjjLayout.show_ContentView();
NicesDetailModel model = (NicesDetailModel) data;
showWebView(model);
}
}
});
}
protected void showWebView(NicesDetailModel model) {
String html = AssetsUtils.loadText(getActivity(), "www/template.html");
html = html.replace("{content}", model.body);
String headerDef = model.image;
StringBuilder sb = new StringBuilder();
sb.append("<div class=\"img-wrap\">")
.append("<h1 class=\"headline-title\">")
.append(model.title).append("</h1>")
.append("<span class=\"img-source\">")
.append(model.image_source).append("</span>")
.append("<img src=\"").append(headerDef)
.append("\" alt=\"\">")
.append("<div class=\"img-mask\"></div>");
html = html.replace("<div class=\"img-place-holder\">", sb.toString());
if (Build.VERSION.SDK_INT >= 11) {
mWebView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
}
mWebView.loadDataWithBaseURL(null, html, "text/html", "UTF-8", null);
}
private void setWebView(WebView webView) {
webView.addJavascriptInterface(new JavaScriptObject(getActivity()), "injectedObject");
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
//设置加载进来的页面自适应手机屏幕
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.setVerticalScrollBarEnabled(false);
webView.setHorizontalScrollBarEnabled(false);
// 支持通过js打开新的窗口
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.setWebChromeClient(new WebChromeClient()
{
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show();
result.cancel();
return super.onJsAlert(view, url, message, result);
}
@Override
public boolean onJsConfirm(WebView view, String url,
String message, JsResult result) {
return super.onJsConfirm(view, url, message, result);
}
}) ;
}
@Override
public void onDestroyView() {
CjjVolley.cancelAll(Constants.TAG_REQUEST_GSON_NEWS_DETAIL);
super.onDestroyView();
}
public static class JavaScriptObject
{
private Activity mInstance;
public JavaScriptObject(Activity instance)
{
mInstance = instance;
}
public void openImage(String url)
{
Toast.makeText(mInstance, "open image",1).show();
}
}
private WebViewClient mWebViewClient = new WebViewClient()
{
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
Intent intent = new Intent("android.intent.action.VIEW", Uri.parse(url));
startActivity(intent);
return true;
};
public void onPageFinished(WebView view, String url)
{
LogUtil.LogMsg_I("onPageFinished : " + url);
};
};
private void toastMsg(String str)
{
Toast.makeText(getActivity(), str, Toast.LENGTH_SHORT).show();
}
private void showCrouton(String croutonText, Style croutonStyle,
Configuration configuration) {
Crouton.makeText(getActivity(), croutonText, croutonStyle).show();
}
@Override
public void onReLoadCallback() {
loadingCjjLayout.show_LoadingView();
getDetaiDatabyId(mNewsId);
}
@Override
public void onRefresh() {
isRefresh = true;
getDetaiDatabyId(mNewsId);
}
}