diff options
author | Bobby Georgescu <georgescu@google.com> | 2012-09-06 17:14:02 -0700 |
---|---|---|
committer | Bobby Georgescu <georgescu@google.com> | 2012-09-09 00:15:48 -0700 |
commit | 6e3cdcf8604dd202b9de08e0942d40d8cbbd26f5 (patch) | |
tree | f7efb788e566c54a1b7668d6a5fb6b4a8b4cdf22 /src | |
parent | b05d8805d94dc3d60a0e1b966cf2c0cd58109938 (diff) | |
download | android_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.java | 59 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/AlbumSetPage.java | 16 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/PhotoPage.java | 137 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/TransitionStore.java | 5 | ||||
-rw-r--r-- | src/com/android/gallery3d/data/LocalAlbum.java | 5 | ||||
-rw-r--r-- | src/com/android/gallery3d/data/LocalMergeAlbum.java | 9 | ||||
-rw-r--r-- | src/com/android/gallery3d/data/MediaSet.java | 4 | ||||
-rw-r--r-- | src/com/android/gallery3d/ui/PhotoView.java | 24 | ||||
-rw-r--r-- | src/com/android/gallery3d/util/MediaSetUtils.java | 2 |
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; |