diff --git a/core/java/android/app/ActivityTransitionCoordinator.java b/core/java/android/app/ActivityTransitionCoordinator.java index af840d0760e4d..198bfb0a414b4 100644 --- a/core/java/android/app/ActivityTransitionCoordinator.java +++ b/core/java/android/app/ActivityTransitionCoordinator.java @@ -933,6 +933,17 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { return -1; } + protected void setTransitioningViewsVisiblity(int visiblity, boolean invalidate) { + final int numElements = mTransitioningViews == null ? 0 : mTransitioningViews.size(); + for (int i = 0; i < numElements; i++) { + final View view = mTransitioningViews.get(i); + view.setTransitionVisibility(visiblity); + if (invalidate) { + view.invalidate(); + } + } + } + private static class FixedEpicenterCallback extends Transition.EpicenterCallback { private Rect mEpicenter; diff --git a/core/java/android/app/EnterTransitionCoordinator.java b/core/java/android/app/EnterTransitionCoordinator.java index fe9cc80552627..ddd0ae90fc5cb 100644 --- a/core/java/android/app/EnterTransitionCoordinator.java +++ b/core/java/android/app/EnterTransitionCoordinator.java @@ -263,6 +263,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { mViewsReadyListener = null; } showViews(mTransitioningViews, true); + setTransitioningViewsVisiblity(View.VISIBLE, true); mSharedElements.clear(); mAllSharedElementNames.clear(); mTransitioningViews.clear(); @@ -280,6 +281,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { if (!mIsViewsTransitionStarted) { mIsViewsTransitionStarted = true; showViews(mTransitioningViews, true); + setTransitioningViewsVisiblity(View.VISIBLE, true); mTransitioningViews.clear(); viewsTransitionComplete(); } @@ -506,7 +508,6 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { if (viewsTransition == null) { viewsTransitionComplete(); } else { - viewsTransition.forceVisibility(View.INVISIBLE, true); final ArrayList transitioningViews = mTransitioningViews; viewsTransition.addListener(new ContinueTransitionListener() { @Override @@ -532,12 +533,15 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { Transition transition = mergeTransitions(sharedElementTransition, viewsTransition); if (transition != null) { transition.addListener(new ContinueTransitionListener()); + if (startEnterTransition) { + setTransitioningViewsVisiblity(View.INVISIBLE, false); + } TransitionManager.beginDelayedTransition(decorView, transition); if (startSharedElementTransition && !mSharedElementNames.isEmpty()) { mSharedElements.get(0).invalidate(); - } else if (startEnterTransition && mTransitioningViews != null && - !mTransitioningViews.isEmpty()) { - mTransitioningViews.get(0).invalidate(); + } + if (startEnterTransition) { + setTransitioningViewsVisiblity(View.VISIBLE, true); } } else { transitionStarted(); @@ -613,6 +617,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { moveSharedElementsFromOverlay(); if (mTransitioningViews != null) { showViews(mTransitioningViews, true); + setTransitioningViewsVisiblity(View.VISIBLE, true); } showViews(mSharedElements, true); clearState(); diff --git a/core/java/android/app/ExitTransitionCoordinator.java b/core/java/android/app/ExitTransitionCoordinator.java index e93b40ed7210b..d54ffa0b23f91 100644 --- a/core/java/android/app/ExitTransitionCoordinator.java +++ b/core/java/android/app/ExitTransitionCoordinator.java @@ -48,27 +48,16 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { private static final long MAX_WAIT_MS = 1000; private Bundle mSharedElementBundle; - private boolean mExitNotified; - private boolean mSharedElementNotified; - private Activity mActivity; - private boolean mIsBackgroundReady; - private boolean mIsCanceled; - private Handler mHandler; - private ObjectAnimator mBackgroundAnimator; - private boolean mIsHidden; - private Bundle mExitSharedElementBundle; - private boolean mIsExitStarted; - private boolean mSharedElementsHidden; public ExitTransitionCoordinator(Activity activity, ArrayList names, @@ -129,6 +118,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { public void resetViews() { if (mTransitioningViews != null) { showViews(mTransitioningViews, true); + setTransitioningViewsVisiblity(View.VISIBLE, true); } showViews(mSharedElements, true); mIsHidden = true; @@ -276,8 +266,9 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { Transition transition = getExitTransition(); ViewGroup decorView = getDecor(); if (transition != null && decorView != null && mTransitioningViews != null) { + setTransitioningViewsVisiblity(View.VISIBLE, false); TransitionManager.beginDelayedTransition(decorView, transition); - mTransitioningViews.get(0).invalidate(); + setTransitioningViewsVisiblity(View.INVISIBLE, true); } else { transitionStarted(); } @@ -325,6 +316,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { viewsTransitionComplete(); if (mIsHidden && transitioningViews != null) { showViews(transitioningViews, true); + setTransitioningViewsVisiblity(View.VISIBLE, true); } if (mSharedElementBundle != null) { delayCancel(); @@ -332,7 +324,6 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { super.onTransitionEnd(transition); } }); - viewsTransition.forceVisibility(View.INVISIBLE, false); } return viewsTransition; } @@ -369,9 +360,15 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { if (transition != null && decorView != null) { setGhostVisibility(View.INVISIBLE); scheduleGhostVisibilityChange(View.INVISIBLE); + if (viewsTransition != null) { + setTransitioningViewsVisiblity(View.VISIBLE, false); + } TransitionManager.beginDelayedTransition(decorView, transition); scheduleGhostVisibilityChange(View.VISIBLE); setGhostVisibility(View.VISIBLE); + if (viewsTransition != null) { + setTransitioningViewsVisiblity(View.INVISIBLE, true); + } decorView.invalidate(); } else { transitionStarted(); diff --git a/core/java/android/transition/Transition.java b/core/java/android/transition/Transition.java index 48614c0c10143..4afa9fef99120 100644 --- a/core/java/android/transition/Transition.java +++ b/core/java/android/transition/Transition.java @@ -2191,9 +2191,6 @@ public abstract class Transition implements Cloneable { return mNameOverrides; } - /** @hide */ - public void forceVisibility(int visibility, boolean isStartValue) {} - @Override public String toString() { return toString(""); diff --git a/core/java/android/transition/TransitionSet.java b/core/java/android/transition/TransitionSet.java index 09d2c69138beb..2f4ac95f97486 100644 --- a/core/java/android/transition/TransitionSet.java +++ b/core/java/android/transition/TransitionSet.java @@ -318,15 +318,6 @@ public class TransitionSet extends Transition { } } - /** @hide */ - @Override - public void forceVisibility(int visibility, boolean isStartValue) { - int numTransitions = mTransitions.size(); - for (int i = 0; i < numTransitions; i++) { - mTransitions.get(i).forceVisibility(visibility, isStartValue); - } - } - /** * Removes the specified child transition from this set. * diff --git a/core/java/android/transition/Visibility.java b/core/java/android/transition/Visibility.java index eb95a02dd75bd..4eaab3748b1ed 100644 --- a/core/java/android/transition/Visibility.java +++ b/core/java/android/transition/Visibility.java @@ -85,9 +85,6 @@ public abstract class Visibility extends Transition { private int mMode = MODE_IN | MODE_OUT; - private int mForcedStartVisibility = -1; - private int mForcedEndVisibility = -1; - public Visibility() {} public Visibility(Context context, AttributeSet attrs) { @@ -132,13 +129,8 @@ public abstract class Visibility extends Transition { return sTransitionProperties; } - private void captureValues(TransitionValues transitionValues, int forcedVisibility) { - int visibility; - if (forcedVisibility != -1) { - visibility = forcedVisibility; - } else { - visibility = transitionValues.view.getVisibility(); - } + private void captureValues(TransitionValues transitionValues) { + int visibility = transitionValues.view.getVisibility(); transitionValues.values.put(PROPNAME_VISIBILITY, visibility); transitionValues.values.put(PROPNAME_PARENT, transitionValues.view.getParent()); int[] loc = new int[2]; @@ -148,22 +140,12 @@ public abstract class Visibility extends Transition { @Override public void captureStartValues(TransitionValues transitionValues) { - captureValues(transitionValues, mForcedStartVisibility); + captureValues(transitionValues); } @Override public void captureEndValues(TransitionValues transitionValues) { - captureValues(transitionValues, mForcedEndVisibility); - } - - /** @hide */ - @Override - public void forceVisibility(int visibility, boolean isStartValue) { - if (isStartValue) { - mForcedStartVisibility = visibility; - } else { - mForcedEndVisibility = visibility; - } + captureValues(transitionValues); } /** @@ -298,12 +280,6 @@ public abstract class Visibility extends Transition { return null; } } - final boolean isForcedVisibility = mForcedStartVisibility != -1 || - mForcedEndVisibility != -1; - if (isForcedVisibility) { - // Make sure that we reverse the effect of onDisappear's setTransitionAlpha(0) - endValues.view.setTransitionAlpha(1); - } return onAppear(sceneRoot, endValues.view, startValues, endValues); } @@ -447,21 +423,16 @@ public abstract class Visibility extends Transition { } if (viewToKeep != null) { - int originalVisibility = -1; - final boolean isForcedVisibility = mForcedStartVisibility != -1 || - mForcedEndVisibility != -1; - if (!isForcedVisibility) { - originalVisibility = viewToKeep.getVisibility(); - viewToKeep.setTransitionVisibility(View.VISIBLE); - } + int originalVisibility = viewToKeep.getVisibility(); + viewToKeep.setTransitionVisibility(View.VISIBLE); Animator animator = onDisappear(sceneRoot, viewToKeep, startValues, endValues); if (animator != null) { DisappearListener disappearListener = new DisappearListener(viewToKeep, - finalVisibility, isForcedVisibility); + finalVisibility); animator.addListener(disappearListener); animator.addPauseListener(disappearListener); addListener(disappearListener); - } else if (!isForcedVisibility) { + } else { viewToKeep.setTransitionVisibility(originalVisibility); } return animator; @@ -509,18 +480,15 @@ public abstract class Visibility extends Transition { private static class DisappearListener extends TransitionListenerAdapter implements AnimatorListener, AnimatorPauseListener { - private final boolean mIsForcedVisibility; private final View mView; private final int mFinalVisibility; private final ViewGroup mParent; private boolean mLayoutSuppressed; - private boolean mFinalVisibilitySet = false; boolean mCanceled = false; - public DisappearListener(View view, int finalVisibility, boolean isForcedVisibility) { + public DisappearListener(View view, int finalVisibility) { this.mView = view; - this.mIsForcedVisibility = isForcedVisibility; this.mFinalVisibility = finalVisibility; this.mParent = (ViewGroup) view.getParent(); // Prevent a layout from including mView in its calculation. @@ -529,14 +497,14 @@ public abstract class Visibility extends Transition { @Override public void onAnimationPause(Animator animation) { - if (!mCanceled && !mIsForcedVisibility) { + if (!mCanceled) { mView.setTransitionVisibility(mFinalVisibility); } } @Override public void onAnimationResume(Animator animation) { - if (!mCanceled && !mIsForcedVisibility) { + if (!mCanceled) { mView.setTransitionVisibility(View.VISIBLE); } } @@ -576,15 +544,10 @@ public abstract class Visibility extends Transition { private void hideViewWhenNotCanceled() { if (!mCanceled) { - if (mIsForcedVisibility) { - mView.setTransitionAlpha(0); - } else if (!mFinalVisibilitySet) { - // Recreate the parent's display list in case it includes mView. - mView.setTransitionVisibility(mFinalVisibility); - if (mParent != null) { - mParent.invalidate(); - } - mFinalVisibilitySet = true; + // Recreate the parent's display list in case it includes mView. + mView.setTransitionVisibility(mFinalVisibility); + if (mParent != null) { + mParent.invalidate(); } } // Layout is allowed now that the View is in its final state @@ -592,7 +555,7 @@ public abstract class Visibility extends Transition { } private void suppressLayout(boolean suppress) { - if (mLayoutSuppressed != suppress && mParent != null && !mIsForcedVisibility) { + if (mLayoutSuppressed != suppress && mParent != null) { mLayoutSuppressed = suppress; mParent.suppressLayout(suppress); }