summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBobby Georgescu <georgescu@google.com>2012-09-06 17:14:02 -0700
committerBobby Georgescu <georgescu@google.com>2012-09-09 00:15:48 -0700
commit6e3cdcf8604dd202b9de08e0942d40d8cbbd26f5 (patch)
treef7efb788e566c54a1b7668d6a5fb6b4a8b4cdf22 /src
parentb05d8805d94dc3d60a0e1b966cf2c0cd58109938 (diff)
downloadandroid_packages_apps_Snap-6e3cdcf8604dd202b9de08e0942d40d8cbbd26f5.tar.gz
android_packages_apps_Snap-6e3cdcf8604dd202b9de08e0942d40d8cbbd26f5.tar.bz2
android_packages_apps_Snap-6e3cdcf8604dd202b9de08e0942d40d8cbbd26f5.zip
Reskin: switching between filmstrip and grid in album
Bug: 7050303 Bug: 6541425 Allows switching between the filmstrip and the grid views within albums and launches camera roll in filmstrip mode by default. Also fixes animation issue when animating from full-screen to grid view. Change-Id: I2a37b92c129cc090fd807973f7e3e82fed207cd3
Diffstat (limited to 'src')
-rw-r--r--src/com/android/gallery3d/app/AlbumPage.java59
-rw-r--r--src/com/android/gallery3d/app/AlbumSetPage.java16
-rw-r--r--src/com/android/gallery3d/app/PhotoPage.java137
-rw-r--r--src/com/android/gallery3d/app/TransitionStore.java5
-rw-r--r--src/com/android/gallery3d/data/LocalAlbum.java5
-rw-r--r--src/com/android/gallery3d/data/LocalMergeAlbum.java9
-rw-r--r--src/com/android/gallery3d/data/MediaSet.java4
-rw-r--r--src/com/android/gallery3d/ui/PhotoView.java24
-rw-r--r--src/com/android/gallery3d/util/MediaSetUtils.java2
9 files changed, 221 insertions, 40 deletions
diff --git a/src/com/android/gallery3d/app/AlbumPage.java b/src/com/android/gallery3d/app/AlbumPage.java
index 6c5c695cd..f99c95a6d 100644
--- a/src/com/android/gallery3d/app/AlbumPage.java
+++ b/src/com/android/gallery3d/app/AlbumPage.java
@@ -61,8 +61,6 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
@SuppressWarnings("unused")
private static final String TAG = "AlbumPage";
- private static final int MSG_PICK_PHOTO = 1;
-
public static final String KEY_MEDIA_PATH = "media-path";
public static final String KEY_PARENT_MEDIA_PATH = "parent-media-path";
public static final String KEY_SET_CENTER = "set-center";
@@ -72,7 +70,7 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
public static final String KEY_FADE_TEXTURE = "fade_texture";
private static final int REQUEST_SLIDESHOW = 1;
- private static final int REQUEST_PHOTO = 2;
+ public static final int REQUEST_PHOTO = 2;
private static final int REQUEST_DO_ANIMATION = 3;
private static final int BIT_LOADING_RELOAD = 1;
@@ -102,6 +100,7 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
private boolean mShowDetails;
private float mUserDistance; // in pixel
private Future<Integer> mSyncTask = null;
+ private boolean mLaunchedFromPhotoPage;
private int mLoadingBits = 0;
private boolean mInitialSynced = false;
@@ -261,9 +260,6 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
mSelectionManager.toggle(item.getPath());
mSlotView.invalidate();
} else {
- // Launch photos in lights out mode
- mActivity.getGLRoot().setLightsOutMode(true);
-
// Render transition in pressed state
mAlbumView.setPressedIndex(slotIndex);
prepareFadeOutTexture();
@@ -274,12 +270,28 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
}
private void pickPhoto(int slotIndex) {
+ pickPhoto(slotIndex, false);
+ }
+
+ private void pickPhoto(int slotIndex, boolean startInFilmstrip) {
if (!mIsActive) return;
+ if (!startInFilmstrip) {
+ // Launch photos in lights out mode
+ mActivity.getGLRoot().setLightsOutMode(true);
+ }
+
MediaItem item = mAlbumDataAdapter.get(slotIndex);
if (item == null) return; // Item not ready yet, ignore the click
if (mGetContent) {
onGetContent(item);
+ } else if (mLaunchedFromPhotoPage) {
+ TransitionStore transitions = mActivity.getTransitionStore();
+ transitions.put(
+ PhotoPage.KEY_ALBUMPAGE_TRANSITION,
+ PhotoPage.MSG_ALBUMPAGE_PICKED);
+ transitions.put(PhotoPage.KEY_INDEX_HINT, slotIndex);
+ onBackPressed();
} else {
// Get into the PhotoPage.
// mAlbumView.savePositions(PositionRepository.getInstance(mActivity));
@@ -291,6 +303,10 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
mMediaSetPath.toString());
data.putString(PhotoPage.KEY_MEDIA_ITEM_PATH,
item.getPath().toString());
+ data.putInt(PhotoPage.KEY_ALBUMPAGE_TRANSITION,
+ PhotoPage.MSG_ALBUMPAGE_STARTED);
+ data.putBoolean(PhotoPage.KEY_START_IN_FILMSTRIP,
+ startInFilmstrip);
mActivity.getStateManager().startStateForResult(
PhotoPage.class, REQUEST_PHOTO, data);
}
@@ -371,8 +387,11 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
mSelectionManager.selectAll();
}
- // Don't show animation if it is restored
- if (restoreState == null && data != null) {
+ mLaunchedFromPhotoPage =
+ mActivity.getStateManager().hasStateClass(PhotoPage.class);
+
+ // Don't show animation if it is restored or switched from filmstrip
+ if (!mLaunchedFromPhotoPage && restoreState == null && data != null) {
int[] center = data.getIntArray(KEY_SET_CENTER);
if (center != null) {
mOpenCenter.setAbsolutePosition(center[0], center[1]);
@@ -395,7 +414,6 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
setContentPane(mRootPane);
- Path path = mMediaSet.getPath();
boolean enableHomeButton = (mActivity.getStateManager().getStateCount() > 1) |
mParentMediaSetString != null;
mActivity.getGalleryActionBar().setDisplayOptions(enableHomeButton, true);
@@ -540,6 +558,16 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
return true;
}
+ private void prepareAnimationBackToFilmstrip(int slotIndex) {
+ prepareFadeOutTexture();
+ TransitionStore transitions = mActivity.getTransitionStore();
+ transitions.put(PhotoPage.KEY_INDEX_HINT, slotIndex);
+ transitions.put(PhotoPage.KEY_MEDIA_ITEM_PATH,
+ mAlbumDataAdapter.get(slotIndex).getPath());
+ transitions.put(PhotoPage.KEY_OPEN_ANIMATION_RECT,
+ getSlotRect(slotIndex));
+ }
+
@Override
protected boolean onItemSelected(MenuItem item) {
switch (item.getItemId()) {
@@ -567,6 +595,19 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
SlideshowPage.class, REQUEST_SLIDESHOW, data);
return true;
}
+ case R.id.action_filmstrip: {
+ int targetPhoto = mSlotView.getVisibleStart();
+ prepareAnimationBackToFilmstrip(targetPhoto);
+ if(mLaunchedFromPhotoPage) {
+ mActivity.getTransitionStore().put(
+ PhotoPage.KEY_ALBUMPAGE_TRANSITION,
+ PhotoPage.MSG_ALBUMPAGE_RESUMED);
+ onBackPressed();
+ } else {
+ pickPhoto(targetPhoto, true);
+ }
+ return true;
+ }
case R.id.action_details: {
if (mShowDetails) {
hideDetails();
diff --git a/src/com/android/gallery3d/app/AlbumSetPage.java b/src/com/android/gallery3d/app/AlbumSetPage.java
index c34e83ef8..6a2433870 100644
--- a/src/com/android/gallery3d/app/AlbumSetPage.java
+++ b/src/com/android/gallery3d/app/AlbumSetPage.java
@@ -56,6 +56,7 @@ import com.android.gallery3d.ui.SynchronizedHandler;
import com.android.gallery3d.util.Future;
import com.android.gallery3d.util.GalleryUtils;
import com.android.gallery3d.util.HelpUtils;
+import com.android.gallery3d.util.MediaSetUtils;
public class AlbumSetPage extends ActivityState implements
SelectionManager.SelectionListener, GalleryActionBar.ClusterRunner,
@@ -202,6 +203,10 @@ public class AlbumSetPage extends ActivityState implements
}
}
+ private static boolean albumShouldOpenInFilmstrip(MediaSet album) {
+ return album.isCameraRoll() && album.getMediaItemCount() > 0;
+ }
+
private void pickAlbum(int slotIndex) {
if (!mIsActive) return;
@@ -227,10 +232,19 @@ public class AlbumSetPage extends ActivityState implements
if (!mGetContent && (targetSet.getSupportedOperations()
& MediaObject.SUPPORT_IMPORT) != 0) {
data.putBoolean(AlbumPage.KEY_AUTO_SELECT_ALL, true);
+ } else if (albumShouldOpenInFilmstrip(targetSet)) {
+ data.putInt(PhotoPage.KEY_INDEX_HINT, 0);
+ data.putString(PhotoPage.KEY_MEDIA_SET_PATH,
+ mediaPath);
+ data.putBoolean(PhotoPage.KEY_START_IN_FILMSTRIP, true);
+ mActivity.getStateManager().startStateForResult(
+ PhotoPage.class, AlbumPage.REQUEST_PHOTO, data);
+ return;
}
data.putString(AlbumPage.KEY_MEDIA_PATH, mediaPath);
- boolean inAlbum = mActivity.getStateManager().hasStateClass(AlbumPage.class);
+
// We only show cluster menu in the first AlbumPage in stack
+ boolean inAlbum = mActivity.getStateManager().hasStateClass(AlbumPage.class);
data.putBoolean(AlbumPage.KEY_SHOW_CLUSTER_MENU, !inAlbum);
mActivity.getStateManager().startStateForResult(
AlbumPage.class, REQUEST_DO_ANIMATION, data);
diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java
index 292933372..7dce9179b 100644
--- a/src/com/android/gallery3d/app/PhotoPage.java
+++ b/src/com/android/gallery3d/app/PhotoPage.java
@@ -37,6 +37,7 @@ import com.actionbarsherlock.view.MenuItem;
import com.android.gallery3d.R;
import com.android.gallery3d.anim.FloatAnimation;
import com.android.gallery3d.common.ApiHelper;
+import com.android.gallery3d.common.LightCycleHelper;
import com.android.gallery3d.common.Utils;
import com.android.gallery3d.data.DataManager;
import com.android.gallery3d.data.FilterDeleteSet;
@@ -70,7 +71,6 @@ import com.android.gallery3d.ui.RawTexture;
import com.android.gallery3d.ui.SelectionManager;
import com.android.gallery3d.ui.SynchronizedHandler;
import com.android.gallery3d.util.GalleryUtils;
-import com.android.gallery3d.util.LightCycleHelper;
import com.android.gallery3d.util.MediaSetUtils;
public class PhotoPage extends ActivityState implements
@@ -84,6 +84,7 @@ public class PhotoPage extends ActivityState implements
private static final int MSG_UPDATE_ACTION_BAR = 5;
private static final int MSG_UNFREEZE_GLROOT = 6;
private static final int MSG_WANT_BARS = 7;
+ private static final int MSG_REFRESH_GRID_BUTTON = 8;
private static final int HIDE_BARS_TIMEOUT = 3500;
private static final int UNFREEZE_GLROOT_TIMEOUT = 250;
@@ -100,9 +101,15 @@ public class PhotoPage extends ActivityState implements
public static final String KEY_OPEN_ANIMATION_RECT = "open-animation-rect";
public static final String KEY_APP_BRIDGE = "app-bridge";
public static final String KEY_TREAT_BACK_AS_UP = "treat-back-as-up";
-
+ public static final String KEY_START_IN_FILMSTRIP = "start-in-filmstrip";
public static final String KEY_RETURN_INDEX_HINT = "return-index-hint";
+ public static final String KEY_ALBUMPAGE_TRANSITION = "albumpage-transition";
+ public static final int MSG_ALBUMPAGE_NONE = 0;
+ public static final int MSG_ALBUMPAGE_STARTED = 1;
+ public static final int MSG_ALBUMPAGE_RESUMED = 2;
+ public static final int MSG_ALBUMPAGE_PICKED = 4;
+
private GalleryApp mApplication;
private SelectionManager mSelectionManager;
@@ -136,10 +143,12 @@ public class PhotoPage extends ActivityState implements
private OrientationManager mOrientationManager;
private boolean mHasActivityResult;
private boolean mTreatBackAsUp;
+ private boolean mStartInFilmstrip;
+ private boolean mStartedFromAlbumPage;
private RawTexture mFadeOutTexture;
private Rect mOpenAnimationRect;
- public static final int ANIM_TIME_OPENING = 400;
+ public static final int ANIM_TIME_OPENING = 300;
// The item that is deleted (but it can still be undeleted before commiting)
private Path mDeletePath;
@@ -216,8 +225,6 @@ public class PhotoPage extends ActivityState implements
public void onCreate(Bundle data, Bundle restoreState) {
super.onCreate(data, restoreState);
mActionBar = mActivity.getGalleryActionBar();
- mFlags |= FLAG_HIDE_ACTION_BAR | FLAG_HIDE_STATUS_BAR;
- mShowBars = false;
mSelectionManager = new SelectionManager(mActivity, false);
mMenuExecutor = new MenuExecutor(mActivity, mSelectionManager);
@@ -232,12 +239,23 @@ public class PhotoPage extends ActivityState implements
mSetPathString = data.getString(KEY_MEDIA_SET_PATH);
mOriginalSetPathString = mSetPathString;
mNfcAdapter = NfcAdapter.getDefaultAdapter(mActivity.getAndroidContext());
- Path itemPath = Path.fromString(data.getString(KEY_MEDIA_ITEM_PATH));
+ String itemPathString = data.getString(KEY_MEDIA_ITEM_PATH);
+ Path itemPath = itemPathString != null ?
+ Path.fromString(data.getString(KEY_MEDIA_ITEM_PATH)) :
+ null;
mTreatBackAsUp = data.getBoolean(KEY_TREAT_BACK_AS_UP, false);
-
+ mStartInFilmstrip =
+ data.getBoolean(KEY_START_IN_FILMSTRIP, false);
+ mStartedFromAlbumPage =
+ data.getInt(KEY_ALBUMPAGE_TRANSITION,
+ MSG_ALBUMPAGE_NONE) == MSG_ALBUMPAGE_STARTED;
+ setGridButtonVisibility(!mStartedFromAlbumPage);
if (mSetPathString != null) {
mAppBridge = (AppBridge) data.getParcelable(KEY_APP_BRIDGE);
if (mAppBridge != null) {
+ mFlags |= FLAG_HIDE_ACTION_BAR | FLAG_HIDE_STATUS_BAR;
+ mShowBars = false;
+
mAppBridge.setServer(this);
mOrientationManager.lockOrientation();
@@ -278,6 +296,10 @@ public class PhotoPage extends ActivityState implements
if (mMediaSet == null) {
Log.w(TAG, "failed to restore " + mSetPathString);
}
+ if (itemPath == null) {
+ itemPath = mMediaSet.getMediaItem(mCurrentIndex, 1)
+ .get(0).getPath();
+ }
PhotoDataAdapter pda = new PhotoDataAdapter(
mActivity, mPhotoView, mMediaSet, itemPath, mCurrentIndex,
mAppBridge == null ? -1 : 0,
@@ -334,6 +356,10 @@ public class PhotoPage extends ActivityState implements
hideBars();
break;
}
+ case MSG_REFRESH_GRID_BUTTON: {
+ setGridButtonVisibility(mPhotoView.getFilmMode());
+ break;
+ }
case MSG_LOCK_ORIENTATION: {
mOrientationManager.lockOrientation();
break;
@@ -363,16 +389,7 @@ public class PhotoPage extends ActivityState implements
}
};
- // start the opening animation only if it's not restored.
- if (restoreState == null) {
- mFadeOutTexture = mActivity.getTransitionStore().get(AlbumPage.KEY_FADE_TEXTURE);
- if (mFadeOutTexture != null) {
- mBackgroundFade.start();
- BitmapScreenNail.disableDrawPlaceholder();
- mOpenAnimationRect = (Rect) data.getParcelable(KEY_OPEN_ANIMATION_RECT);
- mPhotoView.setOpenAnimationRect(mOpenAnimationRect);
- }
- }
+ mPhotoView.setFilmMode(mStartInFilmstrip);
}
@TargetApi(ApiHelper.VERSION_CODES.JELLY_BEAN)
@@ -432,6 +449,8 @@ public class PhotoPage extends ActivityState implements
// it could be null if onCreateActionBar has not been called yet
if (menu == null) return;
+ setGridButtonVisibility(mPhotoView.getFilmMode());
+
MenuItem item = menu.findItem(R.id.action_slideshow);
item.setVisible((mSecureAlbum == null) && canDoSlideShow());
if (mCurrentPhoto == null) return;
@@ -481,7 +500,7 @@ public class PhotoPage extends ActivityState implements
private void refreshHidingMessage() {
mHandler.removeMessages(MSG_HIDE_BARS);
- if (!mIsMenuVisible) {
+ if (!mIsMenuVisible && !mPhotoView.getFilmMode()) {
mHandler.sendEmptyMessageDelayed(MSG_HIDE_BARS, HIDE_BARS_TIMEOUT);
}
}
@@ -525,7 +544,9 @@ public class PhotoPage extends ActivityState implements
} else if (mAppBridge == null || !switchWithCaptureAnimation(-1)) {
// We are leaving this page. Set the result now.
setResult();
- if (mTreatBackAsUp) {
+ if (mStartInFilmstrip && !mPhotoView.getFilmMode()) {
+ mPhotoView.setFilmMode(true);
+ } else if (mTreatBackAsUp) {
onUpPressed();
} else {
super.onBackPressed();
@@ -534,7 +555,13 @@ public class PhotoPage extends ActivityState implements
}
private void onUpPressed() {
+ if (mStartInFilmstrip && !mPhotoView.getFilmMode()) {
+ mPhotoView.setFilmMode(true);
+ return;
+ }
+
if (mActivity.getStateManager().getStateCount() > 1) {
+ setResult();
super.onBackPressed();
return;
}
@@ -561,10 +588,8 @@ public class PhotoPage extends ActivityState implements
private void setResult() {
Intent result = null;
- if (!mPhotoView.getFilmMode()) {
- result = new Intent();
- result.putExtra(KEY_RETURN_INDEX_HINT, mCurrentIndex);
- }
+ result = new Intent();
+ result.putExtra(KEY_RETURN_INDEX_HINT, mCurrentIndex);
setStateResult(Activity.RESULT_OK, result);
}
@@ -649,6 +674,22 @@ public class PhotoPage extends ActivityState implements
onUpPressed();
return true;
}
+ case R.id.action_grid: {
+ if (mStartedFromAlbumPage) {
+ onUpPressed();
+ } else {
+ preparePhotoFallbackView();
+ Bundle data = new Bundle(getData());
+ data.putString(AlbumPage.KEY_MEDIA_PATH, mOriginalSetPathString);
+ data.putString(AlbumPage.KEY_PARENT_MEDIA_PATH,
+ mActivity.getDataManager().getTopSetPath(
+ DataManager.INCLUDE_ALL));
+ mActivity.getTransitionStore().put(
+ KEY_RETURN_INDEX_HINT, mCurrentIndex);
+ mActivity.getStateManager().startState(AlbumPage.class, data);
+ }
+ return true;
+ }
case R.id.action_slideshow: {
Bundle data = new Bundle();
data.putString(SlideshowPage.KEY_SET_PATH, mMediaSet.getPath().toString());
@@ -958,9 +999,59 @@ public class PhotoPage extends ActivityState implements
mActivity.getGLRoot().unfreeze();
}
+ private void setGridButtonVisibility(boolean enabled) {
+ Menu menu = mActionBar.getMenu();
+ if (menu == null) return;
+ MenuItem item = menu.findItem(R.id.action_grid);
+ if (item != null) item.setVisible(enabled);
+ }
+
+ public void onFilmModeChanged(boolean enabled) {
+ mHandler.sendEmptyMessage(MSG_REFRESH_GRID_BUTTON);
+ if (enabled) {
+ mHandler.removeMessages(MSG_HIDE_BARS);
+ } else {
+ refreshHidingMessage();
+ }
+ }
+
+ private void transitionFromAlbumPageIfNeeded() {
+ TransitionStore transitions = mActivity.getTransitionStore();
+
+ int resumeIndex = transitions.get(KEY_INDEX_HINT, -1);
+ if (resumeIndex >= 0) {
+ mCurrentIndex = resumeIndex;
+ mModel.setCurrentPhoto((Path)transitions.get(KEY_MEDIA_SET_PATH), mCurrentIndex);
+ mPhotoView.switchToImage(mCurrentIndex);
+ }
+
+ int albumPageTransition = transitions.get(
+ KEY_ALBUMPAGE_TRANSITION, MSG_ALBUMPAGE_NONE);
+
+ if(albumPageTransition != MSG_ALBUMPAGE_NONE) {
+ mPhotoView.setFilmMode(mStartInFilmstrip
+ && albumPageTransition == MSG_ALBUMPAGE_RESUMED);
+ }
+
+ mFadeOutTexture = transitions.get(AlbumPage.KEY_FADE_TEXTURE);
+ if (mFadeOutTexture != null) {
+ mBackgroundFade.start();
+ BitmapScreenNail.disableDrawPlaceholder();
+ mOpenAnimationRect =
+ albumPageTransition == MSG_ALBUMPAGE_NONE ?
+ (Rect) mData.getParcelable(KEY_OPEN_ANIMATION_RECT) :
+ (Rect) transitions.get(KEY_OPEN_ANIMATION_RECT);
+ mPhotoView.setOpenAnimationRect(mOpenAnimationRect);
+ mBackgroundFade.start();
+ }
+ }
+
@Override
protected void onResume() {
super.onResume();
+
+ transitionFromAlbumPageIfNeeded();
+
mActivity.getGLRoot().freeze();
mIsActive = true;
setContentPane(mRootPane);
diff --git a/src/com/android/gallery3d/app/TransitionStore.java b/src/com/android/gallery3d/app/TransitionStore.java
index 9c09e7ba5..e4ccd4669 100644
--- a/src/com/android/gallery3d/app/TransitionStore.java
+++ b/src/com/android/gallery3d/app/TransitionStore.java
@@ -30,6 +30,11 @@ public class TransitionStore {
return (T) mStorage.get(key);
}
+ public <T> T get(Object key, T valueIfNull) {
+ T value = get(key);
+ return value == null ? valueIfNull : value;
+ }
+
public void clear() {
mStorage.clear();
}
diff --git a/src/com/android/gallery3d/data/LocalAlbum.java b/src/com/android/gallery3d/data/LocalAlbum.java
index fed704078..eaf1e54fc 100644
--- a/src/com/android/gallery3d/data/LocalAlbum.java
+++ b/src/com/android/gallery3d/data/LocalAlbum.java
@@ -91,6 +91,11 @@ public class LocalAlbum extends MediaSet {
}
@Override
+ public boolean isCameraRoll() {
+ return mBucketId == MediaSetUtils.CAMERA_BUCKET_ID;
+ }
+
+ @Override
public Uri getContentUri() {
if (mIsImage) {
return MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon()
diff --git a/src/com/android/gallery3d/data/LocalMergeAlbum.java b/src/com/android/gallery3d/data/LocalMergeAlbum.java
index da3d5113c..cbb7492cc 100644
--- a/src/com/android/gallery3d/data/LocalMergeAlbum.java
+++ b/src/com/android/gallery3d/data/LocalMergeAlbum.java
@@ -60,6 +60,15 @@ public class LocalMergeAlbum extends MediaSet implements ContentListener {
}
}
+ @Override
+ public boolean isCameraRoll() {
+ if (mSources.length == 0) return false;
+ for(MediaSet set : mSources) {
+ if (!set.isCameraRoll()) return false;
+ }
+ return true;
+ }
+
private void updateData() {
ArrayList<MediaSet> matches = new ArrayList<MediaSet>();
int supported = mSources.length == 0 ? 0 : MediaItem.SUPPORT_ALL;
diff --git a/src/com/android/gallery3d/data/MediaSet.java b/src/com/android/gallery3d/data/MediaSet.java
index f92faa74e..87b5f56ef 100644
--- a/src/com/android/gallery3d/data/MediaSet.java
+++ b/src/com/android/gallery3d/data/MediaSet.java
@@ -95,6 +95,10 @@ public abstract class MediaSet extends MediaObject {
return false;
}
+ public boolean isCameraRoll() {
+ return false;
+ }
+
/**
* Method {@link #reload()} may process the loading task in background, this method tells
* its client whether the loading is still in process or not.
diff --git a/src/com/android/gallery3d/ui/PhotoView.java b/src/com/android/gallery3d/ui/PhotoView.java
index 0952cfc81..934638870 100644
--- a/src/com/android/gallery3d/ui/PhotoView.java
+++ b/src/com/android/gallery3d/ui/PhotoView.java
@@ -124,6 +124,7 @@ public class PhotoView extends GLView {
public void onDeleteImage(Path path, int offset);
public void onUndoDeleteImage();
public void onCommitDeleteImage();
+ public void onFilmModeChanged(boolean enabled);
}
// The rules about orientation locking:
@@ -624,7 +625,7 @@ public class PhotoView extends GLView {
if (mWasCameraCenter && mIsCamera && !isCenter && !mFilmMode) {
// Temporary disabled to de-emphasize filmstrip.
- // setFilmMode(true);
+ setFilmMode(true);
} else if (!mWasCameraCenter && isCameraCenter && mFilmMode) {
setFilmMode(false);
}
@@ -1267,18 +1268,22 @@ public class PhotoView extends GLView {
mGestureListener.setSwipingEnabled(enabled);
}
- private void setFilmMode(boolean enabled) {
+ public void setFilmMode(boolean enabled) {
if (mFilmMode == enabled) return;
mFilmMode = enabled;
mPositionController.setFilmMode(mFilmMode);
mModel.setNeedFullImage(!enabled);
mModel.setFocusHintDirection(
mFilmMode ? Model.FOCUS_HINT_PREVIOUS : Model.FOCUS_HINT_NEXT);
- mListener.onActionBarAllowed(!enabled);
-
- // Move into camera in page mode, lock
- if (!enabled && mPictures.get(0).isCamera()) {
- mListener.lockOrientation();
+ mListener.onFilmModeChanged(enabled);
+ boolean isCamera = mPictures.get(0).isCamera();
+ if (isCamera) {
+ // Move into camera in page mode, lock
+ if (!enabled) mListener.lockOrientation();
+ mListener.onActionBarAllowed(false);
+ } else {
+ mListener.onActionBarAllowed(true);
+ if (enabled) mListener.onActionBarWanted();
}
}
@@ -1306,6 +1311,7 @@ public class PhotoView extends GLView {
// move to the camera preview and show controls after resume
public void resetToFirstPicture() {
mModel.moveTo(0);
+ mListener.onActionBarAllowed(false);
setFilmMode(false);
}
@@ -1567,6 +1573,10 @@ public class PhotoView extends GLView {
// Focus switching
////////////////////////////////////////////////////////////////////////////
+ public void switchToImage(int index) {
+ mModel.moveTo(index);
+ }
+
private void switchToNextImage() {
mModel.moveTo(mModel.getCurrentIndex() + 1);
}
diff --git a/src/com/android/gallery3d/util/MediaSetUtils.java b/src/com/android/gallery3d/util/MediaSetUtils.java
index b71326a39..9f5cbba1c 100644
--- a/src/com/android/gallery3d/util/MediaSetUtils.java
+++ b/src/com/android/gallery3d/util/MediaSetUtils.java
@@ -18,6 +18,8 @@ package com.android.gallery3d.util;
import android.os.Environment;
+import com.android.gallery3d.data.LocalAlbum;
+import com.android.gallery3d.data.LocalMergeAlbum;
import com.android.gallery3d.data.MediaSet;
import com.android.gallery3d.data.Path;