.getMediaObject(screenNailItemPath);
mScreenNailItem.setScreenNail(mAppBridge.attachScreenNail());
- // Check if the path is a secure album.
- if (SecureSource.isSecurePath(mSetPathString)) {
- mSecureAlbum = (SecureAlbum) mActivity.getDataManager()
- .getMediaSet(mSetPathString);
- mShowSpinner = false;
- }
if (data.getBoolean(KEY_SHOW_WHEN_LOCKED, false)) {
// Set the flag to be on top of the lock screen.
mFlags |= FLAG_SHOW_WHEN_LOCKED;
}
- // Don't display "empty album" action item for capture intents
- if(!mSetPathString.equals("/local/all/0")) {
+ // Don't display "empty album" action item or panorama
+ // progress for capture intents.
+ if (!mSetPathString.equals("/local/all/0")) {
+ // Check if the path is a secure album.
+ if (SecureSource.isSecurePath(mSetPathString)) {
+ mSecureAlbum = (SecureAlbum) mActivity.getDataManager()
+ .getMediaSet(mSetPathString);
+ mShowSpinner = false;
+ } else {
+ // Use lightcycle album to handle panorama progress if
+ // the path is not a secure album.
+ if (LightCycleHelper.hasLightCycleCapture(mActivity.getAndroidContext())) {
+ mSetPathString = LightCycleHelper.wrapGalleryPath(mSetPathString);
+ }
+ }
mSetPathString = "/filter/empty/{"+mSetPathString+"}";
}
- // Add support for showing panorama progress.
- if (LightCycleHelper.hasLightCycleCapture(mActivity.getAndroidContext())) {
- mSetPathString = LightCycleHelper.wrapGalleryPath(mSetPathString);
- }
-
// Combine the original MediaSet with the one for ScreenNail
// from AppBridge.
mSetPathString = "/combo/item/{" + screenNailSetPath +
import com.android.gallery3d.app.GalleryApp;
import com.android.gallery3d.app.StitchingChangeListener;
+import com.android.gallery3d.app.StitchingProgressManager;
import com.android.gallery3d.util.MediaSetUtils;
import java.util.ArrayList;
// The types of items in mAllItems. True is video and false is image.
private ArrayList<Boolean> mAllItemTypes = new ArrayList<Boolean>();
private ArrayList<Path> mExistingItems = new ArrayList<Path>();
- private ArrayList<String> mStitchingFilePaths = new ArrayList<String>();
+ private ArrayList<Path> mStitchingItems = new ArrayList<Path>();
private Context mContext;
private DataManager mDataManager;
+ private StitchingProgressManager mStitchingProgressManager;
private static final Uri[] mWatchUris =
{Images.Media.EXTERNAL_CONTENT_URI, Video.Media.EXTERNAL_CONTENT_URI};
private final ChangeNotifier mNotifier;
mUnlockItem = unlock;
mShowUnlockItem = (!isCameraBucketEmpty(Images.Media.EXTERNAL_CONTENT_URI)
|| !isCameraBucketEmpty(Video.Media.EXTERNAL_CONTENT_URI));
- application.getStitchingProgressManager().addChangeListener(this);
+ mStitchingProgressManager = application.getStitchingProgressManager();
+ mStitchingProgressManager.addChangeListener(this);
}
public void addMediaItem(boolean isVideo, int id) {
mNotifier.fakeChange();
}
+ // The sequence is stitching items, local media items, and unlock image.
@Override
public ArrayList<MediaItem> getMediaItem(int start, int count) {
- if (start >= mExistingItems.size() + 1) {
+ int stitchingCount = mStitchingItems.size();
+ int existingCount = mExistingItems.size();
+ if (start >= stitchingCount + existingCount + 1) {
return new ArrayList<MediaItem>();
}
- int end = Math.min(start + count, mExistingItems.size());
- ArrayList<Path> subset = new ArrayList<Path>(
- mExistingItems.subList(start, end));
+
+ // Add paths of requested stitching items.
+ int end = Math.min(start + count, stitchingCount + existingCount);
+ ArrayList<Path> subset = new ArrayList<Path>();
+ if (start < stitchingCount) {
+ subset.addAll(mStitchingItems.subList(
+ start, Math.min(stitchingCount, end)));
+ }
+
+ // Add paths of requested local media items.
+ if (end >= stitchingCount) {
+ int existingStart = Math.max(0, start - stitchingCount);
+ int existingEnd = end - stitchingCount;
+ subset.addAll(mExistingItems.subList(existingStart, existingEnd));
+ }
+
+ // Convert paths to media items.
final MediaItem[] buf = new MediaItem[end - start];
ItemConsumer consumer = new ItemConsumer() {
@Override
@Override
public int getMediaItemCount() {
- return mExistingItems.size() + (mShowUnlockItem ? 1 : 0);
+ return (mStitchingItems.size() + mExistingItems.size()
+ + (mShowUnlockItem ? 1 : 0));
}
@Override
}
@Override
- public void onStitchingQueued(String filePath) {
- mStitchingFilePaths.add(filePath);
+ public void onStitchingQueued(Path path) {
+ mStitchingItems.add(path);
+ notifyContentChanged();
}
@Override
- public void onStitchingResult(String filePath, Uri uri) {
- if (mStitchingFilePaths.remove(filePath)) {
+ public void onStitchingResult(Path path, Uri uri) {
+ if (mStitchingItems.remove(path)) {
int id = Integer.parseInt(uri.getLastPathSegment());
addMediaItem(false, id);
+ notifyContentChanged();
}
}
@Override
- public void onStitchingProgress(String filePath, int progress) {
+ public void onStitchingProgress(Path path, int progress) {
+ if (mStitchingItems.contains(path)) {
+ notifyContentChanged();
+ }
}
}