Loading src/com/android/gallery3d/gadget/MediaSetSource.java +171 −52 Original line number Diff line number Diff line Loading @@ -22,18 +22,109 @@ import android.os.Binder; import com.android.gallery3d.common.Utils; import com.android.gallery3d.data.ContentListener; import com.android.gallery3d.data.DataManager; import com.android.gallery3d.data.MediaItem; import com.android.gallery3d.data.MediaObject; import com.android.gallery3d.data.MediaSet; import com.android.gallery3d.data.Path; import java.util.ArrayList; import java.util.Arrays; public class MediaSetSource implements WidgetSource, ContentListener { private static final String TAG = "MediaSetSource"; private DataManager mDataManager; private Path mAlbumPath; private WidgetSource mSource; private MediaSet mRootSet; private ContentListener mListener; public MediaSetSource(DataManager manager, String albumPath) { MediaSet mediaSet = (MediaSet) manager.getMediaObject(albumPath); if (mediaSet != null) { mSource = new CheckedMediaSetSource(mediaSet); return; } // Initialize source to an empty source until the album path can be resolved mDataManager = Utils.checkNotNull(manager); mAlbumPath = Path.fromString(albumPath); mSource = new EmptySource(); monitorRootPath(); } @Override public int size() { return mSource.size(); } @Override public Bitmap getImage(int index) { return mSource.getImage(index); } @Override public Uri getContentUri(int index) { return mSource.getContentUri(index); } @Override public synchronized void setContentListener(ContentListener listener) { if (mRootSet != null) { mListener = listener; } else { mSource.setContentListener(listener); } } @Override public void reload() { mSource.reload(); } @Override public void close() { mSource.close(); } @Override public void onContentDirty() { resolveAlbumPath(); } private void monitorRootPath() { String rootPath = mDataManager.getTopSetPath(DataManager.INCLUDE_ALL); mRootSet = (MediaSet) mDataManager.getMediaObject(rootPath); mRootSet.addContentListener(this); } private synchronized void resolveAlbumPath() { if (mDataManager == null) return; MediaSet mediaSet = (MediaSet) mDataManager.getMediaObject(mAlbumPath); if (mediaSet != null) { // Clear the reference instead of removing the listener // to get around a concurrent modification exception. mRootSet = null; mSource = new CheckedMediaSetSource(mediaSet); if (mListener != null) { mListener.onContentDirty(); mSource.setContentListener(mListener); mListener = null; } mDataManager = null; mAlbumPath = null; } } private static class CheckedMediaSetSource implements WidgetSource, ContentListener { private static final int CACHE_SIZE = 32; @SuppressWarnings("unused") private static final String TAG = "MediaSetSource"; private static final String TAG = "CheckedMediaSetSource"; private MediaSet mSource; private MediaItem mCache[] = new MediaItem[CACHE_SIZE]; Loading @@ -43,7 +134,7 @@ public class MediaSetSource implements WidgetSource, ContentListener { private ContentListener mContentListener; public MediaSetSource(MediaSet source) { public CheckedMediaSetSource(MediaSet source) { mSource = Utils.checkNotNull(source); mSource.addContentListener(this); } Loading Loading @@ -112,3 +203,31 @@ public class MediaSetSource implements WidgetSource, ContentListener { if (mContentListener != null) mContentListener.onContentDirty(); } } private static class EmptySource implements WidgetSource { @Override public int size() { return 0; } @Override public Bitmap getImage(int index) { throw new UnsupportedOperationException(); } @Override public Uri getContentUri(int index) { throw new UnsupportedOperationException(); } @Override public void setContentListener(ContentListener listener) {} @Override public void reload() {} @Override public void close() {} } } src/com/android/gallery3d/gadget/WidgetService.java +1 −36 Original line number Diff line number Diff line Loading @@ -28,9 +28,6 @@ import com.android.gallery3d.R; import com.android.gallery3d.app.GalleryApp; import com.android.gallery3d.common.ApiHelper; import com.android.gallery3d.data.ContentListener; import com.android.gallery3d.data.DataManager; import com.android.gallery3d.data.MediaSet; import com.android.gallery3d.data.Path; @TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB) public class WidgetService extends RemoteViewsService { Loading @@ -52,33 +49,6 @@ public class WidgetService extends RemoteViewsService { id, type, albumPath); } private static class EmptySource implements WidgetSource { @Override public int size() { return 0; } @Override public Bitmap getImage(int index) { throw new UnsupportedOperationException(); } @Override public Uri getContentUri(int index) { throw new UnsupportedOperationException(); } @Override public void setContentListener(ContentListener listener) {} @Override public void reload() {} @Override public void close() {} } private static class PhotoRVFactory implements RemoteViewsService.RemoteViewsFactory, ContentListener { Loading @@ -99,12 +69,7 @@ public class WidgetService extends RemoteViewsService { @Override public void onCreate() { if (mType == WidgetDatabaseHelper.TYPE_ALBUM) { Path path = Path.fromString(mAlbumPath); DataManager manager = mApp.getDataManager(); MediaSet mediaSet = (MediaSet) manager.getMediaObject(path); mSource = mediaSet == null ? new EmptySource() : new MediaSetSource(mediaSet); mSource = new MediaSetSource(mApp.getDataManager(), mAlbumPath); } else { mSource = new LocalPhotoSource(mApp.getAndroidContext()); } Loading Loading
src/com/android/gallery3d/gadget/MediaSetSource.java +171 −52 Original line number Diff line number Diff line Loading @@ -22,18 +22,109 @@ import android.os.Binder; import com.android.gallery3d.common.Utils; import com.android.gallery3d.data.ContentListener; import com.android.gallery3d.data.DataManager; import com.android.gallery3d.data.MediaItem; import com.android.gallery3d.data.MediaObject; import com.android.gallery3d.data.MediaSet; import com.android.gallery3d.data.Path; import java.util.ArrayList; import java.util.Arrays; public class MediaSetSource implements WidgetSource, ContentListener { private static final String TAG = "MediaSetSource"; private DataManager mDataManager; private Path mAlbumPath; private WidgetSource mSource; private MediaSet mRootSet; private ContentListener mListener; public MediaSetSource(DataManager manager, String albumPath) { MediaSet mediaSet = (MediaSet) manager.getMediaObject(albumPath); if (mediaSet != null) { mSource = new CheckedMediaSetSource(mediaSet); return; } // Initialize source to an empty source until the album path can be resolved mDataManager = Utils.checkNotNull(manager); mAlbumPath = Path.fromString(albumPath); mSource = new EmptySource(); monitorRootPath(); } @Override public int size() { return mSource.size(); } @Override public Bitmap getImage(int index) { return mSource.getImage(index); } @Override public Uri getContentUri(int index) { return mSource.getContentUri(index); } @Override public synchronized void setContentListener(ContentListener listener) { if (mRootSet != null) { mListener = listener; } else { mSource.setContentListener(listener); } } @Override public void reload() { mSource.reload(); } @Override public void close() { mSource.close(); } @Override public void onContentDirty() { resolveAlbumPath(); } private void monitorRootPath() { String rootPath = mDataManager.getTopSetPath(DataManager.INCLUDE_ALL); mRootSet = (MediaSet) mDataManager.getMediaObject(rootPath); mRootSet.addContentListener(this); } private synchronized void resolveAlbumPath() { if (mDataManager == null) return; MediaSet mediaSet = (MediaSet) mDataManager.getMediaObject(mAlbumPath); if (mediaSet != null) { // Clear the reference instead of removing the listener // to get around a concurrent modification exception. mRootSet = null; mSource = new CheckedMediaSetSource(mediaSet); if (mListener != null) { mListener.onContentDirty(); mSource.setContentListener(mListener); mListener = null; } mDataManager = null; mAlbumPath = null; } } private static class CheckedMediaSetSource implements WidgetSource, ContentListener { private static final int CACHE_SIZE = 32; @SuppressWarnings("unused") private static final String TAG = "MediaSetSource"; private static final String TAG = "CheckedMediaSetSource"; private MediaSet mSource; private MediaItem mCache[] = new MediaItem[CACHE_SIZE]; Loading @@ -43,7 +134,7 @@ public class MediaSetSource implements WidgetSource, ContentListener { private ContentListener mContentListener; public MediaSetSource(MediaSet source) { public CheckedMediaSetSource(MediaSet source) { mSource = Utils.checkNotNull(source); mSource.addContentListener(this); } Loading Loading @@ -112,3 +203,31 @@ public class MediaSetSource implements WidgetSource, ContentListener { if (mContentListener != null) mContentListener.onContentDirty(); } } private static class EmptySource implements WidgetSource { @Override public int size() { return 0; } @Override public Bitmap getImage(int index) { throw new UnsupportedOperationException(); } @Override public Uri getContentUri(int index) { throw new UnsupportedOperationException(); } @Override public void setContentListener(ContentListener listener) {} @Override public void reload() {} @Override public void close() {} } }
src/com/android/gallery3d/gadget/WidgetService.java +1 −36 Original line number Diff line number Diff line Loading @@ -28,9 +28,6 @@ import com.android.gallery3d.R; import com.android.gallery3d.app.GalleryApp; import com.android.gallery3d.common.ApiHelper; import com.android.gallery3d.data.ContentListener; import com.android.gallery3d.data.DataManager; import com.android.gallery3d.data.MediaSet; import com.android.gallery3d.data.Path; @TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB) public class WidgetService extends RemoteViewsService { Loading @@ -52,33 +49,6 @@ public class WidgetService extends RemoteViewsService { id, type, albumPath); } private static class EmptySource implements WidgetSource { @Override public int size() { return 0; } @Override public Bitmap getImage(int index) { throw new UnsupportedOperationException(); } @Override public Uri getContentUri(int index) { throw new UnsupportedOperationException(); } @Override public void setContentListener(ContentListener listener) {} @Override public void reload() {} @Override public void close() {} } private static class PhotoRVFactory implements RemoteViewsService.RemoteViewsFactory, ContentListener { Loading @@ -99,12 +69,7 @@ public class WidgetService extends RemoteViewsService { @Override public void onCreate() { if (mType == WidgetDatabaseHelper.TYPE_ALBUM) { Path path = Path.fromString(mAlbumPath); DataManager manager = mApp.getDataManager(); MediaSet mediaSet = (MediaSet) manager.getMediaObject(path); mSource = mediaSet == null ? new EmptySource() : new MediaSetSource(mediaSet); mSource = new MediaSetSource(mApp.getDataManager(), mAlbumPath); } else { mSource = new LocalPhotoSource(mApp.getAndroidContext()); } Loading