summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/app
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/gallery3d/app')
-rw-r--r--src/com/android/gallery3d/app/ActivityState.java47
-rw-r--r--src/com/android/gallery3d/app/StateManager.java23
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();