package com.gzsll.hupu.ui.content;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import com.alibaba.fastjson.JSON;
import com.gzsll.hupu.Constants;
import com.gzsll.hupu.R;
import com.gzsll.hupu.bean.ImagePreview;
import com.gzsll.hupu.components.jockeyjs.JockeyHandler;
import com.gzsll.hupu.ui.BaseFragment;
import com.gzsll.hupu.ui.browser.BrowserActivity;
import com.gzsll.hupu.ui.imagepreview.ImagePreviewActivity;
import com.gzsll.hupu.ui.login.LoginActivity;
import com.gzsll.hupu.ui.post.PostActivity;
import com.gzsll.hupu.ui.report.ReportActivity;
import com.gzsll.hupu.ui.thread.list.ThreadListActivity;
import com.gzsll.hupu.ui.userprofile.UserProfileActivity;
import com.gzsll.hupu.util.SettingPrefUtil;
import com.gzsll.hupu.widget.H5Callback;
import com.gzsll.hupu.widget.JockeyJsWebView;
import java.util.Map;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by sll on 2016/3/9.
*/
public class ContentFragment extends BaseFragment
implements ContentPagerContract.View, H5Callback, JockeyJsWebView.OnScrollChangedCallback {
public static ContentFragment newInstance(String fid, String tid, String pid, int page) {
ContentFragment mFragment = new ContentFragment();
Bundle bundle = new Bundle();
bundle.putString("fid", fid);
bundle.putString("tid", tid);
bundle.putString("pid", pid);
bundle.putInt("page", page);
mFragment.setArguments(bundle);
return mFragment;
}
@BindView(R.id.webView)
JockeyJsWebView webView;
@Inject
ContentPagerPresenter mContentPresenter;
private String tid;
private String fid;
private String pid;
private int page;
@Override
public void initInjector() {
getComponent(ContentComponent.class).inject(this);
}
@Override
public int initContentView() {
return R.layout.fragment_content;
}
@Override
public void getBundle(Bundle bundle) {
tid = bundle.getString("tid");
fid = bundle.getString("fid");
pid = bundle.getString("pid");
page = bundle.getInt("page");
}
@Override
public void initUI(View view) {
ButterKnife.bind(this, view);
mContentPresenter.attachView(this);
webView.setCallback(this);
webView.initJockey();
webView.setOnScrollChangedCallback(this);
webView.addJavascriptInterface(mContentPresenter.getJavaScriptInterface(), "HuPuBridge");
}
@Override
public void initData() {
webView.loadUrl(SettingPrefUtil.getNightModel(getActivity())
? "file:///android_asset/hupu_thread_night.html"
: "file:///android_asset/hupu_thread.html");
}
@Override
public void onReloadClicked() {
mContentPresenter.onReload();
}
@Override
public void onScroll(int dx, int dy) {
if (Math.abs(dy) > 4) {
ContentActivity activity = ((ContentActivity) getActivity());
if (activity != null) {
activity.setFloatingMenuVisibility(dy < 0);
}
}
}
@Override
public void showLoading() {
showProgress(true);
}
@Override
public void hideLoading() {
showContent(true);
}
@Override
public void onError() {
setEmptyText("数据加载失败");
showError(true);
}
@Override
public void sendMessageToJS(String handlerName, Object object) {
webView.sendMessageToJS(handlerName, object);
}
@Override
public void loadUrl(String url) {
webView.loadUrl(url);
}
@Override
public void showReplyUi(String fid, String tid, String pid, String title) {
PostActivity.startActivity(getActivity(), Constants.TYPE_REPLY, fid, tid, pid, title);
}
@Override
public void showReportUi(String tid, String pid) {
ReportActivity.startActivity(getActivity(), tid, pid);
}
@Override
public void showBrowserUi(String url) {
BrowserActivity.startActivity(getActivity(), url);
}
@Override
public void showContentUi(String tid, String pid, int page) {
ContentActivity.startActivity(getActivity(), "", fid, pid, page);
}
@Override
public void showThreadListUi(String fid) {
ThreadListActivity.startActivity(getActivity(), fid);
}
@Override
public void showUserProfileUi(String uid) {
UserProfileActivity.startActivity(getActivity(), uid);
}
@Override
public void showLoginUi() {
LoginActivity.startActivity(getActivity());
}
@Override
public void onClose() {
getActivity().finish();
}
@Override
public void doPerform(Map<Object, Object> map) {
}
@Override
public void onPageFinished(WebView webView, String str) {
mContentPresenter.onThreadInfoReceive(tid, fid, pid, page);
}
@Override
public void onPageStarted(WebView webView, String str, Bitmap bitmap) {
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
}
@Override
public void setJockeyEvents() {
webView.onJSEvent("showImg", new JockeyHandler() {
@Override
protected void doPerform(Map<Object, Object> payload) {
ImagePreview preview = JSON.parseObject(JSON.toJSONString(payload), ImagePreview.class);
ImagePreviewActivity.startActivity(getActivity(), preview.imgs.get(preview.index),
preview.imgs);
}
});
webView.onJSEvent("showUrl", new JockeyHandler() {
@Override
protected void doPerform(Map<Object, Object> payload) {
mContentPresenter.handlerUrl(((String) payload.get("url")));
}
});
webView.onJSEvent("showUser", new JockeyHandler() {
@Override
protected void doPerform(Map<Object, Object> payload) {
UserProfileActivity.startActivity(getActivity(), ((String) payload.get("uid")));
}
});
webView.onJSEvent("showMenu", new JockeyHandler() {
@Override
protected void doPerform(Map<Object, Object> payload) {
int area = Integer.valueOf((String) payload.get("area"));
int index = Integer.valueOf((String) payload.get("index"));
String type = (String) payload.get("type");
switch (type) {
case "light":
mContentPresenter.addLight(area, index);
break;
case "rulight":
mContentPresenter.addRuLight(area, index);
break;
case "reply":
mContentPresenter.onReply(area, index);
break;
case "report":
mContentPresenter.onReport(area, index);
break;
}
}
});
}
@Override
public void openBrowser(String url) {
mContentPresenter.handlerUrl(url);
}
@Override
public void onDestroy() {
super.onDestroy();
mContentPresenter.detachView();
if (webView != null) {
webView.destroy();
}
}
}