Merge "Plug leaks in transitions" into klp-dev
This commit is contained in:
@@ -1451,6 +1451,8 @@ public abstract class Transition implements Cloneable {
|
||||
try {
|
||||
clone = (Transition) super.clone();
|
||||
clone.mAnimators = new ArrayList<Animator>();
|
||||
clone.mStartValues = new TransitionValuesMaps();
|
||||
clone.mEndValues = new TransitionValuesMaps();
|
||||
} catch (CloneNotSupportedException e) {}
|
||||
|
||||
return clone;
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.util.Log;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewTreeObserver;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
@@ -68,8 +69,9 @@ public class TransitionManager {
|
||||
ArrayMap<Scene, Transition> mSceneTransitions = new ArrayMap<Scene, Transition>();
|
||||
ArrayMap<Scene, ArrayMap<Scene, Transition>> mScenePairTransitions =
|
||||
new ArrayMap<Scene, ArrayMap<Scene, Transition>>();
|
||||
private static ThreadLocal<ArrayMap<ViewGroup, ArrayList<Transition>>> sRunningTransitions =
|
||||
new ThreadLocal<ArrayMap<ViewGroup, ArrayList<Transition>>>();
|
||||
private static ThreadLocal<WeakReference<ArrayMap<ViewGroup, ArrayList<Transition>>>>
|
||||
sRunningTransitions =
|
||||
new ThreadLocal<WeakReference<ArrayMap<ViewGroup, ArrayList<Transition>>>>();
|
||||
private static ArrayList<ViewGroup> sPendingTransitions = new ArrayList<ViewGroup>();
|
||||
|
||||
|
||||
@@ -184,20 +186,24 @@ public class TransitionManager {
|
||||
}
|
||||
|
||||
private static ArrayMap<ViewGroup, ArrayList<Transition>> getRunningTransitions() {
|
||||
ArrayMap<ViewGroup, ArrayList<Transition>> runningTransitions =
|
||||
WeakReference<ArrayMap<ViewGroup, ArrayList<Transition>>> runningTransitions =
|
||||
sRunningTransitions.get();
|
||||
if (runningTransitions == null) {
|
||||
runningTransitions = new ArrayMap<ViewGroup, ArrayList<Transition>>();
|
||||
if (runningTransitions == null || runningTransitions.get() == null) {
|
||||
ArrayMap<ViewGroup, ArrayList<Transition>> transitions =
|
||||
new ArrayMap<ViewGroup, ArrayList<Transition>>();
|
||||
runningTransitions = new WeakReference<ArrayMap<ViewGroup, ArrayList<Transition>>>(
|
||||
transitions);
|
||||
sRunningTransitions.set(runningTransitions);
|
||||
}
|
||||
return runningTransitions;
|
||||
return runningTransitions.get();
|
||||
}
|
||||
|
||||
private static void sceneChangeRunTransition(final ViewGroup sceneRoot,
|
||||
final Transition transition) {
|
||||
if (transition != null) {
|
||||
final ViewTreeObserver observer = sceneRoot.getViewTreeObserver();
|
||||
observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
|
||||
final ViewTreeObserver.OnPreDrawListener listener =
|
||||
new ViewTreeObserver.OnPreDrawListener() {
|
||||
public boolean onPreDraw() {
|
||||
sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
sPendingTransitions.remove(sceneRoot);
|
||||
@@ -236,7 +242,8 @@ public class TransitionManager {
|
||||
// values set on them again and avoid artifacts.
|
||||
return false;
|
||||
}
|
||||
});
|
||||
};
|
||||
observer.addOnPreDrawListener(listener);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -355,10 +362,10 @@ public class TransitionManager {
|
||||
// if (transition == null) {
|
||||
// transition = sDefaultTransition;
|
||||
// }
|
||||
// final Transition finalTransition = transition.clone();
|
||||
// sceneChangeSetup(sceneRoot, transition);
|
||||
// final Transition transitionClone = transition.clone();
|
||||
// sceneChangeSetup(sceneRoot, transitionClone);
|
||||
// Scene.setCurrentScene(sceneRoot, null);
|
||||
// sceneChangeRunTransition(sceneRoot, finalTransition);
|
||||
// sceneChangeRunTransition(sceneRoot, transitionClone);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,9 +65,6 @@ public abstract class Visibility extends Transition {
|
||||
ViewGroup endParent;
|
||||
}
|
||||
|
||||
// Temporary structure, used in calculating state in setup() and play()
|
||||
private VisibilityInfo mTmpVisibilityInfo = new VisibilityInfo();
|
||||
|
||||
@Override
|
||||
public String[] getTransitionProperties() {
|
||||
return sTransitionProperties;
|
||||
@@ -161,7 +158,7 @@ public abstract class Visibility extends Transition {
|
||||
|
||||
private VisibilityInfo getVisibilityChangeInfo(TransitionValues startValues,
|
||||
TransitionValues endValues) {
|
||||
final VisibilityInfo visInfo = mTmpVisibilityInfo;
|
||||
final VisibilityInfo visInfo = new VisibilityInfo();
|
||||
visInfo.visibilityChange = false;
|
||||
visInfo.fadeIn = false;
|
||||
if (startValues != null) {
|
||||
|
||||
@@ -992,6 +992,8 @@ public final class ViewTreeObserver {
|
||||
mData = mDataCopy;
|
||||
}
|
||||
mDataCopy = null;
|
||||
mAccess.mData.clear();
|
||||
mAccess.mSize = 0;
|
||||
}
|
||||
|
||||
int size() {
|
||||
|
||||
Reference in New Issue
Block a user