summaryrefslogtreecommitdiffstats
path: root/src/com/android/dreams/phototable/LocalSource.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/dreams/phototable/LocalSource.java')
-rw-r--r--src/com/android/dreams/phototable/LocalSource.java85
1 files changed, 75 insertions, 10 deletions
diff --git a/src/com/android/dreams/phototable/LocalSource.java b/src/com/android/dreams/phototable/LocalSource.java
index 8dbc079..ec23b6a 100644
--- a/src/com/android/dreams/phototable/LocalSource.java
+++ b/src/com/android/dreams/phototable/LocalSource.java
@@ -16,12 +16,14 @@
package com.android.dreams.phototable;
import android.content.Context;
+import android.content.SharedPreferences;
import android.database.Cursor;
import android.provider.MediaStore;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Collection;
+import java.util.HashMap;
import java.util.LinkedList;
/**
@@ -32,30 +34,94 @@ public class LocalSource extends PhotoSource {
private int mNextPosition;
- public static final int TYPE = 2;
-
- public LocalSource(Context context) {
- super(context);
+ public LocalSource(Context context, SharedPreferences settings) {
+ super(context, settings);
mSourceName = TAG;
mNextPosition = -1;
fillQueue();
}
@Override
+ public Collection<AlbumData> findAlbums() {
+ log(TAG, "finding albums");
+ HashMap<String, AlbumData> foundAlbums = new HashMap<String, AlbumData>();
+
+ String[] projection = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.BUCKET_ID,
+ MediaStore.Images.Media.BUCKET_DISPLAY_NAME, MediaStore.Images.Media.DATE_TAKEN};
+ // This is a horrible hack that closes the where clause and injects a grouping clause.
+ Cursor cursor = mResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
+ projection, null, null, null);
+ if (cursor != null) {
+ cursor.moveToFirst();
+
+ int dataIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
+ int bucketIndex = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_ID);
+ int nameIndex = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
+ int updatedIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN);
+
+ if (bucketIndex < 0) {
+ log(TAG, "can't find the ID column!");
+ } else {
+ while (!cursor.isAfterLast()) {
+ String id = TAG + ":" + cursor.getString(bucketIndex);
+ AlbumData data = foundAlbums.get(id);
+ if (foundAlbums.get(id) == null) {
+ data = new AlbumData();
+ data.id = id;
+
+ if (dataIndex >= 0) {
+ data.thumbnailUrl = cursor.getString(dataIndex);
+ }
+
+ if (nameIndex >= 0) {
+ data.title = cursor.getString(nameIndex);
+ } else {
+ data.title =
+ mResources.getString(R.string.unknown_album_name, "Unknown");
+ }
+
+ log(TAG, data.title + " found");
+ foundAlbums.put(id, data);
+ }
+ if (updatedIndex >= 0) {
+ long updated = cursor.getLong(updatedIndex);
+ data.updated = (data.updated == 0 ?
+ updated :
+ Math.min(data.updated, updated));
+ }
+ cursor.moveToNext();
+ }
+ }
+ cursor.close();
+
+ }
+ log(TAG, "found " + foundAlbums.size() + " items.");
+ return foundAlbums.values();
+ }
+
+ @Override
protected Collection<ImageData> findImages(int howMany) {
log(TAG, "finding images");
LinkedList<ImageData> foundImages = new LinkedList<ImageData>();
String[] projection = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.ORIENTATION,
MediaStore.Images.Media.BUCKET_ID, MediaStore.Images.Media.BUCKET_DISPLAY_NAME};
- String[] selectionArgs = {}; // settings go here
String selection = "";
- for (String arg : selectionArgs) {
- if (selection.length() > 0) {
- selection += " OR ";
+ for (String id : AlbumSettings.getEnabledAlbums(mSettings)) {
+ if (id.startsWith(TAG)) {
+ String[] parts = id.split(":");
+ if (parts.length > 1) {
+ if (selection.length() > 0) {
+ selection += " OR ";
+ }
+ selection += MediaStore.Images.Media.BUCKET_ID + " = '" + parts[1] + "'";
+ }
}
- selection += MediaStore.Images.Media.BUCKET_ID + " = '" + arg + "'";
}
+ if (selection.isEmpty()) {
+ return foundImages;
+ }
+
Cursor cursor = mResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, selection, null, null);
if (cursor != null) {
@@ -77,7 +143,6 @@ public class LocalSource extends PhotoSource {
} else {
while (foundImages.size() < howMany && !cursor.isAfterLast()) {
ImageData data = new ImageData();
- data.type = TYPE;
data.url = cursor.getString(dataIndex);
data.orientation = cursor.getInt(orientationIndex);
foundImages.offer(data);