package com.anthony.app.module.zhihu;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.widget.NestedScrollView;
import android.support.v7.widget.Toolbar;
import android.transition.Transition;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.anthony.app.R;
import com.anthony.app.dagger.DaggerActivity;
import com.anthony.library.data.net.HttpSubscriber;
import com.anthony.library.utils.HtmlUtil;
import com.anthony.library.utils.NetworkUtil;
import com.anthony.library.utils.SettingUtil;
import com.bumptech.glide.Glide;
import com.tencent.smtt.sdk.WebSettings;
import com.tencent.smtt.sdk.WebView;
import com.tencent.smtt.sdk.WebViewClient;
import butterknife.BindView;
/**
* Created by Anthony on 2016/12/2.
* Class Note:
*
*/
public class ZhihuDailyDetailActivity extends DaggerActivity {
public static final String ARG_DAILY_ID = "arg_daily_id";
private static final String TRANSLATE_VIEW = "translate_view";
@BindView(R.id.detail_bar_image)
ImageView detailBarImage;
@BindView(R.id.detail_bar_copyright)
TextView detailBarCopyright;
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.collapsing_toolbar)
CollapsingToolbarLayout collapsingToolbar;
@BindView(R.id.app_bar)
AppBarLayout appBar;
@BindView(R.id.wv_detail_content)
WebView wvDetailContent;
@BindView(R.id.nsv_scroller)
NestedScrollView nsvScroller;
@BindView(R.id.fab)
FloatingActionButton fab;
boolean isTransitionEnd = false;
boolean isImageShow = false;
String imgUrl;
@Override
protected void initViewsAndEvents(Bundle savedInstanceState) {
setToolBar(toolbar, "");
WebSettings settings = wvDetailContent.getSettings();
if (SettingUtil.getNoImageState(this)) {
settings.setBlockNetworkImage(true);
}
if (SettingUtil.getNoImageState(this)) {
settings.setAppCacheEnabled(true);
settings.setDomStorageEnabled(true);
settings.setDatabaseEnabled(true);
if (NetworkUtil.isNetworkConnected(mContext)) {
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) {
}
});
loadDailyData();
(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;
Glide.with(mContext).load(imgUrl).crossFade().into(detailBarImage);
}
}
@Override
public void onTransitionCancel(Transition transition) {
}
@Override
public void onTransitionPause(Transition transition) {
}
@Override
public void onTransitionResume(Transition transition) {
}
});
}
private void loadDailyData() {
getDataRepository()
.getZhihuDetail(getIntent().getIntExtra(ARG_DAILY_ID, -1))
.subscribe(new HttpSubscriber<ZhihuDailyDetailBean>() {
@Override
public void onNext(ZhihuDailyDetailBean zhihuDetailBean) {
onDataReceived(zhihuDetailBean);
}
@Override
public void onError(Throwable e) {
super.onError(e);
showToast("加载失败");
}
});
}
private void onDataReceived(ZhihuDailyDetailBean info) {
imgUrl = info.getImage();
if (!isImageShow && isTransitionEnd) {
Glide.with(mContext).load(info.getImage()).crossFade().into(detailBarImage);
}
collapsingToolbar.setTitle(info.getTitle());
detailBarCopyright.setText(info.getImage_source());
String htmlData = HtmlUtil.createHtmlData(info.getBody(), info.getCss(), info.getJs());
wvDetailContent.loadData(htmlData, HtmlUtil.MIME_TYPE, HtmlUtil.ENCODING);
// showContent();
}
@Override
protected int getContentViewID() {
return R.layout.prj_daily_details;
}
public static void start(Context context, View view, int id) {
Intent starter = new Intent(context, ZhihuDailyDetailActivity.class);
starter.putExtra(ARG_DAILY_ID, id);
ActivityCompat.startActivity((Activity) context, starter, ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) context, view, TRANSLATE_VIEW).toBundle());
}
}