Merge "Clear reference to EnterTransitionCoordinator when done"
This commit is contained in:
committed by
Android (Google) Code Review
commit
ea2a0eb8f5
@@ -197,13 +197,21 @@ class ActivityTransitionState {
|
||||
mHasExited = false;
|
||||
ArrayList<String> sharedElementNames = mEnterActivityOptions.getSharedElementNames();
|
||||
ResultReceiver resultReceiver = mEnterActivityOptions.getResultReceiver();
|
||||
if (mEnterActivityOptions.isReturning()) {
|
||||
final boolean isReturning = mEnterActivityOptions.isReturning();
|
||||
if (isReturning) {
|
||||
restoreExitedViews();
|
||||
activity.getWindow().getDecorView().setVisibility(View.VISIBLE);
|
||||
}
|
||||
mEnterTransitionCoordinator = new EnterTransitionCoordinator(activity,
|
||||
resultReceiver, sharedElementNames, mEnterActivityOptions.isReturning(),
|
||||
mEnterActivityOptions.isCrossTask());
|
||||
mEnterActivityOptions.isCrossTask(),
|
||||
() -> {
|
||||
if (isReturning) {
|
||||
// once it is done transitioning, we don't need the coordinator --
|
||||
// if we kept it around, it could leak Views
|
||||
mEnterTransitionCoordinator = null;
|
||||
}
|
||||
});
|
||||
if (mEnterActivityOptions.isCrossTask()) {
|
||||
mExitingFrom = new ArrayList<>(mEnterActivityOptions.getSharedElementNames());
|
||||
mExitingTo = new ArrayList<>(mEnterActivityOptions.getSharedElementNames());
|
||||
|
||||
@@ -18,6 +18,7 @@ package android.app;
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.annotation.NonNull;
|
||||
import android.app.SharedElementCallback.OnSharedElementsReadyListener;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
@@ -66,13 +67,16 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
|
||||
private final boolean mIsCrossTask;
|
||||
private Drawable mReplacedBackground;
|
||||
private ArrayList<String> mPendingExitNames;
|
||||
private Runnable mOnTransitionComplete;
|
||||
|
||||
public EnterTransitionCoordinator(Activity activity, ResultReceiver resultReceiver,
|
||||
ArrayList<String> sharedElementNames, boolean isReturning, boolean isCrossTask) {
|
||||
EnterTransitionCoordinator(Activity activity, ResultReceiver resultReceiver,
|
||||
ArrayList<String> sharedElementNames, boolean isReturning, boolean isCrossTask,
|
||||
@NonNull Runnable onTransitionComplete) {
|
||||
super(activity.getWindow(), sharedElementNames,
|
||||
getListener(activity, isReturning && !isCrossTask), isReturning);
|
||||
mActivity = activity;
|
||||
mIsCrossTask = isCrossTask;
|
||||
mOnTransitionComplete = onTransitionComplete;
|
||||
setResultReceiver(resultReceiver);
|
||||
prepareEnter();
|
||||
Bundle resultReceiverBundle = new Bundle();
|
||||
@@ -578,6 +582,10 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
|
||||
window.setBackgroundDrawable(null);
|
||||
}
|
||||
}
|
||||
if (mOnTransitionComplete != null) {
|
||||
mOnTransitionComplete.run();
|
||||
mOnTransitionComplete = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void sharedElementTransitionStarted() {
|
||||
@@ -672,6 +680,10 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
|
||||
mBackgroundAnimator.cancel();
|
||||
mBackgroundAnimator = null;
|
||||
}
|
||||
if (mOnTransitionComplete != null) {
|
||||
mOnTransitionComplete.run();
|
||||
mOnTransitionComplete = null;
|
||||
}
|
||||
super.clearState();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user