From 0d84f476ed24922864f39d54e09274f6feac085e Mon Sep 17 00:00:00 2001 From: John Reck Date: Fri, 8 Mar 2013 11:19:27 -0800 Subject: Support clicking on photos to view them Change-Id: I511af0cbe46c833d81cbbd563b9c2b4feec2bffe --- src/com/android/photos/AlbumSetFragment.java | 6 ++-- src/com/android/photos/PhotoSetFragment.java | 37 +++++++++++++++++++--- src/com/android/photos/data/PhotoSetLoader.java | 9 ++++-- .../android/photos/drawables/DrawableFactory.java | 24 -------------- src/com/android/photos/shims/LoaderCompatShim.java | 26 +++++++++++++++ src/com/android/photos/shims/MediaItemsLoader.java | 11 +++++-- src/com/android/photos/shims/MediaSetLoader.java | 11 +++++-- 7 files changed, 86 insertions(+), 38 deletions(-) delete mode 100644 src/com/android/photos/drawables/DrawableFactory.java create mode 100644 src/com/android/photos/shims/LoaderCompatShim.java diff --git a/src/com/android/photos/AlbumSetFragment.java b/src/com/android/photos/AlbumSetFragment.java index 6a3760779..0d4fcc023 100644 --- a/src/com/android/photos/AlbumSetFragment.java +++ b/src/com/android/photos/AlbumSetFragment.java @@ -38,7 +38,7 @@ import android.widget.Toast; import com.android.gallery3d.R; import com.android.photos.data.AlbumSetLoader; -import com.android.photos.drawables.DrawableFactory; +import com.android.photos.shims.LoaderCompatShim; import com.android.photos.shims.MediaSetLoader; import java.util.Date; @@ -108,9 +108,9 @@ public class AlbumSetFragment extends Fragment implements OnItemClickListener, private static class AlbumSetCursorAdapter extends CursorAdapter { - private DrawableFactory mDrawableFactory; + private LoaderCompatShim mDrawableFactory; - public void setDrawableFactory(DrawableFactory factory) { + public void setDrawableFactory(LoaderCompatShim factory) { mDrawableFactory = factory; } private Date mDate = new Date(); // Used for converting timestamps for display diff --git a/src/com/android/photos/PhotoSetFragment.java b/src/com/android/photos/PhotoSetFragment.java index 5911ad0c8..18587fcf3 100644 --- a/src/com/android/photos/PhotoSetFragment.java +++ b/src/com/android/photos/PhotoSetFragment.java @@ -19,32 +19,40 @@ package com.android.photos; import android.app.Fragment; import android.app.LoaderManager.LoaderCallbacks; import android.content.Context; +import android.content.Intent; import android.content.Loader; import android.database.Cursor; import android.graphics.drawable.Drawable; +import android.net.Uri; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; import android.widget.CursorAdapter; import android.widget.GridView; import android.widget.ImageView; import com.android.gallery3d.R; +import com.android.gallery3d.app.Gallery; import com.android.photos.data.PhotoSetLoader; -import com.android.photos.drawables.DrawableFactory; +import com.android.photos.shims.LoaderCompatShim; import com.android.photos.shims.MediaItemsLoader; import com.android.photos.views.GalleryThumbnailView.GalleryThumbnailAdapter; -public class PhotoSetFragment extends Fragment implements LoaderCallbacks { +public class PhotoSetFragment extends Fragment implements LoaderCallbacks, + OnItemClickListener { private static final int LOADER_PHOTOSET = 1; private GridView mPhotoSetView; private View mEmptyView; private ThumbnailAdapter mAdapter; + private boolean mInitialLoadComplete = false; + private LoaderCompatShim mLoaderCompatShim; @Override public void onCreate(Bundle savedInstanceState) { @@ -59,6 +67,7 @@ public class PhotoSetFragment extends Fragment implements LoaderCallbacks parent, View view, int position, + long id) { + if (mLoaderCompatShim == null) { + // Not fully initialized yet, discard + return; + } + Cursor item = mAdapter.getItem(position); + Uri uri = mLoaderCompatShim.uriForItem(item); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + intent.setClass(getActivity(), Gallery.class); + startActivity(intent); } @Override @@ -78,6 +102,8 @@ public class PhotoSetFragment extends Fragment implements LoaderCallbacks loader, Cursor data) { mAdapter.swapCursor(data); + mInitialLoadComplete = true; updateEmptyStatus(); } @@ -94,14 +121,14 @@ public class PhotoSetFragment extends Fragment implements LoaderCallbacks mDrawableFactory; + private LoaderCompatShim mDrawableFactory; public ThumbnailAdapter(Context context) { super(context, null, false); mInflater = LayoutInflater.from(context); } - public void setDrawableFactory(DrawableFactory factory) { + public void setDrawableFactory(LoaderCompatShim factory) { mDrawableFactory = factory; } diff --git a/src/com/android/photos/data/PhotoSetLoader.java b/src/com/android/photos/data/PhotoSetLoader.java index 21da90694..78662cd6c 100644 --- a/src/com/android/photos/data/PhotoSetLoader.java +++ b/src/com/android/photos/data/PhotoSetLoader.java @@ -27,9 +27,9 @@ import android.provider.MediaStore.Files; import android.provider.MediaStore.Files.FileColumns; import com.android.photos.drawables.DataUriThumbnailDrawable; -import com.android.photos.drawables.DrawableFactory; +import com.android.photos.shims.LoaderCompatShim; -public class PhotoSetLoader extends CursorLoader implements DrawableFactory { +public class PhotoSetLoader extends CursorLoader implements LoaderCompatShim { private static final Uri CONTENT_URI = Files.getContentUri("external"); public static final String[] PROJECTION = new String[] { @@ -85,4 +85,9 @@ public class PhotoSetLoader extends CursorLoader implements DrawableFactory { - Drawable drawableForItem(T item, Drawable recycle); -} diff --git a/src/com/android/photos/shims/LoaderCompatShim.java b/src/com/android/photos/shims/LoaderCompatShim.java new file mode 100644 index 000000000..9da4436aa --- /dev/null +++ b/src/com/android/photos/shims/LoaderCompatShim.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.photos.shims; + +import android.graphics.drawable.Drawable; +import android.net.Uri; + + +public interface LoaderCompatShim { + Drawable drawableForItem(T item, Drawable recycle); + Uri uriForItem(T item); +} diff --git a/src/com/android/photos/shims/MediaItemsLoader.java b/src/com/android/photos/shims/MediaItemsLoader.java index 2907eaf02..9c270a571 100644 --- a/src/com/android/photos/shims/MediaItemsLoader.java +++ b/src/com/android/photos/shims/MediaItemsLoader.java @@ -21,6 +21,7 @@ import android.content.Context; import android.database.Cursor; import android.database.MatrixCursor; import android.graphics.drawable.Drawable; +import android.net.Uri; import android.provider.MediaStore.Files.FileColumns; import android.util.SparseArray; @@ -32,13 +33,12 @@ 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.PhotoSetLoader; -import com.android.photos.drawables.DrawableFactory; /** * Returns all MediaItems in a MediaSet, wrapping them in a cursor to appear * like a PhotoSetLoader */ -public class MediaItemsLoader extends AsyncTaskLoader implements DrawableFactory { +public class MediaItemsLoader extends AsyncTaskLoader implements LoaderCompatShim { private static final SyncListener sNullListener = new SyncListener() { @Override @@ -148,4 +148,11 @@ public class MediaItemsLoader extends AsyncTaskLoader implements Drawabl return MediaItem.getTargetSize(MediaItem.TYPE_MICROTHUMBNAIL); } + @Override + public Uri uriForItem(Cursor item) { + int index = item.getInt(PhotoSetLoader.INDEX_ID); + MediaItem mi = mMediaItems.get(index); + return mi == null ? null : mi.getContentUri(); + } + } diff --git a/src/com/android/photos/shims/MediaSetLoader.java b/src/com/android/photos/shims/MediaSetLoader.java index 87039c209..96c7485bb 100644 --- a/src/com/android/photos/shims/MediaSetLoader.java +++ b/src/com/android/photos/shims/MediaSetLoader.java @@ -21,6 +21,7 @@ import android.content.Context; import android.database.Cursor; import android.database.MatrixCursor; import android.graphics.drawable.Drawable; +import android.net.Uri; import com.android.gallery3d.data.ContentListener; import com.android.gallery3d.data.DataManager; @@ -29,7 +30,6 @@ import com.android.gallery3d.data.MediaSet; import com.android.gallery3d.data.MediaSet.SyncListener; import com.android.gallery3d.util.Future; import com.android.photos.data.AlbumSetLoader; -import com.android.photos.drawables.DrawableFactory; import java.util.ArrayList; @@ -37,7 +37,7 @@ import java.util.ArrayList; * Returns all MediaSets in a MediaSet, wrapping them in a cursor to appear * like a AlbumSetLoader. */ -public class MediaSetLoader extends AsyncTaskLoader implements DrawableFactory{ +public class MediaSetLoader extends AsyncTaskLoader implements LoaderCompatShim{ private static final SyncListener sNullListener = new SyncListener() { @Override @@ -140,4 +140,11 @@ public class MediaSetLoader extends AsyncTaskLoader implements DrawableF public static int getThumbnailSize() { return MediaItem.getTargetSize(MediaItem.TYPE_MICROTHUMBNAIL); } + + @Override + public Uri uriForItem(Cursor item) { + int index = item.getInt(AlbumSetLoader.INDEX_ID); + MediaSet ms = mMediaSet.getSubMediaSet(index); + return ms == null ? null : ms.getContentUri(); + } } -- cgit v1.2.3