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:
George Mount
2014-06-03 17:15:47 +00:00
committed by Android Git Automerger
3 changed files with 28 additions and 3 deletions

View File

@@ -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>();

View File

@@ -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;
}
}

View File

@@ -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);