package com.netease.nim.uikit.common.media.picker.activity;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.netease.nim.uikit.R;
import com.netease.nim.uikit.common.activity.UI;
import com.netease.nim.uikit.common.media.picker.adapter.ImagePagerAdapterInImageSwitch;
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialog;
import com.netease.nim.uikit.common.ui.imageview.BaseZoomableImageView;
import com.netease.nim.uikit.common.util.file.AttachmentStore;
import com.netease.nim.uikit.common.util.file.FileUtil;
import com.netease.nim.uikit.common.util.media.BitmapDecoder;
import com.netease.nim.uikit.common.util.media.ImageUtil;
import com.netease.nim.uikit.common.util.storage.StorageType;
import com.netease.nim.uikit.common.util.storage.StorageUtil;
import com.netease.nim.uikit.session.constant.Extras;
import com.netease.nim.uikit.session.constant.RequestCode;
import java.io.File;
import java.util.ArrayList;
public class PreviewImageFromLocalActivity extends UI {
private boolean needShowSendOriginal = false;
private ImageButton originalImage;
private boolean isSendOriginalImage;
private TextView originalImageSizeTip;
private File imageFile;
private ArrayList<String> selectImageList;
private ArrayList<String> origImageList;
protected ViewPager imageViewPager;
private ImagePagerAdapterInImageSwitch imageViewPagerAdapter;
protected BaseZoomableImageView currentImageView;
protected int currentPostion = -1;
private int tempIndex = -1;
private View sendButton;
public static Intent initPreviewImageIntent(
ArrayList<String> thumbnailImageList,
ArrayList<String> orignialImageList,
boolean isOrignial
) {
Intent intent = new Intent();
intent.putStringArrayListExtra(Extras.EXTRA_SCALED_IMAGE_LIST, thumbnailImageList);
intent.putStringArrayListExtra(Extras.EXTRA_ORIG_IMAGE_LIST, orignialImageList);
intent.putExtra(Extras.EXTRA_IS_ORIGINAL, isOrignial);
return intent;
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nim_preview_image_from_local_activity);
originalImageSizeTip = (TextView) findViewById(R.id.picker_image_preview_orignal_image_tip);
originalImage = (ImageButton) findViewById(R.id.picker_image_preview_orignal_image);
originalImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
isSendOriginalImage = !isSendOriginalImage;
updateOriImageSizeTip(isSendOriginalImage);
}
});
needShowSendOriginal = getIntent().getBooleanExtra(Extras.EXTRA_NEED_SHOW_SEND_ORIGINAL, false);
if (needShowSendOriginal) {
originalImage.setVisibility(View.VISIBLE);
originalImageSizeTip.setVisibility(View.VISIBLE);
} else {
originalImage.setVisibility(View.INVISIBLE);
originalImageSizeTip.setVisibility(View.INVISIBLE);
}
sendButton = findViewById(R.id.buttonSend);
sendButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (isSendOriginalImage) {
sendOrigImage();
} else {
sendSelectedImage(false);
}
}
});
initViewPager();
}
private void restoreList() {
if (tempIndex != -1) {
imageViewPager.setAdapter(imageViewPagerAdapter);
setTitleIndex(tempIndex);
imageViewPager.setCurrentItem(tempIndex);
tempIndex = -1;
}
}
private void setTitleIndex(int index) {
if (selectImageList.size() <= 0) {
setTitle("");
}
else {
index++;
setTitle(index + "/" + selectImageList.size());
}
}
private void sendSelectedImage(boolean isOrig) {
Intent intent = initPreviewImageIntent(selectImageList, origImageList, isOrig);
intent.setClass(PreviewImageFromLocalActivity.this, getIntent().getClass());
setResult(RESULT_OK, intent);
PreviewImageFromLocalActivity.this.finish();
}
@SuppressLint("NewApi")
private void sendOrigImage() {
final UI activity = PreviewImageFromLocalActivity.this;
final EasyAlertDialog allAlertDialog = new EasyAlertDialog(activity);
allAlertDialog.setTitle(getString(R.string.picker_image_preview_original));
long fileSize = 0;
for (String filepath : origImageList) {
fileSize += AttachmentStore.getFileLength(filepath);
}
if (origImageList.size() == 1) {
allAlertDialog.setMessage(getString(R.string.image_compressed_size, FileUtil.formatFileSize(fileSize))
+ getString(R.string.is_send_image));
} else {
allAlertDialog.setMessage(getString(R.string.multi_image_compressed_size,
FileUtil.formatFileSize(fileSize))
+ getString(R.string.is_send_multi_image));
}
allAlertDialog.addPositiveButton(getString(R.string.ok), EasyAlertDialog.NO_TEXT_COLOR, EasyAlertDialog.NO_TEXT_SIZE,
new OnClickListener() {
@Override
public void onClick(View view) {
sendSelectedImage(true);
}
});
allAlertDialog.addNegativeButton(getString(R.string.cancel), EasyAlertDialog.NO_TEXT_COLOR,
EasyAlertDialog.NO_TEXT_SIZE, new OnClickListener() {
@Override
public void onClick(View view) {
allAlertDialog.dismiss();
}
});
if (!activity.isDestroyedCompatible()) {
allAlertDialog.show();
}
}
private void updateOriImageSizeTip(boolean isOrig){
if(origImageList == null)
return;
if(isOrig){
long totalSize = 0;
for (String filepath : origImageList) {
totalSize += AttachmentStore.getFileLength(filepath);
}
originalImageSizeTip.setText(String.format(this.getResources().getString(
R.string.picker_image_preview_original_select), FileUtil.formatFileSize(totalSize)));
originalImage.setImageResource(R.drawable.nim_picker_orignal_checked);
}else{
originalImageSizeTip.setText(R.string.picker_image_preview_original);
originalImage.setImageResource(R.drawable.nim_picker_orignal_normal);
}
}
/**
* 初始化图片查看
*/
private void initViewPager() {
imageViewPager = (ViewPager) findViewById(R.id.viewPagerImage);
imageViewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int arg0) {
setTitleIndex(arg0);
}
});
imageViewPager.setOffscreenPageLimit(2);
String imageFilePath = getIntent().getExtras().getString("ImageFilePath");
String origImageFilePath = getIntent().getExtras().getString("OrigImageFilePath");
imageFile = new File(imageFilePath);
selectImageList = new ArrayList<String>();
selectImageList.add(imageFilePath);
origImageList = new ArrayList<String>();
origImageList.add(origImageFilePath);
imageViewPagerAdapter = new ImagePagerAdapterInImageSwitch(this, selectImageList, getLayoutInflater(),
imageViewPager.getLayoutParams().width, imageViewPager.getLayoutParams().height, this);
imageViewPager.setAdapter(imageViewPagerAdapter);
}
@Override
public void onBackPressed() {
deleteTempFiles();
Intent intent = new Intent();
intent.setClass(PreviewImageFromLocalActivity.this, getIntent().getClass());
setResult(RESULT_CANCELED, intent);
PreviewImageFromLocalActivity.this.finish();
}
@Override
public void onResume() {
// restore the data source
restoreList();
super.onResume();
}
@Override
public void onPause() {
// recycleBitmap(previewImageView);
// save the data source and recycle all bitmaps
imageViewPager.setAdapter(null);
tempIndex = currentPostion;
currentPostion = -1;
super.onPause();
}
/**
* 获取本地图片
*/
protected void choosePictureFromLocal() {
if (!StorageUtil.hasEnoughSpaceForWrite(PreviewImageFromLocalActivity.this, StorageType.TYPE_IMAGE, true)) {
return;
}
new AsyncTask<String, Integer, Boolean>() {
@Override
protected void onPreExecute() {
Toast.makeText(PreviewImageFromLocalActivity.this, R.string.waitfor_image_local, Toast.LENGTH_LONG).show();
}
@Override
protected Boolean doInBackground(String... params) {
return true;
}
@Override
protected void onPostExecute(Boolean result) {
int from = PickImageActivity.FROM_LOCAL;
Activity thiz = PreviewImageFromLocalActivity.this;
PickImageActivity.start(thiz, RequestCode.GET_LOCAL_IMAGE, from, "");
}
}.execute();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_CANCELED) {
if (requestCode == RequestCode.GET_LOCAL_IMAGE) {
onGetLocalPictureResult(requestCode, resultCode, data);
}
} else {
if (selectImageList.size() == 0) {
sendButton.setEnabled(false);
}
}
}
public void onGetLocalPictureResult(int requestCode, int resultCode, final Intent data) {
if (data == null) {
return;
}
final String photoPath = data.getStringExtra(Extras.EXTRA_FILE_PATH);
if (TextUtils.isEmpty(photoPath)) {
return;
}
imageFile = new File(photoPath);
String mimeType = FileUtil.getExtensionName(photoPath);
imageFile = ImageUtil.getScaledImageFileWithMD5(imageFile, mimeType);
if (imageFile == null) {
Toast.makeText(this, R.string.picker_image_error, Toast.LENGTH_LONG).show();
return;
} else {
ImageUtil.makeThumbnail(PreviewImageFromLocalActivity.this,
imageFile);
}
origImageList.add(photoPath);
selectImageList.add(imageFile.getAbsolutePath());
imageViewPagerAdapter.notifyDataSetChanged();
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
imageViewPager.setCurrentItem(selectImageList.size() - 1);
}
}, 100);
//有可用的图片
if(selectImageList.size() >= 1){
sendButton.setEnabled(true);
}
}
public void updateCurrentImageView(final int position) {
if (selectImageList == null
|| (position > 0
&& position >= selectImageList.size()))
return;
if (currentPostion == position) {
return;
} else {
currentPostion = position;
}
setTitleIndex(position);
// LinearLayout currentLayout = (LinearLayout)
// imageViewPager.getChildAt(position);
LinearLayout currentLayout = (LinearLayout) imageViewPager.findViewWithTag(position);
if (currentLayout == null) {
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
updateCurrentImageView(position);
}
}, 300);
return;
}
currentImageView = (BaseZoomableImageView) currentLayout.findViewById(R.id.imageView);
currentImageView.setViewPager(imageViewPager);
setImageView(selectImageList.get(position));
}
public void setImageView(String imageFilePath) {
if (imageFilePath == null) {
return;
}
Bitmap bitmap = BitmapDecoder.decodeSampledForDisplay(imageFilePath);
if (bitmap == null) {
currentImageView.setImageBitmap(ImageUtil.getDefaultBitmapWhenGetFail());
Toast.makeText(this, R.string.picker_image_error, Toast.LENGTH_LONG).show();
} else {
currentImageView.setImageBitmap(bitmap);
}
}
private void deleteTempFiles() {
for (String file : selectImageList) {
new File(file).delete();
}
}
}