package com.netease.nim.uikit.common.media.picker.activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.provider.MediaStore; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.ImageView; 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.util.file.AttachmentStore; import com.netease.nim.uikit.common.util.media.BitmapDecoder; import com.netease.nim.uikit.common.util.storage.StorageType; import com.netease.nim.uikit.common.util.storage.StorageUtil; import com.netease.nim.uikit.model.ToolBarOptions; 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 PreviewImageFromCameraActivity extends UI { public static final String RESULT_RETAKE = "RESULT_RETAKE"; public static final String RESULT_SEND = "RESULT_SEND"; private ImageView previewImageView; private File imageFile; private Button sendButton; private String origImageFilePath; private String btnText; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.nim_preview_image_from_camera_activity); ToolBarOptions options = new ToolBarOptions(); setToolBar(R.id.toolbar, options); initActionBar(); getIntentData(); findViews(); initSendBtn(); showPicture(); } private void findViews() { sendButton = (Button) findViewById(R.id.buttonSend); previewImageView = (ImageView) findViewById(R.id.imageViewPreview); } private void getIntentData() { String imageFilePathString = getIntent().getExtras().getString("ImageFilePath"); origImageFilePath = getIntent().getExtras().getString("OrigImageFilePath"); btnText = getIntent().getExtras().getString(Extras.EXTRA_PREVIEW_IMAGE_BTN_TEXT); imageFile = new File(imageFilePathString); } private void initSendBtn() { if (!TextUtils.isEmpty(btnText)) { sendButton.setText(btnText); } sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ArrayList<String> imageList = new ArrayList<String>(); ArrayList<String> origImageList = new ArrayList<String>(); imageList.add(imageFile.getPath()); origImageList.add(origImageFilePath); boolean isOrig = false; if (!isOrig) { // 拍照不是原图发送的话,原图需要手动删掉 AttachmentStore.delete(origImageFilePath); } Intent intent = PreviewImageFromLocalActivity.initPreviewImageIntent(imageList, origImageList, isOrig); intent.setClass(PreviewImageFromCameraActivity.this, getIntent().getClass()); intent.putExtra(RESULT_SEND, true); setResult(RESULT_OK, intent); PreviewImageFromCameraActivity.this.finish(); } }); } private void initActionBar() { TextView toolbarView = findView(R.id.action_bar_right_clickable_textview); toolbarView.setText(R.string.recapture); toolbarView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { deleteTempFile(); Intent intent = new Intent(); intent.setClass(PreviewImageFromCameraActivity.this, getIntent().getClass()); intent.putExtra(RESULT_RETAKE, true); setResult(RESULT_OK, intent); PreviewImageFromCameraActivity.this.finish(); } }); } @Override public void onBackPressed() { deleteTempFile(); Intent intent = new Intent(); intent.setClass(PreviewImageFromCameraActivity.this, getIntent().getClass()); setResult(RESULT_CANCELED, intent); PreviewImageFromCameraActivity.this.finish(); } @Override public void onDestroy() { Drawable dr = previewImageView.getDrawable(); previewImageView.setImageBitmap(null); if (dr != null) { Bitmap bitmap = getBitmap(dr); if (bitmap != null) { bitmap.recycle(); } } super.onDestroy(); } public static final Bitmap getBitmap(Drawable dr) { if (dr == null) { return null; } if (dr instanceof BitmapDrawable) { return ((BitmapDrawable) dr).getBitmap(); } return null; } private void showPicture() { try { Bitmap bitmap = BitmapDecoder.decodeSampledForDisplay(imageFile.getAbsolutePath()); if (bitmap != null) { previewImageView.setImageBitmap(bitmap); } else { Toast.makeText(this, R.string.image_show_error, Toast.LENGTH_LONG).show(); } } catch (OutOfMemoryError e) { Toast.makeText(this, R.string.memory_out, Toast.LENGTH_LONG).show(); } } /** * 获取本地图片 */ protected void choosePictureFromLocal() { if (!StorageUtil.hasEnoughSpaceForWrite(PreviewImageFromCameraActivity.this, StorageType.TYPE_IMAGE, true)) { return; } new AsyncTask<String, Integer, Boolean>() { @Override protected void onPreExecute() { Toast.makeText(PreviewImageFromCameraActivity.this, R.string.waitfor_image_local, Toast.LENGTH_LONG).show(); } @Override protected Boolean doInBackground(String... params) { return true; } @Override protected void onPostExecute(Boolean result) { Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); if (Build.VERSION.SDK_INT >= 11) { intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true); } try { PreviewImageFromCameraActivity.this.startActivityForResult(intent, RequestCode.GET_LOCAL_IMAGE); } catch (ActivityNotFoundException e) { Toast.makeText(PreviewImageFromCameraActivity.this, R.string.gallery_invalid, Toast.LENGTH_LONG).show(); } } }.execute(); } private void deleteTempFile() { if (imageFile != null) { imageFile.delete(); } AttachmentStore.delete(origImageFilePath); } }