package com.eighteengray.procamera.business;
import android.content.ContentResolver;
import android.database.Cursor;
import android.provider.MediaStore;
import com.eighteengray.procamera.bean.ImageFolder;
import com.eighteengray.procamera.model.SystemModel;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;
/**
* 相册相关的业务类,主要作用是处理获取到的Cursor,封装成ImageFolder,然后返回其对应的Observerable
*/
public class AlbumBusiness
{
//获取ImageFolder的列表
public static Observable<List<ImageFolder>> getImageFolder(ContentResolver contentResolver)
{
final Map<String, Integer> tmpDir = new HashMap<String, Integer>(); //用于防止同一个文件夹的多次扫描
final List<ImageFolder> imageFolderList = new ArrayList<>();
SystemModel.getImagesCursor(contentResolver).subscribe(new Action1<Cursor>()
{
@Override
public void call(Cursor cursor)
{
if (cursor.moveToFirst())
{
int data = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
do
{
// 获取图片的路径
String path = cursor.getString(data);
// 获取该图片的父路径名
File parentFile = new File(path).getParentFile();
if (parentFile == null)
{
continue;
}
String dirPath = parentFile.getAbsolutePath();
ImageFolder imageFolder = null;
if (!tmpDir.containsKey(dirPath))
{
// 初始化imageFloder
imageFolder = new ImageFolder();
imageFolder.setFolderDir(dirPath);
imageFolder.setFirstImagePath(path);
imageFolderList.add(imageFolder);
tmpDir.put(dirPath, imageFolderList.indexOf(imageFolder));
} else
{
imageFolder = imageFolderList.get(tmpDir.get(dirPath));
}
imageFolder.getImagePathList().add(path);
} while (cursor.moveToNext());
}
cursor.close();
}
});
Observable<List<ImageFolder>> imageFolderListObserverable = Observable.just(imageFolderList).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
return imageFolderListObserverable;
}
}