package com.mogujie.tt.adapter.album;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.provider.MediaStore.Audio.Albums;
import android.provider.MediaStore.Images.Media;
import android.provider.MediaStore.Images.Thumbnails;
import com.mogujie.tt.log.Logger;
/**
* @Description 相册相关处理
* @author Nana
* @date 2014-5-6
*/
public class AlbumHelper {
Context context = null;
ContentResolver contentResolver = null;
// 缩略图列表
HashMap<String, String> thumbnailList = new HashMap<String, String>();
List<HashMap<String, String>> albumList = new ArrayList<HashMap<String, String>>();
HashMap<String, ImageBucket> bucketList = new HashMap<String, ImageBucket>();
private Logger logger = Logger.getLogger(AlbumHelper.class);
private static AlbumHelper instance = null;
private AlbumHelper(Context cxt) {
if (null == this.context && null != cxt) {
this.context = cxt;
contentResolver = context.getContentResolver();
}
}
public static AlbumHelper getHelper(Context cxt) {
if (null == instance) {
instance = new AlbumHelper(cxt);
}
return instance;
}
/**
* 得到缩略图
*/
private void getThumbnail() {
String[] projection = {
Thumbnails._ID, Thumbnails.IMAGE_ID,
Thumbnails.DATA
};
Cursor cursor = null;
try {
cursor = contentResolver.query(Thumbnails.EXTERNAL_CONTENT_URI,
projection, null, null, null);
getThumbnailColumnData(cursor);
} catch (Exception e) {
logger.e(e.getMessage());
} finally {
if (null != cursor) {
cursor.close();
}
}
}
/**
* 从数据库中得到缩略图
*
* @param cur
*/
private void getThumbnailColumnData(Cursor cur) {
try {
if (null == cur)
return;
if (cur.moveToFirst()) {
@SuppressWarnings("unused")
int cId;
int image_id;
String image_path;
int _idColumn = cur.getColumnIndex(Thumbnails._ID);
int image_idColumn = cur.getColumnIndex(Thumbnails.IMAGE_ID);
int dataColumn = cur.getColumnIndex(Thumbnails.DATA);
do {
cId = cur.getInt(_idColumn);
image_id = cur.getInt(image_idColumn);
image_path = cur.getString(dataColumn);
thumbnailList.put("" + image_id, image_path);
} while (cur.moveToNext());
}
} catch (Exception e) {
logger.e(e.getMessage());
}
}
/**
* @Description 得到原图
*/
@SuppressWarnings("unused")
private void getAlbum() {
String[] projection = {
Albums._ID, Albums.ALBUM, Albums.ALBUM_ART,
Albums.ALBUM_KEY, Albums.ARTIST, Albums.NUMBER_OF_SONGS
};
Cursor cursor = null;
try {
cursor = contentResolver.query(Albums.EXTERNAL_CONTENT_URI,
projection, null, null, null);
getAlbumColumnData(cursor);
} catch (Exception e) {
logger.e(e.getMessage());
} finally {
if (null != cursor) {
cursor.close();
}
}
}
/**
* 从数据库中得到原图
*
* @param cur
*/
private void getAlbumColumnData(Cursor cur) {
try {
if (cur.moveToFirst()) {
int _id;
String album;
String albumArt;
String albumKey;
String artist;
int numOfSongs;
int _idColumn = cur.getColumnIndex(Albums._ID);
int albumColumn = cur.getColumnIndex(Albums.ALBUM);
int albumArtColumn = cur.getColumnIndex(Albums.ALBUM_ART);
int albumKeyColumn = cur.getColumnIndex(Albums.ALBUM_KEY);
int artistColumn = cur.getColumnIndex(Albums.ARTIST);
int numOfSongsColumn = cur.getColumnIndex(Albums.NUMBER_OF_SONGS);
do {
_id = cur.getInt(_idColumn);
album = cur.getString(albumColumn);
albumArt = cur.getString(albumArtColumn);
albumKey = cur.getString(albumKeyColumn);
artist = cur.getString(artistColumn);
numOfSongs = cur.getInt(numOfSongsColumn);
HashMap<String, String> hash = new HashMap<String, String>();
hash.put("_id", _id + "");
hash.put("album", album);
hash.put("albumArt", albumArt);
hash.put("albumKey", albumKey);
hash.put("artist", artist);
hash.put("numOfSongs", numOfSongs + "");
albumList.add(hash);
} while (cur.moveToNext());
}
} catch (Exception e) {
logger.e(e.getMessage());
}
}
// 是否创建图片集
boolean hasBuildImagesBucketList = false;
/**
* @Description 获取图片集
*/
private void buildImagesBucketList() {
Cursor cur = null;
// long startTime = System.currentTimeMillis();
try {
// 构造缩略图索引
getThumbnail();
// 构造相册索引
String columns[] = new String[] {
Media._ID, Media.BUCKET_ID,
Media.PICASA_ID, Media.DATA, Media.DISPLAY_NAME, Media.TITLE,
Media.SIZE, Media.BUCKET_DISPLAY_NAME
};
// 得到一个游标
cur = contentResolver.query(Media.EXTERNAL_CONTENT_URI, columns,
null, null, null);
if (null == cur)
return;
if (cur.moveToFirst()) {
// 获取指定列的索引
int photoIDIndex = cur.getColumnIndexOrThrow(Media._ID);
int photoPathIndex = cur.getColumnIndexOrThrow(Media.DATA);
// int photoNameIndex =
// cur.getColumnIndexOrThrow(Media.DISPLAY_NAME);
// int photoTitleIndex = cur.getColumnIndexOrThrow(Media.TITLE);
// int photoSizeIndex = cur.getColumnIndexOrThrow(Media.SIZE);
int bucketDisplayNameIndex = cur
.getColumnIndexOrThrow(Media.BUCKET_DISPLAY_NAME);
int bucketIdIndex = cur.getColumnIndexOrThrow(Media.BUCKET_ID);
// int picasaIdIndex =
// cur.getColumnIndexOrThrow(Media.PICASA_ID);
// 获取图片总数
@SuppressWarnings("unused")
int totalNum = cur.getCount();
do {
String id = cur.getString(photoIDIndex);
// String name = cur.getString(photoNameIndex);
String path = cur.getString(photoPathIndex);
// String title = cur.getString(photoTitleIndex);
// String size = cur.getString(photoSizeIndex);
String bucketName = cur.getString(bucketDisplayNameIndex);
String bucketId = cur.getString(bucketIdIndex);
// String picasaId = cur.getString(picasaIdIndex);
ImageBucket bucket = bucketList.get(bucketId);
if (bucket == null) {
bucket = new ImageBucket();
bucketList.put(bucketId, bucket);
bucket.imageList = new ArrayList<ImageItem>();
bucket.bucketName = bucketName;
}
bucket.count++;
ImageItem imageItem = new ImageItem();
imageItem.setImageId(id);
imageItem.setImagePath(path);
imageItem.setThumbnailPath(thumbnailList.get(id));
bucket.imageList.add(imageItem);
} while (cur.moveToNext());
}
} catch (Exception e) {
logger.e(e.getMessage());
} finally {
cur.close();
}
try {
Iterator<Entry<String, ImageBucket>> itr = bucketList.entrySet()
.iterator();
while (itr.hasNext()) {
Map.Entry<String, ImageBucket> entry = (Map.Entry<String, ImageBucket>) itr
.next();
ImageBucket bucket = entry.getValue();
for (int i = 0; i < bucket.imageList.size(); ++i) {
@SuppressWarnings("unused")
ImageItem image = bucket.imageList.get(i);
}
}
hasBuildImagesBucketList = true;
} catch (Exception e) {
logger.e(e.getMessage());
}
}
/**
* 得到图片集
*
* @param refresh
* @return
*/
public List<ImageBucket> getImagesBucketList(boolean refresh) {
try {
if (refresh || (!refresh && !hasBuildImagesBucketList)) {
buildImagesBucketList();
}
List<ImageBucket> tmpList = new ArrayList<ImageBucket>();
Iterator<Entry<String, ImageBucket>> itr = bucketList.entrySet()
.iterator();
while (itr.hasNext()) {
Map.Entry<String, ImageBucket> entry = (Map.Entry<String, ImageBucket>) itr
.next();
ImageBucket bucket = entry.getValue();
if (bucket.bucketName.equals("Camera")) {
tmpList.add(0, bucket);
} else {
tmpList.add(bucket);
}
}
return tmpList;
} catch (Exception e) {
logger.e(e.getMessage());
return null;
}
}
/**
* 得到原始图像路径
*
* @param image_id
* @return
*/
@SuppressWarnings("unused")
private String getOriginalImagePath(String image_id) {
try {
String path = null;
String[] projection = {
Media._ID, Media.DATA
};
Cursor cursor = contentResolver.query(Media.EXTERNAL_CONTENT_URI,
projection, Media._ID + "=" + image_id, null, null);
if (cursor != null) {
try {
cursor.moveToFirst();
path = cursor.getString(cursor.getColumnIndex(Media.DATA));
} catch (Exception e) {
} finally {
cursor.close();
}
}
return path;
} catch (Exception e) {
logger.e(e.getMessage());
return null;
}
}
}