summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWu-cheng Li <wuchengli@google.com>2012-10-09 14:44:31 +0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-10-09 07:53:12 -0700
commitef9ff4b41f483c9c10ff7557bc7ffd7907449213 (patch)
tree309391c5c4c8767fa08bcc7a383276d191986550
parent91af43b868a77560bbb43d2714d5685caa179fc7 (diff)
downloadandroid_packages_apps_Snap-ef9ff4b41f483c9c10ff7557bc7ffd7907449213.tar.gz
android_packages_apps_Snap-ef9ff4b41f483c9c10ff7557bc7ffd7907449213.tar.bz2
android_packages_apps_Snap-ef9ff4b41f483c9c10ff7557bc7ffd7907449213.zip
Handle stitching progress in secure album.
- In secure album, show stitching progress only if it is captured after the device is locked. - Make sure image capture intent does not show stitching progress. bug:7285105 Change-Id: I0b3ba60fe3c03f488bea25e2f09843dd84ab6dfb
-rw-r--r--src/com/android/gallery3d/app/PhotoPage.java28
-rw-r--r--src/com/android/gallery3d/app/StitchingChangeListener.java8
-rw-r--r--src/com/android/gallery3d/data/SecureAlbum.java50
3 files changed, 58 insertions, 28 deletions
diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java
index 4537eafb3..7f8414c36 100644
--- a/src/com/android/gallery3d/app/PhotoPage.java
+++ b/src/com/android/gallery3d/app/PhotoPage.java
@@ -347,27 +347,29 @@ public class PhotoPage extends ActivityState implements
.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 +
diff --git a/src/com/android/gallery3d/app/StitchingChangeListener.java b/src/com/android/gallery3d/app/StitchingChangeListener.java
index 980f1450a..40f59a52c 100644
--- a/src/com/android/gallery3d/app/StitchingChangeListener.java
+++ b/src/com/android/gallery3d/app/StitchingChangeListener.java
@@ -16,12 +16,14 @@
package com.android.gallery3d.app;
+import com.android.gallery3d.data.Path;
+
import android.net.Uri;
public interface StitchingChangeListener {
- public void onStitchingQueued(String filePath);
+ public void onStitchingQueued(Path path);
- public void onStitchingResult(String filePath, Uri uri);
+ public void onStitchingResult(Path path, Uri uri);
- public void onStitchingProgress(String filePath, int progress);
+ public void onStitchingProgress(Path path, int progress);
}
diff --git a/src/com/android/gallery3d/data/SecureAlbum.java b/src/com/android/gallery3d/data/SecureAlbum.java
index 382de5bb2..4e33cda49 100644
--- a/src/com/android/gallery3d/data/SecureAlbum.java
+++ b/src/com/android/gallery3d/data/SecureAlbum.java
@@ -25,6 +25,7 @@ import android.provider.MediaStore.Video;
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;
@@ -43,9 +44,10 @@ public class SecureAlbum extends MediaSet implements StitchingChangeListener {
// 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;
@@ -62,7 +64,8 @@ public class SecureAlbum extends MediaSet implements StitchingChangeListener {
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) {
@@ -79,14 +82,31 @@ public class SecureAlbum extends MediaSet implements StitchingChangeListener {
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
@@ -105,7 +125,8 @@ public class SecureAlbum extends MediaSet implements StitchingChangeListener {
@Override
public int getMediaItemCount() {
- return mExistingItems.size() + (mShowUnlockItem ? 1 : 0);
+ return (mStitchingItems.size() + mExistingItems.size()
+ + (mShowUnlockItem ? 1 : 0));
}
@Override
@@ -183,19 +204,24 @@ public class SecureAlbum extends MediaSet implements StitchingChangeListener {
}
@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();
+ }
}
}