am 5a745332: Merge "Delay sending shared element position until after layout." into lmp-preview-dev
* commit '5a745332b3e5bac89052484e2ae4978a9a1e1bcd': Delay sending shared element position until after layout.
This commit is contained in:
@@ -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>();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user