diff options
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/photos/AlbumSetFragment.java | 7 | ||||
-rw-r--r-- | src/com/android/photos/PhotoSetFragment.java | 7 | ||||
-rw-r--r-- | src/com/android/photos/shims/BitmapJobDrawable.java | 11 | ||||
-rw-r--r-- | src/com/android/photos/shims/MediaItemsLoader.java | 13 | ||||
-rw-r--r-- | src/com/android/photos/shims/MediaSetLoader.java | 20 |
5 files changed, 37 insertions, 21 deletions
diff --git a/src/com/android/photos/AlbumSetFragment.java b/src/com/android/photos/AlbumSetFragment.java index 3c51bbac3..6a3760779 100644 --- a/src/com/android/photos/AlbumSetFragment.java +++ b/src/com/android/photos/AlbumSetFragment.java @@ -54,13 +54,18 @@ public class AlbumSetFragment extends Fragment implements OnItemClickListener, private static final int LOADER_ALBUMSET = 1; @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mAdapter = new AlbumSetCursorAdapter(getActivity()); + } + + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.album_set, container, false); mAlbumSetView = (GridView) root.findViewById(android.R.id.list); mEmptyView = root.findViewById(android.R.id.empty); mEmptyView.setVisibility(View.GONE); - mAdapter = new AlbumSetCursorAdapter(getActivity()); mAlbumSetView.setAdapter(mAdapter); mAlbumSetView.setOnItemClickListener(this); getLoaderManager().initLoader(LOADER_ALBUMSET, null, this); diff --git a/src/com/android/photos/PhotoSetFragment.java b/src/com/android/photos/PhotoSetFragment.java index 1de8de5a7..5911ad0c8 100644 --- a/src/com/android/photos/PhotoSetFragment.java +++ b/src/com/android/photos/PhotoSetFragment.java @@ -47,6 +47,12 @@ public class PhotoSetFragment extends Fragment implements LoaderCallbacks<Cursor private ThumbnailAdapter mAdapter; @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mAdapter = new ThumbnailAdapter(getActivity()); + } + + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.photo_set, container, false); @@ -55,7 +61,6 @@ public class PhotoSetFragment extends Fragment implements LoaderCallbacks<Cursor mPhotoSetView.setColumnWidth(MediaItemsLoader.getThumbnailSize()); mEmptyView = root.findViewById(android.R.id.empty); mEmptyView.setVisibility(View.GONE); - mAdapter = new ThumbnailAdapter(getActivity()); mPhotoSetView.setAdapter(mAdapter); getLoaderManager().initLoader(LOADER_PHOTOSET, null, this); updateEmptyStatus(); diff --git a/src/com/android/photos/shims/BitmapJobDrawable.java b/src/com/android/photos/shims/BitmapJobDrawable.java index 299becb07..e13e636bb 100644 --- a/src/com/android/photos/shims/BitmapJobDrawable.java +++ b/src/com/android/photos/shims/BitmapJobDrawable.java @@ -15,7 +15,6 @@ import com.android.gallery3d.util.Future; import com.android.gallery3d.util.FutureListener; import com.android.gallery3d.util.ThreadPool; import com.android.photos.data.GalleryBitmapPool; -import com.android.photos.drawables.AutoThumbnailDrawable; public class BitmapJobDrawable extends Drawable implements Runnable { @@ -30,6 +29,8 @@ public class BitmapJobDrawable extends Drawable implements Runnable { } public void setMediaItem(MediaItem item) { + if (mItem == item) return; + if (mLoader != null) { mLoader.cancelLoad(); } @@ -38,9 +39,11 @@ public class BitmapJobDrawable extends Drawable implements Runnable { GalleryBitmapPool.getInstance().put(mBitmap); mBitmap = null; } - // TODO: Figure out why ThumbnailLoader doesn't like to be re-used - mLoader = new ThumbnailLoader(this); - mLoader.startLoad(); + if (mItem != null) { + // TODO: Figure out why ThumbnailLoader doesn't like to be re-used + mLoader = new ThumbnailLoader(this); + mLoader.startLoad(); + } invalidateSelf(); } diff --git a/src/com/android/photos/shims/MediaItemsLoader.java b/src/com/android/photos/shims/MediaItemsLoader.java index 886b3c3a1..2907eaf02 100644 --- a/src/com/android/photos/shims/MediaItemsLoader.java +++ b/src/com/android/photos/shims/MediaItemsLoader.java @@ -22,6 +22,7 @@ import android.database.Cursor; import android.database.MatrixCursor; import android.graphics.drawable.Drawable; import android.provider.MediaStore.Files.FileColumns; +import android.util.SparseArray; import com.android.gallery3d.data.ContentListener; import com.android.gallery3d.data.DataManager; @@ -33,8 +34,6 @@ import com.android.gallery3d.util.Future; import com.android.photos.data.PhotoSetLoader; import com.android.photos.drawables.DrawableFactory; -import java.util.ArrayList; - /** * Returns all MediaItems in a MediaSet, wrapping them in a cursor to appear * like a PhotoSetLoader @@ -47,7 +46,7 @@ public class MediaItemsLoader extends AsyncTaskLoader<Cursor> implements Drawabl } }; - private MediaSet mMediaSet; + private final MediaSet mMediaSet; private Future<Integer> mSyncTask = null; private ContentListener mObserver = new ContentListener() { @Override @@ -55,7 +54,7 @@ public class MediaItemsLoader extends AsyncTaskLoader<Cursor> implements Drawabl onContentChanged(); } }; - private ArrayList<MediaItem> mMediaItems = new ArrayList<MediaItem>(); + private SparseArray<MediaItem> mMediaItems; public MediaItemsLoader(Context context) { super(context); @@ -104,6 +103,7 @@ public class MediaItemsLoader extends AsyncTaskLoader<Cursor> implements Drawabl mMediaSet.loadIfDirty(); final MatrixCursor cursor = new MatrixCursor(PhotoSetLoader.PROJECTION); final Object[] row = new Object[PhotoSetLoader.PROJECTION.length]; + final SparseArray<MediaItem> mediaItems = new SparseArray<MediaItem>(); mMediaSet.enumerateTotalMediaItems(new ItemConsumer() { @Override public void consume(int index, MediaItem item) { @@ -122,9 +122,12 @@ public class MediaItemsLoader extends AsyncTaskLoader<Cursor> implements Drawabl } row[PhotoSetLoader.INDEX_MEDIA_TYPE] = mappedMediaType; cursor.addRow(row); - mMediaItems.add(item); + mediaItems.append(index, item); } }); + synchronized (mMediaSet) { + mMediaItems = mediaItems; + } return cursor; } diff --git a/src/com/android/photos/shims/MediaSetLoader.java b/src/com/android/photos/shims/MediaSetLoader.java index 7a6fcb865..87039c209 100644 --- a/src/com/android/photos/shims/MediaSetLoader.java +++ b/src/com/android/photos/shims/MediaSetLoader.java @@ -21,22 +21,16 @@ 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; /** @@ -51,7 +45,7 @@ public class MediaSetLoader extends AsyncTaskLoader<Cursor> implements DrawableF } }; - private MediaSet mMediaSet; + private final MediaSet mMediaSet; private Future<Integer> mSyncTask = null; private ContentListener mObserver = new ContentListener() { @Override @@ -60,7 +54,7 @@ public class MediaSetLoader extends AsyncTaskLoader<Cursor> implements DrawableF } }; - private ArrayList<MediaItem> mCoverItems = new ArrayList<MediaItem>(); + private ArrayList<MediaItem> mCoverItems; public MediaSetLoader(Context context) { super(context); @@ -110,6 +104,7 @@ public class MediaSetLoader extends AsyncTaskLoader<Cursor> implements DrawableF final MatrixCursor cursor = new MatrixCursor(AlbumSetLoader.PROJECTION); final Object[] row = new Object[AlbumSetLoader.PROJECTION.length]; int count = mMediaSet.getSubMediaSetCount(); + ArrayList<MediaItem> coverItems = new ArrayList<MediaItem>(count); for (int i = 0; i < count; i++) { MediaSet m = mMediaSet.getSubMediaSet(i); m.loadIfDirty(); @@ -117,10 +112,15 @@ public class MediaSetLoader extends AsyncTaskLoader<Cursor> implements DrawableF 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); + if (coverItem != null) { + row[AlbumSetLoader.INDEX_TIMESTAMP] = coverItem.getDateInMs(); + } + coverItems.add(coverItem); cursor.addRow(row); } + synchronized (mMediaSet) { + mCoverItems = coverItems; + } return cursor; } |