summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2019-09-20 22:51:15 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-09-20 22:51:15 +0000
commitea2a0eb8f53ee17da88d7df7042a6bc39a37b6a6 (patch)
tree0066b89a3bd01e2097d785058f0c4fc57ef7ed66
parentc75ccb89037a031eab8d8d044db00e70c2a750e3 (diff)
parent785334aeafcbe0932b8608771b24fa7aecda1a3b (diff)
Merge "Clear reference to EnterTransitionCoordinator when done"
-rw-r--r--core/java/android/app/ActivityTransitionState.java12
-rw-r--r--core/java/android/app/EnterTransitionCoordinator.java16
2 files changed, 24 insertions, 4 deletions
diff --git a/core/java/android/app/ActivityTransitionState.java b/core/java/android/app/ActivityTransitionState.java
index 3a95839d2d12..0f9a6e63a1d2 100644
--- a/core/java/android/app/ActivityTransitionState.java
+++ b/core/java/android/app/ActivityTransitionState.java
@@ -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());
diff --git a/core/java/android/app/EnterTransitionCoordinator.java b/core/java/android/app/EnterTransitionCoordinator.java
index bce243cc6108..905f47540fd9 100644
--- a/core/java/android/app/EnterTransitionCoordinator.java
+++ b/core/java/android/app/EnterTransitionCoordinator.java
@@ -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();
}