package ren.solid.library.activity;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.AppCompatImageView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.jakewharton.rxbinding2.view.RxView;
import com.tbruyelle.rxpermissions2.RxPermissions;
import java.io.File;
import java.util.ArrayList;
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Consumer;
import ren.solid.library.R;
import ren.solid.library.SolidApplication;
import ren.solid.library.activity.base.BaseActivity;
import ren.solid.library.http.ObservableProvider;
import ren.solid.library.http.subscriber.DownLoadSubscribe;
import ren.solid.library.imageloader.ImageLoader;
import ren.solid.library.utils.FileUtils;
import ren.solid.library.utils.SLog;
import ren.solid.library.utils.SnackBarUtils;
import ren.solid.library.utils.SystemShareUtils;
import uk.co.senab.photoview.PhotoView;
/**
* Created by _SOLID
* Date:2016/4/22
* Time:14:28
* <p/>
* view full picture
*/
public class ViewPicActivity extends BaseActivity {
public final static String IMG_URLS = "ImageUrls";
public final static String IMG_INDEX = "ImageIndex";
private ViewPager mViewPager;
private TextView mTvIndex;
private AppCompatImageView mIvDownload;
private ArrayList<String> mUrlList;
private int mCurrentIndex = 0;
private String mSavePath;
public static void start(Context context, View view, ArrayList<String> urls, int position) {
Intent intent = new Intent(context, ViewPicActivity.class);
intent.putStringArrayListExtra(IMG_URLS, urls);
intent.putExtra(IMG_INDEX, position);
ActivityOptionsCompat compat = ActivityOptionsCompat.makeScaleUpAnimation(view,
view.getWidth() / 2, view.getHeight() / 2, 0, 0);
ActivityCompat.startActivity(context, intent,
compat.toBundle());
}
public static void start(Context context, View view, String url) {
ArrayList<String> urls = new ArrayList<>();
urls.add(url);
start(context, view, urls, 0);
}
@Override
protected void init(Bundle savedInstanceState) {
super.init(savedInstanceState);
mUrlList = getIntent().getExtras().getStringArrayList(IMG_URLS);
mCurrentIndex = getIntent().getExtras().getInt(IMG_INDEX);
}
@Override
protected int setLayoutResourceID() {
return R.layout.activity_view_pic;
}
@Override
protected void setUpView() {
mViewPager = $(R.id.viewpager);
mTvIndex = $(R.id.tv_index);
mIvDownload = $(R.id.iv_download);
mTvIndex.setText((mCurrentIndex + 1) + "/" + mUrlList.size());
mIvDownload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
downloadPicture(0);
}
});
RxPermissions rxPermissions = new RxPermissions(this);
RxView.clicks(mIvDownload)
.compose(rxPermissions.ensureEach(Manifest.permission.WRITE_EXTERNAL_STORAGE))
.subscribe(new Consumer<com.tbruyelle.rxpermissions2.Permission>() {
@Override
public void accept(@NonNull com.tbruyelle.rxpermissions2.Permission permission) throws Exception {
if (permission.granted) {
downloadPicture(0);
} else if (permission.shouldShowRequestPermissionRationale) {
} else {
SnackBarUtils.makeShort(mViewPager,getString(R.string.no_permisstion_write))
.info();
}
}
});
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
mCurrentIndex = position;
mTvIndex.setText((mCurrentIndex + 1) + "/" + mUrlList.size());
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
@Override
protected void setUpData() {
mViewPager.setAdapter(new MyViewPager(this));
mViewPager.setCurrentItem(mCurrentIndex);
}
class MyViewPager extends PagerAdapter {
Context context;
public MyViewPager(Context context) {
this.context = context;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
PhotoView photoView = new PhotoView(context);
ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
photoView.setLayoutParams(layoutParams);
//setUpPhotoViewAttacher(photoView);
ImageLoader.displayImage(photoView, mUrlList.get(position));
container.addView(photoView);
return photoView;
}
// private void setUpPhotoViewAttacher(PhotoView photoView) {
// PhotoViewAttacher photoViewAttacher = new PhotoViewAttacher(photoView);
// photoViewAttacher.setOnViewTapListener(new PhotoViewAttacher.OnViewTapListener() {
// @Override
// public void onViewTap(View view, float v, float v1) {
// ViewPicActivity activity = (ViewPicActivity) getMContext();
// activity.hideOrShowToolbar();
// }
// });
// }
@Override
public int getCount() {
return mUrlList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
/**
* download image
*
* @param action 0:save 1:share
*/
public void downloadPicture(final int action) {
mSavePath = FileUtils.getSaveImagePath(this) + File.separator + FileUtils.getFileName(mUrlList.get(0));
SLog.i(this, mSavePath);
ObservableProvider.getDefault()
.download(mUrlList.get(0)
, new DownLoadSubscribe(
FileUtils.getSaveImagePath(getApplication()),
FileUtils.getFileName(mUrlList.get(0))) {
@Override
public void onCompleted(File file) {
if (action == 0) {
SnackBarUtils.makeLong(mViewPager, "已保存至相册").info();
MediaScannerConnection.scanFile(SolidApplication.getInstance(), new String[]{
mSavePath},
null, null);
} else {
SystemShareUtils.shareImage(ViewPicActivity.this, Uri.parse(file.getAbsolutePath()));
}
}
@Override
protected void onFailed(Throwable e) {
if (action == 0)
SnackBarUtils.makeLong(mViewPager, "保存失败:" + e).danger();
}
@Override
public void onProgress(double progress, long downloadByte, long totalByte) {
// SLog.i("PicDownload", "totalByte:" + totalByte + " downloadedByte:" + downloadByte + " progress:" + progress);
}
});
}
@Override
public void onBackPressed() {
ActivityCompat.finishAfterTransition(this);
overridePendingTransition(0, R.anim.activity_close);
}
}