Loading core/java/android/transition/Transition.java +29 −23 Original line number Diff line number Diff line Loading @@ -673,7 +673,7 @@ public abstract class Transition implements Cloneable { startDelays.put(mAnimators.size(), delay); minStartDelay = Math.min(delay, minStartDelay); } AnimationInfo info = new AnimationInfo(view, getName(), AnimationInfo info = new AnimationInfo(view, getName(), this, sceneRoot.getWindowId(), infoValues); runningAnimators.put(animator, info); mAnimators.add(animator); Loading Loading @@ -1587,30 +1587,10 @@ public abstract class Transition implements Cloneable { AnimationInfo oldInfo = runningAnimators.get(anim); if (oldInfo != null && oldInfo.view != null && oldInfo.view.getContext() == sceneRoot.getContext()) { boolean cancel = false; TransitionValues oldValues = oldInfo.values; View oldView = oldInfo.view; TransitionValues newValues = mEndValues.viewValues.get(oldView); if (oldValues != null) { // if oldValues null, then transition didn't care to stash values, // and won't get canceled if (newValues != null) { for (String key : oldValues.values.keySet()) { Object oldValue = oldValues.values.get(key); Object newValue = newValues.values.get(key); if (oldValue != null && newValue != null && !oldValue.equals(newValue)) { cancel = true; if (DBG) { Log.d(LOG_TAG, "Transition.playTransition: " + "oldValue != newValue for " + key + ": old, new = " + oldValue + ", " + newValue); } break; } } } } boolean cancel = oldInfo.transition.areValuesChanged(oldValues, newValues); if (cancel) { if (anim.isRunning() || anim.isStarted()) { if (DBG) { Loading @@ -1632,6 +1612,29 @@ public abstract class Transition implements Cloneable { runAnimators(); } boolean areValuesChanged(TransitionValues oldValues, TransitionValues newValues) { boolean valuesChanged = false; // if oldValues null, then transition didn't care to stash values, // and won't get canceled if (oldValues != null && newValues != null) { for (String key : oldValues.values.keySet()) { Object oldValue = oldValues.values.get(key); Object newValue = newValues.values.get(key); if (oldValue != null && newValue != null && !oldValue.equals(newValue)) { valuesChanged = true; if (DBG) { Log.d(LOG_TAG, "Transition.playTransition: " + "oldValue != newValue for " + key + ": old, new = " + oldValue + ", " + newValue); } break; } } } return valuesChanged; } /** * This is a utility method used by subclasses to handle standard parts of * setting up and running an Animator: it sets the {@link #getDuration() Loading Loading @@ -2070,12 +2073,15 @@ public abstract class Transition implements Cloneable { String name; TransitionValues values; WindowId windowId; Transition transition; AnimationInfo(View view, String name, WindowId windowId, TransitionValues values) { AnimationInfo(View view, String name, Transition transition, WindowId windowId, TransitionValues values) { this.view = view; this.name = name; this.values = values; this.windowId = windowId; this.transition = transition; } } Loading core/java/android/transition/Visibility.java +10 −10 Original line number Diff line number Diff line Loading @@ -331,16 +331,6 @@ public abstract class Visibility extends Transition { public void onAnimationEnd(Animator animation) { finalSceneRoot.getOverlay().remove(finalOverlayView); } @Override public void onAnimationPause(Animator animation) { finalSceneRoot.getOverlay().remove(finalOverlayView); } @Override public void onAnimationResume(Animator animation) { finalSceneRoot.getOverlay().add(finalOverlayView); } }); } return animator; Loading Loading @@ -409,6 +399,16 @@ public abstract class Visibility extends Transition { return overlayView; } @Override boolean areValuesChanged(TransitionValues oldValues, TransitionValues newValues) { VisibilityInfo changeInfo = getVisibilityChangeInfo(oldValues, newValues); if (oldValues == null && newValues == null) { return false; } return changeInfo.visibilityChange && (changeInfo.startVisibility == View.VISIBLE || changeInfo.endVisibility == View.VISIBLE); } /** * The default implementation of this method returns a null Animator. Subclasses should * override this method to make targets disappear with the desired transition. The Loading Loading
core/java/android/transition/Transition.java +29 −23 Original line number Diff line number Diff line Loading @@ -673,7 +673,7 @@ public abstract class Transition implements Cloneable { startDelays.put(mAnimators.size(), delay); minStartDelay = Math.min(delay, minStartDelay); } AnimationInfo info = new AnimationInfo(view, getName(), AnimationInfo info = new AnimationInfo(view, getName(), this, sceneRoot.getWindowId(), infoValues); runningAnimators.put(animator, info); mAnimators.add(animator); Loading Loading @@ -1587,30 +1587,10 @@ public abstract class Transition implements Cloneable { AnimationInfo oldInfo = runningAnimators.get(anim); if (oldInfo != null && oldInfo.view != null && oldInfo.view.getContext() == sceneRoot.getContext()) { boolean cancel = false; TransitionValues oldValues = oldInfo.values; View oldView = oldInfo.view; TransitionValues newValues = mEndValues.viewValues.get(oldView); if (oldValues != null) { // if oldValues null, then transition didn't care to stash values, // and won't get canceled if (newValues != null) { for (String key : oldValues.values.keySet()) { Object oldValue = oldValues.values.get(key); Object newValue = newValues.values.get(key); if (oldValue != null && newValue != null && !oldValue.equals(newValue)) { cancel = true; if (DBG) { Log.d(LOG_TAG, "Transition.playTransition: " + "oldValue != newValue for " + key + ": old, new = " + oldValue + ", " + newValue); } break; } } } } boolean cancel = oldInfo.transition.areValuesChanged(oldValues, newValues); if (cancel) { if (anim.isRunning() || anim.isStarted()) { if (DBG) { Loading @@ -1632,6 +1612,29 @@ public abstract class Transition implements Cloneable { runAnimators(); } boolean areValuesChanged(TransitionValues oldValues, TransitionValues newValues) { boolean valuesChanged = false; // if oldValues null, then transition didn't care to stash values, // and won't get canceled if (oldValues != null && newValues != null) { for (String key : oldValues.values.keySet()) { Object oldValue = oldValues.values.get(key); Object newValue = newValues.values.get(key); if (oldValue != null && newValue != null && !oldValue.equals(newValue)) { valuesChanged = true; if (DBG) { Log.d(LOG_TAG, "Transition.playTransition: " + "oldValue != newValue for " + key + ": old, new = " + oldValue + ", " + newValue); } break; } } } return valuesChanged; } /** * This is a utility method used by subclasses to handle standard parts of * setting up and running an Animator: it sets the {@link #getDuration() Loading Loading @@ -2070,12 +2073,15 @@ public abstract class Transition implements Cloneable { String name; TransitionValues values; WindowId windowId; Transition transition; AnimationInfo(View view, String name, WindowId windowId, TransitionValues values) { AnimationInfo(View view, String name, Transition transition, WindowId windowId, TransitionValues values) { this.view = view; this.name = name; this.values = values; this.windowId = windowId; this.transition = transition; } } Loading
core/java/android/transition/Visibility.java +10 −10 Original line number Diff line number Diff line Loading @@ -331,16 +331,6 @@ public abstract class Visibility extends Transition { public void onAnimationEnd(Animator animation) { finalSceneRoot.getOverlay().remove(finalOverlayView); } @Override public void onAnimationPause(Animator animation) { finalSceneRoot.getOverlay().remove(finalOverlayView); } @Override public void onAnimationResume(Animator animation) { finalSceneRoot.getOverlay().add(finalOverlayView); } }); } return animator; Loading Loading @@ -409,6 +399,16 @@ public abstract class Visibility extends Transition { return overlayView; } @Override boolean areValuesChanged(TransitionValues oldValues, TransitionValues newValues) { VisibilityInfo changeInfo = getVisibilityChangeInfo(oldValues, newValues); if (oldValues == null && newValues == null) { return false; } return changeInfo.visibilityChange && (changeInfo.startVisibility == View.VISIBLE || changeInfo.endVisibility == View.VISIBLE); } /** * The default implementation of this method returns a null Animator. Subclasses should * override this method to make targets disappear with the desired transition. The Loading