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