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:
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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("");
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user