diff options
author | Bobby Georgescu <georgescu@google.com> | 2012-10-18 15:45:47 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-10-18 15:45:48 -0700 |
commit | 25fbd8e2660350684b2f8bae5fbcabdfd432e800 (patch) | |
tree | d1a9b2dfe015d7b3f889016ce3d99c019393a3c2 | |
parent | 079ee7776fb81d1f38ea22bf553d2c7c9ba45103 (diff) | |
parent | 548038a155d94f674e7afc622f2a5b356a6f5328 (diff) | |
download | android_packages_apps_Snap-25fbd8e2660350684b2f8bae5fbcabdfd432e800.tar.gz android_packages_apps_Snap-25fbd8e2660350684b2f8bae5fbcabdfd432e800.tar.bz2 android_packages_apps_Snap-25fbd8e2660350684b2f8bae5fbcabdfd432e800.zip |
Merge "Various transition tweaks/fixes in Gallery" into gb-ub-photos-arches
-rw-r--r-- | src/com/android/gallery3d/anim/StateTransitionAnimation.java | 44 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/ActivityState.java | 26 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/AlbumPage.java | 26 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/StateManager.java | 10 |
4 files changed, 80 insertions, 26 deletions
diff --git a/src/com/android/gallery3d/anim/StateTransitionAnimation.java b/src/com/android/gallery3d/anim/StateTransitionAnimation.java index d4d59d341..8428cb866 100644 --- a/src/com/android/gallery3d/anim/StateTransitionAnimation.java +++ b/src/com/android/gallery3d/anim/StateTransitionAnimation.java @@ -29,6 +29,7 @@ public class StateTransitionAnimation extends Animation { public static class Spec { public static final Spec OUTGOING; public static final Spec INCOMING; + public static final Spec PHOTO_INCOMING; public int duration = 330; public float backgroundAlphaFrom = 0; @@ -67,9 +68,36 @@ public class StateTransitionAnimation extends Animation { INCOMING.contentScaleFrom = 0.25f; INCOMING.contentScaleTo = 1f; INCOMING.interpolator = new DecelerateInterpolator(); + + PHOTO_INCOMING = new Spec(); + PHOTO_INCOMING.overlayAlphaFrom = 1f; + PHOTO_INCOMING.overlayAlphaTo = 0f; + PHOTO_INCOMING.overlayScaleFrom = 1f; + PHOTO_INCOMING.overlayScaleTo = 1f; + PHOTO_INCOMING.contentAlphaFrom = 0f; + PHOTO_INCOMING.contentAlphaTo = 1f; + PHOTO_INCOMING.contentScaleFrom = 0.1f; + PHOTO_INCOMING.contentScaleTo = 1f; + PHOTO_INCOMING.interpolator = new DecelerateInterpolator(); + } + + private static Spec specForTransition(Transition t) { + switch (t) { + case Outgoing: + return Spec.OUTGOING; + case Incoming: + return Spec.INCOMING; + case PhotoIncoming: + return Spec.PHOTO_INCOMING; + case None: + default: + return null; + } } } + public static enum Transition { None, Outgoing, Incoming, PhotoIncoming } + private final Spec mTransitionSpec; private float mCurrentContentScale; private float mCurrentContentAlpha; @@ -79,22 +107,26 @@ public class StateTransitionAnimation extends Animation { private float mCurrentOverlayAlpha; private RawTexture mOldScreenTexture; + public StateTransitionAnimation(Transition t, RawTexture oldScreen) { + this(Spec.specForTransition(t), oldScreen); + } + public StateTransitionAnimation(Spec spec, RawTexture oldScreen) { mTransitionSpec = spec != null ? spec : Spec.OUTGOING; setDuration(mTransitionSpec.duration); setInterpolator(mTransitionSpec.interpolator); mOldScreenTexture = oldScreen; - if (mOldScreenTexture != null) { - TiledScreenNail.disableDrawPlaceholder(); - } + TiledScreenNail.disableDrawPlaceholder(); } @Override public boolean calculate(long currentTimeMillis) { boolean retval = super.calculate(currentTimeMillis); - if (mOldScreenTexture != null && !isActive()) { - mOldScreenTexture.recycle(); - mOldScreenTexture = null; + if (!isActive()) { + if (mOldScreenTexture != null) { + mOldScreenTexture.recycle(); + mOldScreenTexture = null; + } TiledScreenNail.enableDrawPlaceholder(); } return retval; diff --git a/src/com/android/gallery3d/app/ActivityState.java b/src/com/android/gallery3d/app/ActivityState.java index ff0b32c32..cdd91ff4d 100644 --- a/src/com/android/gallery3d/app/ActivityState.java +++ b/src/com/android/gallery3d/app/ActivityState.java @@ -71,8 +71,8 @@ abstract public class ActivityState { private static final String KEY_TRANSITION_IN = "transition-in"; - public static enum StateTransition { None, Outgoing, Incoming }; - private StateTransition mNextTransition = StateTransition.None; + private StateTransitionAnimation.Transition mNextTransition = + StateTransitionAnimation.Transition.None; private StateTransitionAnimation mIntroAnimation; private GLView mContentPane; @@ -81,7 +81,7 @@ abstract public class ActivityState { protected void setContentPane(GLView content) { mContentPane = content; - if (mNextTransition != StateTransition.None) { + if (mIntroAnimation != null) { mContentPane.setIntroAnimation(mIntroAnimation); mIntroAnimation = null; } @@ -174,11 +174,11 @@ abstract public class ActivityState { } protected void transitionOnNextPause(Class<? extends ActivityState> outgoing, - Class<? extends ActivityState> incoming, StateTransition hint) { + Class<? extends ActivityState> incoming, StateTransitionAnimation.Transition hint) { if (outgoing == PhotoPage.class && incoming == AlbumPage.class) { - mNextTransition = StateTransition.Outgoing; + mNextTransition = StateTransitionAnimation.Transition.Outgoing; } else if (outgoing == AlbumPage.class && incoming == PhotoPage.class) { - mNextTransition = StateTransition.Incoming; + mNextTransition = StateTransitionAnimation.Transition.PhotoIncoming; } else { mNextTransition = hint; } @@ -188,10 +188,10 @@ abstract public class ActivityState { if (0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED)) { ((Activity) mActivity).unregisterReceiver(mPowerIntentReceiver); } - if (mNextTransition != StateTransition.None) { + if (mNextTransition != StateTransitionAnimation.Transition.None) { mActivity.getTransitionStore().put(KEY_TRANSITION_IN, mNextTransition); PreparePageFadeoutTexture.prepareFadeOutTexture(mActivity, mContentPane); - mNextTransition = StateTransition.None; + mNextTransition = StateTransitionAnimation.Transition.None; } } @@ -249,12 +249,10 @@ abstract public class ActivityState { RawTexture fade = mActivity.getTransitionStore().get( PreparePageFadeoutTexture.KEY_FADE_TEXTURE); mNextTransition = mActivity.getTransitionStore().get( - KEY_TRANSITION_IN, StateTransition.None); - if (mNextTransition != StateTransition.None) { - mIntroAnimation = new StateTransitionAnimation( - (mNextTransition == StateTransition.Incoming) ? - StateTransitionAnimation.Spec.INCOMING : - StateTransitionAnimation.Spec.OUTGOING, fade); + KEY_TRANSITION_IN, StateTransitionAnimation.Transition.None); + if (mNextTransition != StateTransitionAnimation.Transition.None) { + mIntroAnimation = new StateTransitionAnimation(mNextTransition, fade); + mNextTransition = StateTransitionAnimation.Transition.None; } } diff --git a/src/com/android/gallery3d/app/AlbumPage.java b/src/com/android/gallery3d/app/AlbumPage.java index 4cf73a886..f1e149771 100644 --- a/src/com/android/gallery3d/app/AlbumPage.java +++ b/src/com/android/gallery3d/app/AlbumPage.java @@ -22,6 +22,8 @@ import android.content.Intent; import android.graphics.Rect; import android.net.Uri; import android.os.Bundle; +import android.os.Handler; +import android.os.Message; import android.os.Vibrator; import android.provider.MediaStore; import android.view.Menu; @@ -43,6 +45,7 @@ import com.android.gallery3d.ui.ActionModeHandler.ActionModeListener; import com.android.gallery3d.ui.AlbumSlotRenderer; import com.android.gallery3d.ui.DetailsHelper; import com.android.gallery3d.ui.DetailsHelper.CloseListener; +import com.android.gallery3d.ui.FadeTexture; import com.android.gallery3d.ui.GLCanvas; import com.android.gallery3d.ui.GLRoot; import com.android.gallery3d.ui.GLView; @@ -50,6 +53,7 @@ import com.android.gallery3d.ui.PhotoFallbackEffect; import com.android.gallery3d.ui.RelativePosition; import com.android.gallery3d.ui.SelectionManager; import com.android.gallery3d.ui.SlotView; +import com.android.gallery3d.ui.SynchronizedHandler; import com.android.gallery3d.util.Future; import com.android.gallery3d.util.GalleryUtils; import com.android.gallery3d.util.MediaSetUtils; @@ -105,6 +109,9 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster private boolean mInitialSynced = false; private RelativePosition mOpenCenter = new RelativePosition(); + private Handler mHandler; + private static final int MSG_PICK_PHOTO = 0; + private PhotoFallbackEffect mResumeEffect; private PhotoFallbackEffect.PositionProvider mPositionProvider = new PhotoFallbackEffect.PositionProvider() { @@ -248,8 +255,9 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster } else { // Render transition in pressed state mAlbumView.setPressedIndex(slotIndex); - - pickPhoto(slotIndex); + mAlbumView.setPressedUp(); + mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_PICK_PHOTO, slotIndex, 0), + FadeTexture.DURATION); } } @@ -370,6 +378,20 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster mLaunchedFromPhotoPage = mActivity.getStateManager().hasStateClass(PhotoPage.class); mInCameraApp = data.getBoolean(PhotoPage.KEY_APP_BRIDGE, false); + + mHandler = new SynchronizedHandler(mActivity.getGLRoot()) { + @Override + public void handleMessage(Message message) { + switch (message.what) { + case MSG_PICK_PHOTO: { + pickPhoto(message.arg1); + break; + } + default: + throw new AssertionError(message.what); + } + } + }; } @Override diff --git a/src/com/android/gallery3d/app/StateManager.java b/src/com/android/gallery3d/app/StateManager.java index fefb2c807..3293e40f7 100644 --- a/src/com/android/gallery3d/app/StateManager.java +++ b/src/com/android/gallery3d/app/StateManager.java @@ -24,6 +24,7 @@ import android.os.Parcelable; import android.view.Menu; import android.view.MenuItem; +import com.android.gallery3d.anim.StateTransitionAnimation; import com.android.gallery3d.common.Utils; import java.util.Stack; @@ -58,7 +59,7 @@ public class StateManager { if (!mStack.isEmpty()) { ActivityState top = getTopState(); top.transitionOnNextPause(top.getClass(), klass, - ActivityState.StateTransition.Incoming); + StateTransitionAnimation.Transition.Incoming); if (mIsResumed) top.onPause(); } state.initialize(mActivity, data); @@ -84,7 +85,7 @@ public class StateManager { if (!mStack.isEmpty()) { ActivityState as = getTopState(); as.transitionOnNextPause(as.getClass(), klass, - ActivityState.StateTransition.Incoming); + StateTransitionAnimation.Transition.Incoming); as.mReceivedResults = state.mResult; if (mIsResumed) as.onPause(); } else { @@ -194,7 +195,7 @@ public class StateManager { if (mIsResumed && fireOnPause) { if (top != null) { state.transitionOnNextPause(state.getClass(), top.getClass(), - ActivityState.StateTransition.Outgoing); + StateTransitionAnimation.Transition.Outgoing); } state.onPause(); } @@ -216,7 +217,8 @@ public class StateManager { mStack.pop(); if (!data.containsKey(PhotoPage.KEY_APP_BRIDGE)) { // Do not do the fade out stuff when we are switching camera modes - oldState.transitionOnNextPause(oldState.getClass(), klass, ActivityState.StateTransition.Incoming); + oldState.transitionOnNextPause(oldState.getClass(), klass, + StateTransitionAnimation.Transition.Incoming); } if (mIsResumed) oldState.onPause(); oldState.onDestroy(); |