Merge "Don\'t use forceVisibility for Activity Transitions." into nyc-dev

am: d6505566a9

* commit 'd6505566a9bc606e84619a7b7a801557e795f1df':
  Don't use forceVisibility for Activity Transitions.
This commit is contained in:
George Mount
2016-02-16 21:52:38 +00:00
committed by android-build-merger
6 changed files with 46 additions and 82 deletions

View File

@@ -933,6 +933,17 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
return -1; 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 static class FixedEpicenterCallback extends Transition.EpicenterCallback {
private Rect mEpicenter; private Rect mEpicenter;

View File

@@ -263,6 +263,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
mViewsReadyListener = null; mViewsReadyListener = null;
} }
showViews(mTransitioningViews, true); showViews(mTransitioningViews, true);
setTransitioningViewsVisiblity(View.VISIBLE, true);
mSharedElements.clear(); mSharedElements.clear();
mAllSharedElementNames.clear(); mAllSharedElementNames.clear();
mTransitioningViews.clear(); mTransitioningViews.clear();
@@ -280,6 +281,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
if (!mIsViewsTransitionStarted) { if (!mIsViewsTransitionStarted) {
mIsViewsTransitionStarted = true; mIsViewsTransitionStarted = true;
showViews(mTransitioningViews, true); showViews(mTransitioningViews, true);
setTransitioningViewsVisiblity(View.VISIBLE, true);
mTransitioningViews.clear(); mTransitioningViews.clear();
viewsTransitionComplete(); viewsTransitionComplete();
} }
@@ -506,7 +508,6 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
if (viewsTransition == null) { if (viewsTransition == null) {
viewsTransitionComplete(); viewsTransitionComplete();
} else { } else {
viewsTransition.forceVisibility(View.INVISIBLE, true);
final ArrayList<View> transitioningViews = mTransitioningViews; final ArrayList<View> transitioningViews = mTransitioningViews;
viewsTransition.addListener(new ContinueTransitionListener() { viewsTransition.addListener(new ContinueTransitionListener() {
@Override @Override
@@ -532,12 +533,15 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
Transition transition = mergeTransitions(sharedElementTransition, viewsTransition); Transition transition = mergeTransitions(sharedElementTransition, viewsTransition);
if (transition != null) { if (transition != null) {
transition.addListener(new ContinueTransitionListener()); transition.addListener(new ContinueTransitionListener());
if (startEnterTransition) {
setTransitioningViewsVisiblity(View.INVISIBLE, false);
}
TransitionManager.beginDelayedTransition(decorView, transition); TransitionManager.beginDelayedTransition(decorView, transition);
if (startSharedElementTransition && !mSharedElementNames.isEmpty()) { if (startSharedElementTransition && !mSharedElementNames.isEmpty()) {
mSharedElements.get(0).invalidate(); mSharedElements.get(0).invalidate();
} else if (startEnterTransition && mTransitioningViews != null && }
!mTransitioningViews.isEmpty()) { if (startEnterTransition) {
mTransitioningViews.get(0).invalidate(); setTransitioningViewsVisiblity(View.VISIBLE, true);
} }
} else { } else {
transitionStarted(); transitionStarted();
@@ -613,6 +617,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
moveSharedElementsFromOverlay(); moveSharedElementsFromOverlay();
if (mTransitioningViews != null) { if (mTransitioningViews != null) {
showViews(mTransitioningViews, true); showViews(mTransitioningViews, true);
setTransitioningViewsVisiblity(View.VISIBLE, true);
} }
showViews(mSharedElements, true); showViews(mSharedElements, true);
clearState(); clearState();

View File

@@ -48,27 +48,16 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
private static final long MAX_WAIT_MS = 1000; private static final long MAX_WAIT_MS = 1000;
private Bundle mSharedElementBundle; private Bundle mSharedElementBundle;
private boolean mExitNotified; private boolean mExitNotified;
private boolean mSharedElementNotified; private boolean mSharedElementNotified;
private Activity mActivity; private Activity mActivity;
private boolean mIsBackgroundReady; private boolean mIsBackgroundReady;
private boolean mIsCanceled; private boolean mIsCanceled;
private Handler mHandler; private Handler mHandler;
private ObjectAnimator mBackgroundAnimator; private ObjectAnimator mBackgroundAnimator;
private boolean mIsHidden; private boolean mIsHidden;
private Bundle mExitSharedElementBundle; private Bundle mExitSharedElementBundle;
private boolean mIsExitStarted; private boolean mIsExitStarted;
private boolean mSharedElementsHidden; private boolean mSharedElementsHidden;
public ExitTransitionCoordinator(Activity activity, ArrayList<String> names, public ExitTransitionCoordinator(Activity activity, ArrayList<String> names,
@@ -129,6 +118,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
public void resetViews() { public void resetViews() {
if (mTransitioningViews != null) { if (mTransitioningViews != null) {
showViews(mTransitioningViews, true); showViews(mTransitioningViews, true);
setTransitioningViewsVisiblity(View.VISIBLE, true);
} }
showViews(mSharedElements, true); showViews(mSharedElements, true);
mIsHidden = true; mIsHidden = true;
@@ -276,8 +266,9 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
Transition transition = getExitTransition(); Transition transition = getExitTransition();
ViewGroup decorView = getDecor(); ViewGroup decorView = getDecor();
if (transition != null && decorView != null && mTransitioningViews != null) { if (transition != null && decorView != null && mTransitioningViews != null) {
setTransitioningViewsVisiblity(View.VISIBLE, false);
TransitionManager.beginDelayedTransition(decorView, transition); TransitionManager.beginDelayedTransition(decorView, transition);
mTransitioningViews.get(0).invalidate(); setTransitioningViewsVisiblity(View.INVISIBLE, true);
} else { } else {
transitionStarted(); transitionStarted();
} }
@@ -325,6 +316,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
viewsTransitionComplete(); viewsTransitionComplete();
if (mIsHidden && transitioningViews != null) { if (mIsHidden && transitioningViews != null) {
showViews(transitioningViews, true); showViews(transitioningViews, true);
setTransitioningViewsVisiblity(View.VISIBLE, true);
} }
if (mSharedElementBundle != null) { if (mSharedElementBundle != null) {
delayCancel(); delayCancel();
@@ -332,7 +324,6 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
super.onTransitionEnd(transition); super.onTransitionEnd(transition);
} }
}); });
viewsTransition.forceVisibility(View.INVISIBLE, false);
} }
return viewsTransition; return viewsTransition;
} }
@@ -369,9 +360,15 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
if (transition != null && decorView != null) { if (transition != null && decorView != null) {
setGhostVisibility(View.INVISIBLE); setGhostVisibility(View.INVISIBLE);
scheduleGhostVisibilityChange(View.INVISIBLE); scheduleGhostVisibilityChange(View.INVISIBLE);
if (viewsTransition != null) {
setTransitioningViewsVisiblity(View.VISIBLE, false);
}
TransitionManager.beginDelayedTransition(decorView, transition); TransitionManager.beginDelayedTransition(decorView, transition);
scheduleGhostVisibilityChange(View.VISIBLE); scheduleGhostVisibilityChange(View.VISIBLE);
setGhostVisibility(View.VISIBLE); setGhostVisibility(View.VISIBLE);
if (viewsTransition != null) {
setTransitioningViewsVisiblity(View.INVISIBLE, true);
}
decorView.invalidate(); decorView.invalidate();
} else { } else {
transitionStarted(); transitionStarted();

View File

@@ -2191,9 +2191,6 @@ public abstract class Transition implements Cloneable {
return mNameOverrides; return mNameOverrides;
} }
/** @hide */
public void forceVisibility(int visibility, boolean isStartValue) {}
@Override @Override
public String toString() { public String toString() {
return toString(""); return toString("");

View File

@@ -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. * Removes the specified child transition from this set.
* *

View File

@@ -85,9 +85,6 @@ public abstract class Visibility extends Transition {
private int mMode = MODE_IN | MODE_OUT; private int mMode = MODE_IN | MODE_OUT;
private int mForcedStartVisibility = -1;
private int mForcedEndVisibility = -1;
public Visibility() {} public Visibility() {}
public Visibility(Context context, AttributeSet attrs) { public Visibility(Context context, AttributeSet attrs) {
@@ -132,13 +129,8 @@ public abstract class Visibility extends Transition {
return sTransitionProperties; return sTransitionProperties;
} }
private void captureValues(TransitionValues transitionValues, int forcedVisibility) { private void captureValues(TransitionValues transitionValues) {
int visibility; int visibility = transitionValues.view.getVisibility();
if (forcedVisibility != -1) {
visibility = forcedVisibility;
} else {
visibility = transitionValues.view.getVisibility();
}
transitionValues.values.put(PROPNAME_VISIBILITY, visibility); transitionValues.values.put(PROPNAME_VISIBILITY, visibility);
transitionValues.values.put(PROPNAME_PARENT, transitionValues.view.getParent()); transitionValues.values.put(PROPNAME_PARENT, transitionValues.view.getParent());
int[] loc = new int[2]; int[] loc = new int[2];
@@ -148,22 +140,12 @@ public abstract class Visibility extends Transition {
@Override @Override
public void captureStartValues(TransitionValues transitionValues) { public void captureStartValues(TransitionValues transitionValues) {
captureValues(transitionValues, mForcedStartVisibility); captureValues(transitionValues);
} }
@Override @Override
public void captureEndValues(TransitionValues transitionValues) { public void captureEndValues(TransitionValues transitionValues) {
captureValues(transitionValues, mForcedEndVisibility); captureValues(transitionValues);
}
/** @hide */
@Override
public void forceVisibility(int visibility, boolean isStartValue) {
if (isStartValue) {
mForcedStartVisibility = visibility;
} else {
mForcedEndVisibility = visibility;
}
} }
/** /**
@@ -298,12 +280,6 @@ public abstract class Visibility extends Transition {
return null; 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); return onAppear(sceneRoot, endValues.view, startValues, endValues);
} }
@@ -447,21 +423,16 @@ public abstract class Visibility extends Transition {
} }
if (viewToKeep != null) { if (viewToKeep != null) {
int originalVisibility = -1; int originalVisibility = viewToKeep.getVisibility();
final boolean isForcedVisibility = mForcedStartVisibility != -1 || viewToKeep.setTransitionVisibility(View.VISIBLE);
mForcedEndVisibility != -1;
if (!isForcedVisibility) {
originalVisibility = viewToKeep.getVisibility();
viewToKeep.setTransitionVisibility(View.VISIBLE);
}
Animator animator = onDisappear(sceneRoot, viewToKeep, startValues, endValues); Animator animator = onDisappear(sceneRoot, viewToKeep, startValues, endValues);
if (animator != null) { if (animator != null) {
DisappearListener disappearListener = new DisappearListener(viewToKeep, DisappearListener disappearListener = new DisappearListener(viewToKeep,
finalVisibility, isForcedVisibility); finalVisibility);
animator.addListener(disappearListener); animator.addListener(disappearListener);
animator.addPauseListener(disappearListener); animator.addPauseListener(disappearListener);
addListener(disappearListener); addListener(disappearListener);
} else if (!isForcedVisibility) { } else {
viewToKeep.setTransitionVisibility(originalVisibility); viewToKeep.setTransitionVisibility(originalVisibility);
} }
return animator; return animator;
@@ -509,18 +480,15 @@ public abstract class Visibility extends Transition {
private static class DisappearListener private static class DisappearListener
extends TransitionListenerAdapter implements AnimatorListener, AnimatorPauseListener { extends TransitionListenerAdapter implements AnimatorListener, AnimatorPauseListener {
private final boolean mIsForcedVisibility;
private final View mView; private final View mView;
private final int mFinalVisibility; private final int mFinalVisibility;
private final ViewGroup mParent; private final ViewGroup mParent;
private boolean mLayoutSuppressed; private boolean mLayoutSuppressed;
private boolean mFinalVisibilitySet = false;
boolean mCanceled = false; boolean mCanceled = false;
public DisappearListener(View view, int finalVisibility, boolean isForcedVisibility) { public DisappearListener(View view, int finalVisibility) {
this.mView = view; this.mView = view;
this.mIsForcedVisibility = isForcedVisibility;
this.mFinalVisibility = finalVisibility; this.mFinalVisibility = finalVisibility;
this.mParent = (ViewGroup) view.getParent(); this.mParent = (ViewGroup) view.getParent();
// Prevent a layout from including mView in its calculation. // Prevent a layout from including mView in its calculation.
@@ -529,14 +497,14 @@ public abstract class Visibility extends Transition {
@Override @Override
public void onAnimationPause(Animator animation) { public void onAnimationPause(Animator animation) {
if (!mCanceled && !mIsForcedVisibility) { if (!mCanceled) {
mView.setTransitionVisibility(mFinalVisibility); mView.setTransitionVisibility(mFinalVisibility);
} }
} }
@Override @Override
public void onAnimationResume(Animator animation) { public void onAnimationResume(Animator animation) {
if (!mCanceled && !mIsForcedVisibility) { if (!mCanceled) {
mView.setTransitionVisibility(View.VISIBLE); mView.setTransitionVisibility(View.VISIBLE);
} }
} }
@@ -576,15 +544,10 @@ public abstract class Visibility extends Transition {
private void hideViewWhenNotCanceled() { private void hideViewWhenNotCanceled() {
if (!mCanceled) { if (!mCanceled) {
if (mIsForcedVisibility) { // Recreate the parent's display list in case it includes mView.
mView.setTransitionAlpha(0); mView.setTransitionVisibility(mFinalVisibility);
} else if (!mFinalVisibilitySet) { if (mParent != null) {
// Recreate the parent's display list in case it includes mView. mParent.invalidate();
mView.setTransitionVisibility(mFinalVisibility);
if (mParent != null) {
mParent.invalidate();
}
mFinalVisibilitySet = true;
} }
} }
// Layout is allowed now that the View is in its final state // 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) { private void suppressLayout(boolean suppress) {
if (mLayoutSuppressed != suppress && mParent != null && !mIsForcedVisibility) { if (mLayoutSuppressed != suppress && mParent != null) {
mLayoutSuppressed = suppress; mLayoutSuppressed = suppress;
mParent.suppressLayout(suppress); mParent.suppressLayout(suppress);
} }