summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBobby Georgescu <georgescu@google.com>2013-03-07 22:14:59 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-03-07 22:14:59 +0000
commit62a1046c9482b4ac54d73130623ba7e37da2f275 (patch)
tree591b5a5d439e5594a5ea94f58d7a9bb14d69e2d9
parent6f3bd23d7fd83a67f5e357939b06057f40051df3 (diff)
parent8c12028e716792bb083dc57dda58b8be26a16ef7 (diff)
downloadandroid_packages_apps_Gallery2-62a1046c9482b4ac54d73130623ba7e37da2f275.tar.gz
android_packages_apps_Gallery2-62a1046c9482b4ac54d73130623ba7e37da2f275.tar.bz2
android_packages_apps_Gallery2-62a1046c9482b4ac54d73130623ba7e37da2f275.zip
Merge "Album set shim" into gb-ub-photos-bryce
-rw-r--r--res/layout/album_set_item.xml2
-rw-r--r--src/com/android/photos/AlbumSetFragment.java70
-rw-r--r--src/com/android/photos/data/AlbumSetLoader.java22
-rw-r--r--src/com/android/photos/shims/MediaSetLoader.java62
4 files changed, 128 insertions, 28 deletions
diff --git a/res/layout/album_set_item.xml b/res/layout/album_set_item.xml
index 46084e938..bdecd5fd1 100644
--- a/res/layout/album_set_item.xml
+++ b/res/layout/album_set_item.xml
@@ -12,6 +12,8 @@
android:layout_alignParentTop="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
+ android:ellipsize="end"
+ android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
diff --git a/src/com/android/photos/AlbumSetFragment.java b/src/com/android/photos/AlbumSetFragment.java
index 6a9520a5e..3c51bbac3 100644
--- a/src/com/android/photos/AlbumSetFragment.java
+++ b/src/com/android/photos/AlbumSetFragment.java
@@ -17,14 +17,15 @@
package com.android.photos;
import android.app.Fragment;
+import android.app.LoaderManager.LoaderCallbacks;
import android.content.Context;
+import android.content.Loader;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
@@ -37,15 +38,20 @@ import android.widget.Toast;
import com.android.gallery3d.R;
import com.android.photos.data.AlbumSetLoader;
-import com.android.photos.drawables.DataUriThumbnailDrawable;
+import com.android.photos.drawables.DrawableFactory;
+import com.android.photos.shims.MediaSetLoader;
import java.util.Date;
-public class AlbumSetFragment extends Fragment implements OnItemClickListener {
+public class AlbumSetFragment extends Fragment implements OnItemClickListener,
+ LoaderCallbacks<Cursor> {
+
private GridView mAlbumSetView;
private View mEmptyView;
- private CursorAdapter mAdapter;
+ private AlbumSetCursorAdapter mAdapter;
+
+ private static final int LOADER_ALBUMSET = 1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -57,11 +63,37 @@ public class AlbumSetFragment extends Fragment implements OnItemClickListener {
mAdapter = new AlbumSetCursorAdapter(getActivity());
mAlbumSetView.setAdapter(mAdapter);
mAlbumSetView.setOnItemClickListener(this);
- mAdapter.swapCursor(AlbumSetLoader.MOCK);
+ getLoaderManager().initLoader(LOADER_ALBUMSET, null, this);
+ updateEmptyStatus();
return root;
}
@Override
+ public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+ // TODO: Switch to AlbumSetLoader
+ MediaSetLoader loader = new MediaSetLoader(getActivity());
+ mAdapter.setDrawableFactory(loader);
+ return loader;
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader,
+ Cursor data) {
+ mAdapter.swapCursor(data);
+ updateEmptyStatus();
+ }
+
+ private void updateEmptyStatus() {
+ boolean empty = (mAdapter == null || mAdapter.getCount() == 0);
+ mAlbumSetView.setVisibility(empty ? View.GONE : View.VISIBLE);
+ mEmptyView.setVisibility(empty ? View.VISIBLE : View.GONE);
+ }
+
+ @Override
+ public void onLoaderReset(Loader<Cursor> loader) {
+ }
+
+ @Override
public void onItemClick(AdapterView<?> av, View v, int pos, long id) {
Cursor c = (Cursor) av.getItemAtPosition(pos);
int albumId = c.getInt(AlbumSetLoader.INDEX_ID);
@@ -71,6 +103,11 @@ public class AlbumSetFragment extends Fragment implements OnItemClickListener {
private static class AlbumSetCursorAdapter extends CursorAdapter {
+ private DrawableFactory<Cursor> mDrawableFactory;
+
+ public void setDrawableFactory(DrawableFactory<Cursor> factory) {
+ mDrawableFactory = factory;
+ }
private Date mDate = new Date(); // Used for converting timestamps for display
public AlbumSetCursorAdapter(Context context) {
@@ -85,8 +122,13 @@ public class AlbumSetFragment extends Fragment implements OnItemClickListener {
TextView dateTextView = (TextView) v.findViewById(
R.id.album_set_item_date);
- mDate.setTime(cursor.getLong(AlbumSetLoader.INDEX_TIMESTAMP));
- dateTextView.setText(DateFormat.getMediumDateFormat(context).format(mDate));
+ long timestamp = cursor.getLong(AlbumSetLoader.INDEX_TIMESTAMP);
+ if (timestamp > 0) {
+ mDate.setTime(timestamp);
+ dateTextView.setText(DateFormat.getMediumDateFormat(context).format(mDate));
+ } else {
+ dateTextView.setText(null);
+ }
ProgressBar uploadProgressBar = (ProgressBar) v.findViewById(
R.id.album_set_item_upload_progress);
@@ -97,17 +139,19 @@ public class AlbumSetFragment extends Fragment implements OnItemClickListener {
uploadProgressBar.setVisibility(View.INVISIBLE);
}
- // TODO show the thumbnail
+ ImageView thumbImageView = (ImageView) v.findViewById(
+ R.id.album_set_item_image);
+ Drawable recycle = thumbImageView.getDrawable();
+ Drawable drawable = mDrawableFactory.drawableForItem(cursor, recycle);
+ if (recycle != drawable) {
+ thumbImageView.setImageDrawable(drawable);
+ }
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
- View v = LayoutInflater.from(context).inflate(
+ return LayoutInflater.from(context).inflate(
R.layout.album_set_item, parent, false);
- ImageView thumbImageView = (ImageView) v.findViewById(
- R.id.album_set_item_image);
- thumbImageView.setImageResource(android.R.color.darker_gray);
- return v;
}
}
}
diff --git a/src/com/android/photos/data/AlbumSetLoader.java b/src/com/android/photos/data/AlbumSetLoader.java
index f5fc3b732..b2b5204e6 100644
--- a/src/com/android/photos/data/AlbumSetLoader.java
+++ b/src/com/android/photos/data/AlbumSetLoader.java
@@ -13,20 +13,20 @@ public class AlbumSetLoader {
public static final int INDEX_COUNT_PENDING_UPLOAD = 6;
public static final int INDEX_COUNT = 7;
+ public static final String[] PROJECTION = {
+ "_id",
+ "title",
+ "timestamp",
+ "thumb_uri",
+ "thumb_width",
+ "thumb_height",
+ "count_pending_upload",
+ "_count"
+ };
public static final MatrixCursor MOCK = createRandomCursor(30);
private static MatrixCursor createRandomCursor(int count) {
- String[] rows = {
- "_id",
- "title",
- "timestamp",
- "thumb_uri",
- "thumb_width",
- "thumb_height",
- "count_pending_upload",
- "_count"
- };
- MatrixCursor c = new MatrixCursor(rows, count);
+ MatrixCursor c = new MatrixCursor(PROJECTION, count);
for (int i = 0; i < count; i++) {
c.addRow(createRandomRow());
}
diff --git a/src/com/android/photos/shims/MediaSetLoader.java b/src/com/android/photos/shims/MediaSetLoader.java
index 353fd4e1a..7a6fcb865 100644
--- a/src/com/android/photos/shims/MediaSetLoader.java
+++ b/src/com/android/photos/shims/MediaSetLoader.java
@@ -18,17 +18,32 @@ package com.android.photos.shims;
import android.content.AsyncTaskLoader;
import android.content.Context;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.graphics.drawable.Drawable;
+import android.provider.MediaStore.Files.FileColumns;
import com.android.gallery3d.data.ContentListener;
import com.android.gallery3d.data.DataManager;
+import com.android.gallery3d.data.MediaDetails;
+import com.android.gallery3d.data.MediaItem;
import com.android.gallery3d.data.MediaSet;
+import com.android.gallery3d.data.MediaSet.ItemConsumer;
import com.android.gallery3d.data.MediaSet.SyncListener;
import com.android.gallery3d.util.Future;
+import com.android.photos.data.AlbumSetLoader;
+import com.android.photos.data.PhotoSetLoader;
+import com.android.photos.drawables.DrawableFactory;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.util.ArrayList;
/**
- * Proof of concept, don't use
+ * Returns all MediaSets in a MediaSet, wrapping them in a cursor to appear
+ * like a AlbumSetLoader.
*/
-public class MediaSetLoader extends AsyncTaskLoader<MediaSet> {
+public class MediaSetLoader extends AsyncTaskLoader<Cursor> implements DrawableFactory<Cursor>{
private static final SyncListener sNullListener = new SyncListener() {
@Override
@@ -45,6 +60,15 @@ public class MediaSetLoader extends AsyncTaskLoader<MediaSet> {
}
};
+ private ArrayList<MediaItem> mCoverItems = new ArrayList<MediaItem>();
+
+ public MediaSetLoader(Context context) {
+ super(context);
+ DataManager dm = DataManager.from(context);
+ String path = dm.getTopSetPath(DataManager.INCLUDE_ALL);
+ mMediaSet = dm.getMediaSet(path);
+ }
+
public MediaSetLoader(Context context, String path) {
super(context);
mMediaSet = DataManager.from(getContext()).getMediaSet(path);
@@ -81,9 +105,39 @@ public class MediaSetLoader extends AsyncTaskLoader<MediaSet> {
}
@Override
- public MediaSet loadInBackground() {
+ public Cursor loadInBackground() {
mMediaSet.loadIfDirty();
- return mMediaSet;
+ final MatrixCursor cursor = new MatrixCursor(AlbumSetLoader.PROJECTION);
+ final Object[] row = new Object[AlbumSetLoader.PROJECTION.length];
+ int count = mMediaSet.getSubMediaSetCount();
+ for (int i = 0; i < count; i++) {
+ MediaSet m = mMediaSet.getSubMediaSet(i);
+ m.loadIfDirty();
+ row[AlbumSetLoader.INDEX_ID] = i;
+ row[AlbumSetLoader.INDEX_TITLE] = m.getName();
+ row[AlbumSetLoader.INDEX_COUNT] = m.getMediaItemCount();
+ MediaItem coverItem = m.getCoverMediaItem();
+ row[AlbumSetLoader.INDEX_TIMESTAMP] = coverItem.getDateInMs();
+ mCoverItems.add(coverItem);
+ cursor.addRow(row);
+ }
+ return cursor;
}
+ @Override
+ public Drawable drawableForItem(Cursor item, Drawable recycle) {
+ BitmapJobDrawable drawable = null;
+ if (recycle == null || !(recycle instanceof BitmapJobDrawable)) {
+ drawable = new BitmapJobDrawable();
+ } else {
+ drawable = (BitmapJobDrawable) recycle;
+ }
+ int index = item.getInt(AlbumSetLoader.INDEX_ID);
+ drawable.setMediaItem(mCoverItems.get(index));
+ return drawable;
+ }
+
+ public static int getThumbnailSize() {
+ return MediaItem.getTargetSize(MediaItem.TYPE_MICROTHUMBNAIL);
+ }
}