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

This commit is contained in:
George Mount
2016-02-16 21:37:39 +00:00
committed by Android (Google) Code Review
6 changed files with 46 additions and 82 deletions

View File

@@ -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;

View File

@@ -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<View> 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();

View File

@@ -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<String> 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();

View File

@@ -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("");

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.
*

View File

@@ -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);
}