/**
* Copyright (C) 2016 Hyphenate Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.fanxin.easeui.ui;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ProgressBar;
import com.fanxin.easeui.utils.EaseLoadLocalBigImgTask;
import com.hyphenate.EMCallBack;
import com.hyphenate.chat.EMClient;
import com.hyphenate.easeui.R;
import com.fanxin.easeui.model.EaseImageCache;
import com.fanxin.easeui.widget.photoview.EasePhotoView;
import com.hyphenate.util.EMLog;
import com.hyphenate.util.ImageUtils;
/**
* download and show original image
*
*/
public class EaseShowBigImageActivity extends EaseBaseActivity {
private static final String TAG = "ShowBigImage";
private ProgressDialog pd;
private EasePhotoView image;
private int default_res = R.drawable.ease_default_image;
private String localFilePath;
private Bitmap bitmap;
private boolean isDownloaded;
private ProgressBar loadLocalPb;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.ease_activity_show_big_image);
super.onCreate(savedInstanceState);
image = (EasePhotoView) findViewById(R.id.image);
loadLocalPb = (ProgressBar) findViewById(R.id.pb_load_local);
default_res = getIntent().getIntExtra("default_image", R.drawable.ease_default_avatar);
Uri uri = getIntent().getParcelableExtra("uri");
String remotepath = getIntent().getExtras().getString("remotepath");
localFilePath = getIntent().getExtras().getString("localUrl");
String secret = getIntent().getExtras().getString("secret");
EMLog.d(TAG, "show big image uri:" + uri + " remotepath:" + remotepath);
//show the image if it exist in local path
if (uri != null && new File(uri.getPath()).exists()) {
EMLog.d(TAG, "showbigimage file exists. directly show it");
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
// int screenWidth = metrics.widthPixels;
// int screenHeight =metrics.heightPixels;
bitmap = EaseImageCache.getInstance().get(uri.getPath());
if (bitmap == null) {
EaseLoadLocalBigImgTask task = new EaseLoadLocalBigImgTask(this, uri.getPath(), image, loadLocalPb, ImageUtils.SCALE_IMAGE_WIDTH,
ImageUtils.SCALE_IMAGE_HEIGHT);
if (android.os.Build.VERSION.SDK_INT > 10) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
task.execute();
}
} else {
image.setImageBitmap(bitmap);
}
} else if (remotepath != null) { //download image from server
EMLog.d(TAG, "download remote image");
Map<String, String> maps = new HashMap<String, String>();
if (!TextUtils.isEmpty(secret)) {
maps.put("share-secret", secret);
}
downloadImage(remotepath, maps);
} else {
image.setImageResource(default_res);
}
image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
/**
* download image
*
* @param remoteFilePath
*/
@SuppressLint("NewApi")
private void downloadImage(final String remoteFilePath, final Map<String, String> headers) {
String str1 = getResources().getString(R.string.Download_the_pictures);
pd = new ProgressDialog(this);
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.setCanceledOnTouchOutside(false);
pd.setMessage(str1);
pd.show();
File temp = new File(localFilePath);
final String tempPath = temp.getParent() + "/temp_" + temp.getName();
final EMCallBack callback = new EMCallBack() {
public void onSuccess() {
runOnUiThread(new Runnable() {
@Override
public void run() {
new File(tempPath).renameTo(new File(localFilePath));
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int screenWidth = metrics.widthPixels;
int screenHeight = metrics.heightPixels;
bitmap = ImageUtils.decodeScaleImage(localFilePath, screenWidth, screenHeight);
if (bitmap == null) {
image.setImageResource(default_res);
} else {
image.setImageBitmap(bitmap);
EaseImageCache.getInstance().put(localFilePath, bitmap);
isDownloaded = true;
}
if (EaseShowBigImageActivity.this.isFinishing() || EaseShowBigImageActivity.this.isDestroyed()) {
return;
}
if (pd != null) {
pd.dismiss();
}
}
});
}
public void onError(int error, String msg) {
EMLog.e(TAG, "offline file transfer error:" + msg);
File file = new File(tempPath);
if (file.exists()&&file.isFile()) {
file.delete();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
if (EaseShowBigImageActivity.this.isFinishing() || EaseShowBigImageActivity.this.isDestroyed()) {
return;
}
image.setImageResource(default_res);
pd.dismiss();
}
});
}
public void onProgress(final int progress, String status) {
EMLog.d(TAG, "Progress: " + progress);
final String str2 = getResources().getString(R.string.Download_the_pictures_new);
runOnUiThread(new Runnable() {
@Override
public void run() {
if (EaseShowBigImageActivity.this.isFinishing() || EaseShowBigImageActivity.this.isDestroyed()) {
return;
}
pd.setMessage(str2 + progress + "%");
}
});
}
};
EMClient.getInstance().chatManager().downloadFile(remoteFilePath, tempPath, headers, callback);
}
@Override
public void onBackPressed() {
if (isDownloaded)
setResult(RESULT_OK);
finish();
}
}