// Path: devpkg-android/src/main/java/org/senydevpkg/utils/MD5Utils.java
// public class MD5Utils {
// 
//     /**
//      * 获取字符串加密
//      *
//      * @param string
//      * @return
//      */
//     public static String encode(String string) {
//         try {
//             MessageDigest md = MessageDigest.getInstance("MD5");
//             byte[] bs = md.digest(string.getBytes());
//             StringBuilder sb = new StringBuilder();
//             for (byte b : bs) {
//                 int num = b & 0xff;
//                 String hex = Integer.toHexString(num);
//                 if (hex.length() == 1) {
//                     sb.append(0);
//                 }
//                 sb.append(b);
//             }
//             return sb.toString();
// 
//         } catch (Exception e) {
//             e.printStackTrace();
//             return null;
//         }
//     }
// 
//     /**
//      * 获取文件MD5
//      *
//      * @param file
//      * @return
//      * @throws FileNotFoundException
//      */
//     public static String encode(File file) throws FileNotFoundException {
//         String value = null;
//         FileInputStream in = null;
//         try {
//             in = new FileInputStream(file);
//             MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length());
//             MessageDigest md5 = MessageDigest.getInstance("MD5");
//             md5.update(byteBuffer);
//             BigInteger bi = new BigInteger(1, md5.digest());
//             value = bi.toString(16);
//         } catch (Exception e) {
//             e.printStackTrace();
//         } finally {
//             if (null != in) {
//                 try {
//                     in.close();
//                 } catch (IOException e) {
//                     e.printStackTrace();
//                 }
//             }
//         }
//         return value;
//     }
// 
// }


import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.support.v4.util.LruCache;
import com.android.volley.toolbox.ImageLoader.ImageCache;
import org.senydevpkg.utils.MD5Utils;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
        }
    }

    /**
     * 该方法会判断当前sd卡是否存在，然后选择缓存地址
     *
     * @param context
     * @return
     */
    public File getDiskCacheDir(Context context, String uniqueName) {
        String cachePath;
        File externalCacheDir = context.getExternalCacheDir();
        if ((Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
                || !Environment.isExternalStorageRemovable()) && externalCacheDir != null) {
            cachePath = externalCacheDir.getPath();
        } else {
            cachePath = context.getCacheDir().getPath();
        }
        return new File(cachePath + File.separator + uniqueName);
    }

    /**
     * 从缓存（内存缓存，磁盘缓存）中获取Bitmap
     */
    @Override
    public Bitmap getBitmap(String url) {
        if (mLruCache.get(url) != null) {
            // 从LruCache缓存中取
            return mLruCache.get(url);
        } else {
// Path: devpkg-android/src/main/java/org/senydevpkg/utils/MD5Utils.java
// public class MD5Utils {
// 
//     /**
//      * 获取字符串加密
//      *
//      * @param string
//      * @return
//      */
//     public static String encode(String string) {
//         try {
//             MessageDigest md = MessageDigest.getInstance("MD5");
//             byte[] bs = md.digest(string.getBytes());
//             StringBuilder sb = new StringBuilder();
//             for (byte b : bs) {
//                 int num = b & 0xff;
//                 String hex = Integer.toHexString(num);
//                 if (hex.length() == 1) {
//                     sb.append(0);
//                 }
//                 sb.append(b);
//             }
//             return sb.toString();
// 
//         } catch (Exception e) {
//             e.printStackTrace();
//             return null;
//         }
//     }
// 
//     /**
//      * 获取文件MD5
//      *
//      * @param file
//      * @return
//      * @throws FileNotFoundException
//      */
//     public static String encode(File file) throws FileNotFoundException {
//         String value = null;
//         FileInputStream in = null;
//         try {
//             in = new FileInputStream(file);
//             MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length());
//             MessageDigest md5 = MessageDigest.getInstance("MD5");
//             md5.update(byteBuffer);
//             BigInteger bi = new BigInteger(1, md5.digest());
//             value = bi.toString(16);
//         } catch (Exception e) {
//             e.printStackTrace();
//         } finally {
//             if (null != in) {
//                 try {
//                     in.close();
//                 } catch (IOException e) {
//                     e.printStackTrace();
//                 }
//             }
//         }
//         return value;
//     }
// 
// }


// Path: devpkg-android/src/main/java/org/senydevpkg/net/VolleyImageCacheImpl.java
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.support.v4.util.LruCache;
import com.android.volley.toolbox.ImageLoader.ImageCache;
import org.senydevpkg.utils.MD5Utils;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

        }
    }

    /**
     * 该方法会判断当前sd卡是否存在，然后选择缓存地址
     *
     * @param context
     * @return
     */
    public File getDiskCacheDir(Context context, String uniqueName) {
        String cachePath;
        File externalCacheDir = context.getExternalCacheDir();
        if ((Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
                || !Environment.isExternalStorageRemovable()) && externalCacheDir != null) {
            cachePath = externalCacheDir.getPath();
        } else {
            cachePath = context.getCacheDir().getPath();
        }
        return new File(cachePath + File.separator + uniqueName);
    }

    /**
     * 从缓存（内存缓存，磁盘缓存）中获取Bitmap
     */
    @Override
    public Bitmap getBitmap(String url) {
        if (mLruCache.get(url) != null) {
            // 从LruCache缓存中取
            return mLruCache.get(url);
        } else {
            String key = MD5Utils.encode(url);