summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBobby Georgescu <georgescu@google.com>2012-10-18 14:02:16 -0700
committerBobby Georgescu <georgescu@google.com>2012-10-18 15:25:15 -0700
commit548038a155d94f674e7afc622f2a5b356a6f5328 (patch)
tree5243f41b593ee83057bd995566c96b94b204336f /src
parent155195bb5fa12d4f16872af3c30fc26701785414 (diff)
downloadandroid_packages_apps_Snap-548038a155d94f674e7afc622f2a5b356a6f5328.tar.gz
android_packages_apps_Snap-548038a155d94f674e7afc622f2a5b356a6f5328.tar.bz2
android_packages_apps_Snap-548038a155d94f674e7afc622f2a5b356a6f5328.zip
Various transition tweaks/fixes in Gallery
Bug: 7376109 -Add new animation preset for photos based on UX feedback -Fix showing of highlight when tapping album grid photo -Move StateTransition enum to StateTransitionAnimation.State Change-Id: I2ce57580fa6c5f34d9545561515031899eb41eb2
Diffstat (limited to 'src')
-rw-r--r--src/com/android/gallery3d/anim/StateTransitionAnimation.java44
-rw-r--r--src/com/android/gallery3d/app/ActivityState.java26
-rw-r--r--src/com/android/gallery3d/app/AlbumPage.java26
-rw-r--r--src/com/android/gallery3d/app/StateManager.java10
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();