diff options
author | George Mount <mount@google.com> | 2014-06-02 07:22:59 -0700 |
---|---|---|
committer | George Mount <mount@google.com> | 2014-06-02 13:39:14 -0700 |
commit | d265bd7446e662c9597226c596e8f91eda824982 (patch) | |
tree | f9d1d7ca60b7a81b7055ddd40f5c23314d3a7958 /core/java/android | |
parent | 3da92d6df15fcbf9dbde7e3f58f778ab28abaa99 (diff) | |
download | frameworks_base-d265bd7446e662c9597226c596e8f91eda824982.zip frameworks_base-d265bd7446e662c9597226c596e8f91eda824982.tar.gz frameworks_base-d265bd7446e662c9597226c596e8f91eda824982.tar.bz2 |
Delay sending shared element position until after layout.
Bug 15380396
Also updated fade duration to 300ms now that shared element
transition can take place before fade.
Change-Id: I9053615c83b9e0938b015645de0eb6c1534cbb34
Diffstat (limited to 'core/java/android')
-rw-r--r-- | core/java/android/app/ActivityTransitionCoordinator.java | 9 | ||||
-rw-r--r-- | core/java/android/app/EnterTransitionCoordinator.java | 20 | ||||
-rw-r--r-- | core/java/android/app/ExitTransitionCoordinator.java | 2 |
3 files changed, 28 insertions, 3 deletions
diff --git a/core/java/android/app/ActivityTransitionCoordinator.java b/core/java/android/app/ActivityTransitionCoordinator.java index 5e4ddd0..b739387 100644 --- a/core/java/android/app/ActivityTransitionCoordinator.java +++ b/core/java/android/app/ActivityTransitionCoordinator.java @@ -129,8 +129,8 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { protected static final String KEY_SCALE_TYPE = "shared_element:scaleType"; protected static final String KEY_IMAGE_MATRIX = "shared_element:imageMatrix"; - // The background fade in/out duration. 150ms is pretty quick, but not abrupt. - public static final int FADE_BACKGROUND_DURATION_MS = 150; + // The background fade in/out duration. TODO: Enable tuning this. + public static final int FADE_BACKGROUND_DURATION_MS = 300; protected static final ImageView.ScaleType[] SCALE_TYPE_VALUES = ImageView.ScaleType.values(); @@ -195,6 +195,11 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { */ public static final int MSG_SHARED_ELEMENT_DESTINATION = 107; + /** + * Send the shared element positions. + */ + public static final int MSG_SEND_SHARED_ELEMENT_DESTINATION = 108; + final private Window mWindow; final protected ArrayList<String> mAllSharedElementNames; final protected ArrayList<View> mSharedElements = new ArrayList<View>(); diff --git a/core/java/android/app/EnterTransitionCoordinator.java b/core/java/android/app/EnterTransitionCoordinator.java index a8617b8..4b052e7 100644 --- a/core/java/android/app/EnterTransitionCoordinator.java +++ b/core/java/android/app/EnterTransitionCoordinator.java @@ -29,6 +29,7 @@ import android.transition.TransitionManager; import android.util.ArrayMap; import android.util.Pair; import android.view.View; +import android.view.ViewGroup; import android.view.ViewGroupOverlay; import android.view.ViewTreeObserver; import android.widget.ImageView; @@ -72,8 +73,24 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } }; mHandler.sendEmptyMessageDelayed(MSG_CANCEL, MAX_WAIT_MS); + send(MSG_SEND_SHARED_ELEMENT_DESTINATION, null); + } + } + + private void sendSharedElementDestination() { + ViewGroup decor = getDecor(); + if (!decor.isLayoutRequested()) { Bundle state = captureSharedElementState(); mResultReceiver.send(MSG_SHARED_ELEMENT_DESTINATION, state); + } else { + getDecor().getViewTreeObserver() + .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { + @Override + public boolean onPreDraw() { + getDecor().getViewTreeObserver().removeOnPreDrawListener(this); + return true; + } + }); } } @@ -105,6 +122,9 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { case MSG_CANCEL: cancel(); break; + case MSG_SEND_SHARED_ELEMENT_DESTINATION: + sendSharedElementDestination(); + break; } } diff --git a/core/java/android/app/ExitTransitionCoordinator.java b/core/java/android/app/ExitTransitionCoordinator.java index a71d649..ba1638f 100644 --- a/core/java/android/app/ExitTransitionCoordinator.java +++ b/core/java/android/app/ExitTransitionCoordinator.java @@ -294,7 +294,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { } private void finishIfNecessary() { - if (mIsReturning && mExitNotified && (mSharedElements.isEmpty() + if (mIsReturning && mExitNotified && mActivity != null && (mSharedElements.isEmpty() || mSharedElements.get(0).getVisibility() == View.INVISIBLE)) { mActivity.finish(); mActivity.overridePendingTransition(0, 0); |