package com.parttime.common.Image;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;
import android.widget.ImageView;
import android.widget.TextView;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageRequest;
import com.carson.constant.ConstantForSaveList;
import com.parttime.constants.ActivityExtraAndKeys;
import com.parttime.utils.SharePreferenceUtil;
import com.qingmu.jianzhidaren.R;
import com.quark.common.Url;
import com.quark.http.image.LoadImage;
import com.quark.jianzhidaren.ApplicationControl;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
* Created by dehua on 15/7/17.
*/
public class ContactImageLoader {
private static final String TAG = "ContactImageLoader";
public static final String APP_PATH = Environment.getExternalStorageDirectory() + "/"
+ "jzdr";
public static final String Image_Path = Environment.getExternalStorageDirectory() + "/"
+ "jzdr/" + "image";
public static Bitmap get(String id){
return get(id, null);
}
public static Bitmap get(String id, String imgName){
boolean sdCardExist = Environment.getExternalStorageState()
.equals(android.os.Environment.MEDIA_MOUNTED); //判断sd卡是否存在
if (! sdCardExist){
return null;
}
File mePhotoFold = new File(Image_Path);
if (!mePhotoFold.exists()) {
boolean result = mePhotoFold.mkdirs();
if(result){
Log.i(TAG, "create image path success");
}
}
SharePreferenceUtil sp = SharePreferenceUtil.getInstance(ApplicationControl.getInstance());
// 当前聊天对象的头像更改,要先联网验证头像路径是否更改
File picture = null;
if(imgName != null){
picture = new File(Image_Path, imgName);
}else {
picture = new File(Image_Path,
sp.loadStringSharedPreference(id + "_photo", "c"));
}
if (! picture.isDirectory() && picture.exists()) {
// 加载本地图片
return BitmapFactory.decodeFile(picture.getAbsolutePath());
}
return null;
}
/**
* 加载图片, 先判断本地,本地不存在,获取网络图片
* @param id String
* @param avatarUrl String
* @param avatar ImageView
* @param queue RequestQueue
*/
public static void loadNativePhoto(final String id, final String avatarUrl,
final ImageView avatar, RequestQueue queue ) {
loadNativePhoto(id, avatarUrl, avatar, R.drawable.default_avatar, queue);
}
public static void loadNativePhoto(final String id, final String avatarUrl,
final ImageView avatar, int defaultImgRes, RequestQueue queue ){
Bitmap bitmap = get(id, avatarUrl);
if(bitmap == null){
if(defaultImgRes > 0) {
avatar.setBackgroundResource(defaultImgRes);
}
loadpersonPic(queue, id, avatarUrl, avatar, 1);
}else{
avatar.setBackgroundDrawable(bitmapToDrawable(bitmap));
}
}
/**
* 加载图片
* @param queue RequestQueue
* @param id String
* @param url String
* @param imageView ImageView
* @param isRound int
*/
public static void loadpersonPic(RequestQueue queue , final String id, final String url,
final ImageView imageView, final int isRound) {
ImageRequest imgRequest = new ImageRequest(Url.GETPIC + url,
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap arg0) {
String picture = null;
Object obj = imageView.getTag(R.id.picture);
if(obj instanceof String) {
picture = (String)obj;
}
if(url.equals(picture) || TextUtils.isEmpty(picture)) {
imageView.setBackgroundDrawable(bitmapToDrawable(arg0));
}
boolean sdCardExist = Environment.getExternalStorageState()
.equals(android.os.Environment.MEDIA_MOUNTED); //判断sd卡是否存在
if (! sdCardExist){
return;
}
OutputStream output = null;
try {
File mePhotoFold = new File(Image_Path);
if (!mePhotoFold.exists()) {
mePhotoFold.mkdirs();
}
output = new FileOutputStream(new File(Image_Path, url));
arg0.compress(Bitmap.CompressFormat.JPEG, 100,
output);
output.flush();
SharePreferenceUtil sp = SharePreferenceUtil.getInstance(ApplicationControl.getInstance());
sp.saveSharedPreferences(id + "_photo", url);
} catch (Exception e) {
e.printStackTrace();
} finally{
if(output != null){
try {
output.close();
} catch (IOException ignore) {
}
}
}
}
}, 300, 200, Bitmap.Config.ARGB_8888, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError arg0) {
}
});
queue.add(imgRequest);
imgRequest.setRetryPolicy(new DefaultRetryPolicy(
ConstantForSaveList.DEFAULTRETRYTIME * 1000, 1, 1.0f));
}
public static long getCacheSize(){
if(!Environment.getExternalStorageState()
.equals(android.os.Environment.MEDIA_MOUNTED)) {
return 0;
}
File mePhotoFold = new File(Image_Path);
if(mePhotoFold.isDirectory() && mePhotoFold.exists()){
long total = 0;
File[] files = mePhotoFold.listFiles();
if(files != null){
for(File f : files){
if(f.exists() && !f.isDirectory()){
total += f.length();
}
}
}
return total;
}
return 0;
}
public static void clearCache(){
if(!Environment.getExternalStorageState()
.equals(android.os.Environment.MEDIA_MOUNTED)) {
return ;
}
File mePhotoFold = new File(Image_Path);
if(mePhotoFold.isDirectory() && mePhotoFold.exists()){
File[] files = mePhotoFold.listFiles();
if(files != null){
for(File file : files){
if(file.exists() && !file.isDirectory()){
file.delete();
}
}
}
}
}
public static Drawable bitmapToDrawable(Bitmap bitmap){
return new BitmapDrawable(ApplicationControl.getInstance().getResources(), bitmap);
}
}