package com.codeest.geeknews.ui.zhihu.activity;
import android.content.Intent;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.widget.NestedScrollView;
import android.support.v7.widget.Toolbar;
import android.transition.Transition;
import android.view.KeyEvent;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.codeest.geeknews.R;
import com.codeest.geeknews.app.Constants;
import com.codeest.geeknews.base.RootActivity;
import com.codeest.geeknews.base.contract.zhihu.ZhihuDetailContract;
import com.codeest.geeknews.component.ImageLoader;
import com.codeest.geeknews.model.bean.DetailExtraBean;
import com.codeest.geeknews.model.bean.ZhihuDetailBean;
import com.codeest.geeknews.presenter.zhihu.ZhihuDetailPresenter;
import com.codeest.geeknews.util.HtmlUtil;
import com.codeest.geeknews.util.ShareUtil;
import com.codeest.geeknews.util.SystemUtil;
import com.tencent.smtt.sdk.WebSettings;
import com.tencent.smtt.sdk.WebView;
import com.tencent.smtt.sdk.WebViewClient;
import net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout;
import butterknife.BindView;
import butterknife.OnClick;
/**
* Created by codeest on 16/8/13.
*/
public class ZhihuDetailActivity extends RootActivity<ZhihuDetailPresenter> implements ZhihuDetailContract.View {
@BindView(R.id.detail_bar_image)
ImageView detailBarImage;
@BindView(R.id.detail_bar_copyright)
TextView detailBarCopyright;
@BindView(R.id.view_toolbar)
Toolbar viewToolbar;
@BindView(R.id.clp_toolbar)
CollapsingToolbarLayout clpToolbar;
@BindView(R.id.view_main)
WebView wvDetailContent;
@BindView(R.id.nsv_scroller)
NestedScrollView nsvScroller;
@BindView(R.id.tv_detail_bottom_like)
TextView tvDetailBottomLike;
@BindView(R.id.tv_detail_bottom_comment)
TextView tvDetailBottomComment;
@BindView(R.id.tv_detail_bottom_share)
TextView tvDetailBottomShare;
@BindView(R.id.ll_detail_bottom)
FrameLayout llDetailBottom;
@BindView(R.id.fab_like)
FloatingActionButton fabLike;
int id = 0;
int allNum = 0;
int shortNum = 0;
int longNum = 0;
String shareUrl;
String imgUrl;
boolean isBottomShow = true;
boolean isImageShow = false;
boolean isTransitionEnd = false;
boolean isNotTransition = false;
@Override
protected void initInject() {
getActivityComponent().inject(this);
}
@Override
protected int getLayout() {
return R.layout.activity_zhihu_detail;
}
@Override
protected void initEventAndData() {
super.initEventAndData();
setToolBar(viewToolbar,"");
Intent intent = getIntent();
id = intent.getExtras().getInt(Constants.IT_ZHIHU_DETAIL_ID);
isNotTransition = intent.getBooleanExtra("isNotTransition",false);
mPresenter.queryLikeData(id);
mPresenter.getDetailData(id);
mPresenter.getExtraData(id);
stateLoading();
WebSettings settings = wvDetailContent.getSettings();
if (mPresenter.getNoImageState()) {
settings.setBlockNetworkImage(true);
}
if (mPresenter.getAutoCacheState()) {
settings.setAppCacheEnabled(true);
settings.setDomStorageEnabled(true);
settings.setDatabaseEnabled(true);
if (SystemUtil.isNetworkConnected()) {
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
} else {
settings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);
}
}
settings.setJavaScriptEnabled(true);
settings.setLoadWithOverviewMode(true);
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
settings.setSupportZoom(true);
wvDetailContent.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
nsvScroller.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if(scrollY - oldScrollY > 0 && isBottomShow) { //下移隐藏
isBottomShow = false;
llDetailBottom.animate().translationY(llDetailBottom.getHeight());
} else if(scrollY - oldScrollY < 0 && !isBottomShow){ //上移出现
isBottomShow = true;
llDetailBottom.animate().translationY(0);
}
}
});
(getWindow().getSharedElementEnterTransition()).addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(Transition transition) {
}
@Override
public void onTransitionEnd(Transition transition) {
/**
* 测试发现部分手机(如红米note2)上加载图片会变形,没有达到centerCrop效果
* 查阅资料发现Glide配合SharedElementTransition是有坑的,需要在Transition动画结束后再加载图片
* https://github.com/TWiStErRob/glide-support/blob/master/src/glide3/java/com/bumptech/glide/supportapp/github/_847_shared_transition/DetailFragment.java
*/
isTransitionEnd = true;
if (imgUrl != null) {
isImageShow = true;
ImageLoader.load(mContext, imgUrl, detailBarImage);
}
}
@Override
public void onTransitionCancel(Transition transition) {
}
@Override
public void onTransitionPause(Transition transition) {
}
@Override
public void onTransitionResume(Transition transition) {
}
});
}
@Override
public void showContent(ZhihuDetailBean zhihuDetailBean) {
stateMain();
imgUrl = zhihuDetailBean.getImage();
shareUrl = zhihuDetailBean.getShare_url();
if (isNotTransition) {
ImageLoader.load(mContext, zhihuDetailBean.getImage(), detailBarImage);
} else {
if (!isImageShow && isTransitionEnd) {
ImageLoader.load(mContext, zhihuDetailBean.getImage(), detailBarImage);
}
}
clpToolbar.setTitle(zhihuDetailBean.getTitle());
detailBarCopyright.setText(zhihuDetailBean.getImage_source());
String htmlData = HtmlUtil.createHtmlData(zhihuDetailBean.getBody(),zhihuDetailBean.getCss(),zhihuDetailBean.getJs());
wvDetailContent.loadData(htmlData, HtmlUtil.MIME_TYPE, HtmlUtil.ENCODING);
}
@Override
public void showExtraInfo(DetailExtraBean detailExtraBean) {
tvDetailBottomLike.setText(String.format("%d个赞",detailExtraBean.getPopularity()));
tvDetailBottomComment.setText(String.format("%d条评论",detailExtraBean.getComments()));
allNum = detailExtraBean.getComments();
shortNum = detailExtraBean.getShort_comments();
longNum = detailExtraBean.getLong_comments();
}
@Override
public void setLikeButtonState(boolean isLiked) {
fabLike.setSelected(isLiked);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && wvDetailContent.canGoBack()) {
wvDetailContent.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
@OnClick(R.id.tv_detail_bottom_comment)
void gotoComment() {
Intent intent = getIntent();
intent.setClass(this,CommentActivity.class);
intent.putExtra(Constants.IT_ZHIHU_COMMENT_ID, id);
intent.putExtra(Constants.IT_ZHIHU_COMMENT_ALL_NUM, allNum);
intent.putExtra(Constants.IT_ZHIHU_COMMENT_SHORT_NUM, shortNum);
intent.putExtra(Constants.IT_ZHIHU_COMMENT_LONG_NUM, longNum);
startActivity(intent);
}
@OnClick(R.id.tv_detail_bottom_share)
void shareUrl() {
ShareUtil.shareText(mContext,shareUrl,"分享一篇文章");
}
@OnClick(R.id.fab_like)
void likeArticle() {
if (fabLike.isSelected()) {
fabLike.setSelected(false);
mPresenter.deleteLikeData();
} else {
fabLike.setSelected(true);
mPresenter.insertLikeData();
}
}
@Override
public void onBackPressedSupport() {
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
pop();
} else {
finishAfterTransition();
}
}
}