diff options
Diffstat (limited to 'src/com/android/gallery3d/app')
-rw-r--r-- | src/com/android/gallery3d/app/ActivityState.java | 47 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/StateManager.java | 23 |
2 files changed, 43 insertions, 27 deletions
diff --git a/src/com/android/gallery3d/app/ActivityState.java b/src/com/android/gallery3d/app/ActivityState.java index fe2e89e7f..ff0b32c32 100644 --- a/src/com/android/gallery3d/app/ActivityState.java +++ b/src/com/android/gallery3d/app/ActivityState.java @@ -35,6 +35,7 @@ import android.view.Window; import android.view.WindowManager; import com.android.gallery3d.R; +import com.android.gallery3d.anim.StateTransitionAnimation; import com.android.gallery3d.ui.GLView; import com.android.gallery3d.ui.PreparePageFadeoutTexture; import com.android.gallery3d.ui.RawTexture; @@ -70,19 +71,19 @@ abstract public class ActivityState { private static final String KEY_TRANSITION_IN = "transition-in"; - private RawTexture mFadeOutTexture; + public static enum StateTransition { None, Outgoing, Incoming }; + private StateTransition mNextTransition = StateTransition.None; + private StateTransitionAnimation mIntroAnimation; private GLView mContentPane; - private boolean mWantFadeOut = false; - private boolean mTransitionIn; protected ActivityState() { } protected void setContentPane(GLView content) { mContentPane = content; - if (mTransitionIn) { - mContentPane.setFadeOutTexture(mFadeOutTexture); - mFadeOutTexture = null; + if (mNextTransition != StateTransition.None) { + mContentPane.setIntroAnimation(mIntroAnimation); + mIntroAnimation = null; } mContentPane.setBackgroundColor(getBackgroundColor()); mActivity.getGLRoot().setContentPane(mContentPane); @@ -99,9 +100,6 @@ abstract public class ActivityState { } protected void onBackPressed() { - if (mActivity.getStateManager().getStateCount() > 1) { - fadeOutOnNextPause(); - } mActivity.getStateManager().finishState(this); } @@ -175,19 +173,25 @@ abstract public class ActivityState { win.setAttributes(params); } - protected void fadeOutOnNextPause() { - mWantFadeOut = true; + protected void transitionOnNextPause(Class<? extends ActivityState> outgoing, + Class<? extends ActivityState> incoming, StateTransition hint) { + if (outgoing == PhotoPage.class && incoming == AlbumPage.class) { + mNextTransition = StateTransition.Outgoing; + } else if (outgoing == AlbumPage.class && incoming == PhotoPage.class) { + mNextTransition = StateTransition.Incoming; + } else { + mNextTransition = hint; + } } protected void onPause() { if (0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED)) { ((Activity) mActivity).unregisterReceiver(mPowerIntentReceiver); } - if (mWantFadeOut) { - mWantFadeOut = false; - if (PreparePageFadeoutTexture.prepareFadeOutTexture(mActivity, mContentPane)) { - mActivity.getTransitionStore().put(KEY_TRANSITION_IN, true); - } + if (mNextTransition != StateTransition.None) { + mActivity.getTransitionStore().put(KEY_TRANSITION_IN, mNextTransition); + PreparePageFadeoutTexture.prepareFadeOutTexture(mActivity, mContentPane); + mNextTransition = StateTransition.None; } } @@ -242,9 +246,16 @@ abstract public class ActivityState { // a subclass of ActivityState should override the method to resume itself protected void onResume() { - mFadeOutTexture = mActivity.getTransitionStore().get( + RawTexture fade = mActivity.getTransitionStore().get( PreparePageFadeoutTexture.KEY_FADE_TEXTURE); - mTransitionIn = mActivity.getTransitionStore().get(KEY_TRANSITION_IN, false); + 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); + } } protected boolean onCreateActionBar(Menu menu) { diff --git a/src/com/android/gallery3d/app/StateManager.java b/src/com/android/gallery3d/app/StateManager.java index 10de5d201..fefb2c807 100644 --- a/src/com/android/gallery3d/app/StateManager.java +++ b/src/com/android/gallery3d/app/StateManager.java @@ -57,7 +57,8 @@ public class StateManager { } if (!mStack.isEmpty()) { ActivityState top = getTopState(); - top.fadeOutOnNextPause(); + top.transitionOnNextPause(top.getClass(), klass, + ActivityState.StateTransition.Incoming); if (mIsResumed) top.onPause(); } state.initialize(mActivity, data); @@ -82,7 +83,8 @@ public class StateManager { if (!mStack.isEmpty()) { ActivityState as = getTopState(); - as.fadeOutOnNextPause(); + as.transitionOnNextPause(as.getClass(), klass, + ActivityState.StateTransition.Incoming); as.mReceivedResults = state.mResult; if (mIsResumed) as.onPause(); } else { @@ -188,15 +190,18 @@ public class StateManager { // Remove the top state. mStack.pop(); state.mIsFinishing = true; - if (mIsResumed && fireOnPause) state.onPause(); + ActivityState top = !mStack.isEmpty() ? mStack.peek().activityState : null; + if (mIsResumed && fireOnPause) { + if (top != null) { + state.transitionOnNextPause(state.getClass(), top.getClass(), + ActivityState.StateTransition.Outgoing); + } + state.onPause(); + } mActivity.getGLRoot().setContentPane(null); state.onDestroy(); - if (!mStack.isEmpty()) { - // Restore the immediately previous state - ActivityState top = mStack.peek().activityState; - if (mIsResumed) top.resume(); - } + if (top != null && mIsResumed) top.resume(); } public void switchState(ActivityState oldState, @@ -211,7 +216,7 @@ 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.fadeOutOnNextPause(); + oldState.transitionOnNextPause(oldState.getClass(), klass, ActivityState.StateTransition.Incoming); } if (mIsResumed) oldState.onPause(); oldState.onDestroy(); |