package com.jaydenxiao.androidfire.ui.news.activity; import android.app.Activity; import android.app.ActivityOptions; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Build; 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.content.ContextCompat; import android.support.v7.widget.Toolbar; import android.text.Html; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import com.bumptech.glide.Glide; import com.jaydenxiao.androidfire.R; import com.jaydenxiao.androidfire.app.AppConstant; import com.jaydenxiao.androidfire.bean.NewsDetail; import com.jaydenxiao.androidfire.ui.news.contract.NewsDetailContract; import com.jaydenxiao.androidfire.ui.news.model.NewsDetailModel; import com.jaydenxiao.androidfire.ui.news.presenter.NewsDetailPresenter; import com.jaydenxiao.androidfire.widget.URLImageGetter; import com.jaydenxiao.common.base.BaseActivity; import com.jaydenxiao.common.baserx.RxSchedulers; import com.jaydenxiao.common.commonutils.TimeUtil; import java.util.List; import java.util.concurrent.TimeUnit; import butterknife.Bind; import rx.Observable; import rx.Subscriber; /** * des:普通新闻详情 * Created by xsf * on 2016.09.16:57 */ public class NewsDetailActivity extends BaseActivity<NewsDetailPresenter, NewsDetailModel> implements NewsDetailContract.View { @Bind(R.id.news_detail_photo_iv) ImageView newsDetailPhotoIv; @Bind(R.id.mask_view) View maskView; @Bind(R.id.toolbar) Toolbar toolbar; @Bind(R.id.toolbar_layout) CollapsingToolbarLayout toolbarLayout; @Bind(R.id.app_bar) AppBarLayout appBar; @Bind(R.id.news_detail_from_tv) TextView newsDetailFromTv; @Bind(R.id.news_detail_body_tv) TextView newsDetailBodyTv; @Bind(R.id.progress_bar) ProgressBar progressBar; @Bind(R.id.fab) FloatingActionButton fab; private String postId; private URLImageGetter mUrlImageGetter; private String mNewsTitle; private String mShareLink; /** * 入口 * * @param mContext * @param postId */ public static void startAction(Context mContext, View view,String postId, String imgUrl) { Intent intent = new Intent(mContext, NewsDetailActivity.class); intent.putExtra(AppConstant.NEWS_POST_ID, postId); intent.putExtra(AppConstant.NEWS_IMG_RES, imgUrl); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { ActivityOptions options = ActivityOptions .makeSceneTransitionAnimation((Activity) mContext,view, AppConstant.TRANSITION_ANIMATION_NEWS_PHOTOS); mContext.startActivity(intent, options.toBundle()); } else { //让新的Activity从一个小的范围扩大到全屏 ActivityOptionsCompat options = ActivityOptionsCompat .makeScaleUpAnimation(view, view.getWidth() / 2, view.getHeight() / 2, 0, 0); ActivityCompat.startActivity((Activity) mContext, intent, options.toBundle()); } } @Override public int getLayoutId() { return R.layout.act_news_detail; } @Override public void initPresenter() { mPresenter.setVM(this, mModel); } @Override public void initView() { SetTranslanteBar(); postId = getIntent().getStringExtra(AppConstant.NEWS_POST_ID); mPresenter.getOneNewsDataRequest(postId); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { finishAfterTransition(); } else { finish(); } } }); toolbar.inflateMenu(R.menu.news_detail); toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.action_web_view: NewsBrowserActivity.startAction(NewsDetailActivity.this, mShareLink, mNewsTitle); break; case R.id.action_browser: Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); if (canBrowse(intent)) { Uri uri = Uri.parse(mShareLink); intent.setData(uri); startActivity(intent); } break; } return true; } }); //分享 fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mShareLink == null) { mShareLink = ""; } Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.share)); intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.share_contents, mNewsTitle, mShareLink)); startActivity(Intent.createChooser(intent, getTitle())); } }); } @Override public void returnOneNewsData(NewsDetail newsDetail) { mShareLink = newsDetail.getShareLink(); mNewsTitle = newsDetail.getTitle(); String newsSource = newsDetail.getSource(); String newsTime = TimeUtil.formatDate(newsDetail.getPtime()); String newsBody = newsDetail.getBody(); String NewsImgSrc = getImgSrcs(newsDetail); setToolBarLayout(mNewsTitle); //mNewsDetailTitleTv.setText(newsTitle); newsDetailFromTv.setText(getString(R.string.news_from, newsSource, newsTime)); setNewsDetailPhotoIv(NewsImgSrc); setNewsDetailBodyTv(newsDetail, newsBody); } private void setToolBarLayout(String newsTitle) { toolbarLayout.setTitle(newsTitle); toolbarLayout.setExpandedTitleColor(ContextCompat.getColor(this, R.color.white)); toolbarLayout.setCollapsedTitleTextColor(ContextCompat.getColor(this, R.color.primary_text_white)); } private void setNewsDetailPhotoIv(String imgSrc) { Glide.with(this).load(imgSrc) .fitCenter() .error(com.jaydenxiao.common.R.drawable.ic_empty_picture) .crossFade().into(newsDetailPhotoIv); } private void setNewsDetailBodyTv(final NewsDetail newsDetail, final String newsBody) { mRxManager.add(Observable.timer(500, TimeUnit.MILLISECONDS) .compose(RxSchedulers.<Long>io_main()) .subscribe(new Subscriber<Long>() { @Override public void onCompleted() { progressBar.setVisibility(View.GONE); fab.setVisibility(View.VISIBLE); } @Override public void onError(Throwable e) { progressBar.setVisibility(View.GONE); } @Override public void onNext(Long aLong) { setBody(newsDetail, newsBody); } })); } private void setBody(NewsDetail newsDetail, String newsBody) { int imgTotal = newsDetail.getImg().size(); if (isShowBody(newsBody, imgTotal)) { // mNewsDetailBodyTv.setMovementMethod(LinkMovementMethod.getInstance());//加这句才能让里面的超链接生效,实测经常卡机崩溃 mUrlImageGetter = new URLImageGetter(newsDetailBodyTv, newsBody, imgTotal); newsDetailBodyTv.setText(Html.fromHtml(newsBody, mUrlImageGetter, null)); } else { newsDetailBodyTv.setText(Html.fromHtml(newsBody)); } } private boolean isShowBody(String newsBody, int imgTotal) { return imgTotal >= 2 && newsBody != null; } private String getImgSrcs(NewsDetail newsDetail) { List<NewsDetail.ImgBean> imgSrcs = newsDetail.getImg(); String imgSrc; if (imgSrcs != null && imgSrcs.size() > 0) { imgSrc = imgSrcs.get(0).getSrc(); } else { imgSrc = getIntent().getStringExtra(AppConstant.NEWS_IMG_RES); } return imgSrc; } private boolean canBrowse(Intent intent) { return intent.resolveActivity(getPackageManager()) != null && mShareLink != null; } @Override public void showLoading(String title) { } @Override public void stopLoading() { } @Override public void showErrorTip(String msg) { } }