package com.yuyh.sprintnba.ui;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Looper;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.flyco.dialog.listener.OnOperItemClickL;
import com.flyco.dialog.widget.ActionSheetDialog;
import com.yuyh.library.utils.DimenUtils;
import com.yuyh.library.utils.toast.ToastUtils;
import com.yuyh.library.view.common.Info;
import com.yuyh.sprintnba.R;
import com.yuyh.sprintnba.base.BaseSwipeBackCompatActivity;
import com.yuyh.sprintnba.http.bean.news.NewsDetail;
import com.yuyh.sprintnba.ui.presenter.NewsDetailPresenter;
import com.yuyh.sprintnba.ui.presenter.impl.NewsDetailPresenterImpl;
import com.yuyh.sprintnba.ui.view.NewsDetailView;
import com.yuyh.sprintnba.utils.ImageUtils;
import com.yuyh.sprintnba.widget.PhotoView;
import java.util.List;
import java.util.Map;
import java.util.Set;
import butterknife.InjectView;
import butterknife.OnClick;
public class NewsDetailActivity extends BaseSwipeBackCompatActivity implements NewsDetailView {
public static final String ARTICLE_ID = "arcId";
public static final String TITLE = "title";
public static void start(Context context, String title, String arcId) {
Intent intent = new Intent(context, NewsDetailActivity.class);
intent.putExtra(NewsDetailActivity.TITLE, title);
intent.putExtra(NewsDetailActivity.ARTICLE_ID, arcId);
context.startActivity(intent);
}
@InjectView(R.id.llNewsDetail)
LinearLayout llNewsDetail;
@InjectView(R.id.tvNewsDetailTitle)
TextView tvNewsDetailTitle;
@InjectView(R.id.tvNewsDetailTime)
TextView tvNewsDetailTime;
@InjectView(R.id.ivBrowser)
PhotoView mPhotoView;
@InjectView(R.id.flParent)
View mParent;
@InjectView(R.id.bg)
View mBg;
Info mInfo;
AlphaAnimation in = new AlphaAnimation(0, 1);
AlphaAnimation out = new AlphaAnimation(1, 0);
private LayoutInflater inflate;
@Override
protected int getContentViewLayoutID() {
return R.layout.activity_news_detail;
}
@Override
protected void initViewsAndEvents() {
showLoadingDialog();
inflate = LayoutInflater.from(this);
Intent intent = getIntent();
String title = intent.getStringExtra(TITLE);
if (!TextUtils.isEmpty(title)) {
setTitle(title);
} else {
setTitle("详细新闻");
}
String arcId = intent.getStringExtra(ARTICLE_ID);
initPhotoView();
NewsDetailPresenter presenter = new NewsDetailPresenterImpl(this, this);
presenter.initialized(arcId);
}
private void initPhotoView() {
in.setDuration(300);
out.setDuration(300);
out.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
mBg.setVisibility(View.INVISIBLE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
mPhotoView.setScaleType(ImageView.ScaleType.FIT_START);
mPhotoView.enable();
mPhotoView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
showSaveDialog();
return false;
}
});
}
@OnClick(R.id.ivBrowser)
public void dismissPhotoView() {
mBg.startAnimation(out);
mPhotoView.animaTo(mInfo, new Runnable() {
@Override
public void run() {
mParent.setVisibility(View.GONE);
}
});
}
private void showSaveDialog() {
final String[] stringItems = {"保存图片"};
final ActionSheetDialog dialog = new ActionSheetDialog(mContext, stringItems, mPhotoView);
dialog.isTitleShow(false).show();
dialog.setOnOperItemClickL(new OnOperItemClickL() {
@Override
public void onOperItemClick(AdapterView<?> parent, View view, int position, long id) {
mPhotoView.setDrawingCacheEnabled(true);
final Bitmap bmp = Bitmap.createBitmap(mPhotoView.getDrawingCache());
new Thread(new Runnable() {
@Override
public void run() {
if (ImageUtils.saveImageToGallery(mContext, bmp)) {
Looper.prepare();
ToastUtils.showToast("保存图片成功");
Looper.loop();
} else {
Looper.prepare();
ToastUtils.showToast("保存图片失败");
Looper.loop();
}
}
}).start();
mPhotoView.setDrawingCacheEnabled(false);
dialog.dismiss();
}
});
}
@Override
public void onBackPressed() {
if (mParent.getVisibility() == View.VISIBLE) {
mBg.startAnimation(out);
mPhotoView.animaTo(mInfo, new Runnable() {
@Override
public void run() {
mParent.setVisibility(View.GONE);
}
});
} else {
super.onBackPressed();
}
}
@Override
public void showNewsDetail(NewsDetail newsDetail) {
tvNewsDetailTime.setText(newsDetail.time);
tvNewsDetailTitle.setText(newsDetail.title);
List<Map<String, String>> content = newsDetail.content;
for (Map<String, String> map : content) {
Set<String> set = map.keySet();
if (set.contains("img")) {
final String url = map.get("img");
if (!TextUtils.isEmpty(url)) {
PhotoView iv = (PhotoView) inflate.inflate(R.layout.imageview_news_detail, null);
llNewsDetail.addView(iv);
int screenWidth = DimenUtils.getScreenWidth();
ViewGroup.LayoutParams lp = iv.getLayoutParams();
lp.width = ViewGroup.LayoutParams.MATCH_PARENT;
lp.height = screenWidth * 2 / 3;
iv.setLayoutParams(lp);
iv.setMaxWidth(screenWidth);
iv.setMaxHeight(screenWidth);
Glide.with(NewsDetailActivity.this).load(url).diskCacheStrategy(DiskCacheStrategy.ALL).into(iv);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Glide.with(NewsDetailActivity.this).load(url).into(mPhotoView);
mInfo = ((PhotoView) v).getInfo();
mBg.startAnimation(in);
mBg.setVisibility(View.VISIBLE);
mParent.setVisibility(View.VISIBLE);
mPhotoView.animaFrom(mInfo);
}
});
}
} else {
if (!TextUtils.isEmpty(map.get("text"))) {
TextView tv = (TextView) inflate.inflate(R.layout.textview_news_detail, null);
tv.append(map.get("text"));
llNewsDetail.addView(tv);
}
}
}
hideLoadingDialog();
}
}