am e0b9e2f1: am 7d3d95e7: Merge "Fix exit transitions hiding views permanently." into lmp-dev

* commit 'e0b9e2f107660e09daa5c0a5ecc1a616cd7da097':
  Fix exit transitions hiding views permanently.
This commit is contained in:
George Mount
2014-09-15 14:43:29 +00:00
committed by Android Git Automerger
3 changed files with 23 additions and 13 deletions

View File

@@ -196,7 +196,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
final protected ArrayList<String> mAllSharedElementNames;
final protected ArrayList<View> mSharedElements = new ArrayList<View>();
final protected ArrayList<String> mSharedElementNames = new ArrayList<String>();
final protected ArrayList<View> mTransitioningViews = new ArrayList<View>();
protected ArrayList<View> mTransitioningViews = new ArrayList<View>();
protected SharedElementCallback mListener;
protected ResultReceiver mResultReceiver;
final private FixedEpicenterCallback mEpicenterCallback = new FixedEpicenterCallback();
@@ -222,7 +222,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
mListener.onMapSharedElements(mAllSharedElementNames, sharedElements);
mSharedElementNames.addAll(sharedElements.keySet());
mSharedElements.addAll(sharedElements.values());
if (getViewsTransition() != null) {
if (getViewsTransition() != null && mTransitioningViews != null) {
ViewGroup decorView = getDecor();
if (decorView != null) {
decorView.captureTransitioningViews(mTransitioningViews);
@@ -233,6 +233,9 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
}
protected void stripOffscreenViews() {
if (mTransitioningViews == null) {
return;
}
Rect r = new Rect();
for (int i = mTransitioningViews.size() - 1; i >= 0; i--) {
View view = mTransitioningViews.get(i);
@@ -592,7 +595,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
// Clear the state so that we can't hold any references accidentally and leak memory.
mWindow = null;
mSharedElements.clear();
mTransitioningViews.clear();
mTransitioningViews = null;
mOriginalAlphas.clear();
mResultReceiver = null;
mPendingTransition = null;

View File

@@ -115,7 +115,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
super.viewsReady(sharedElements);
mIsReadyForTransition = true;
hideViews(mSharedElements);
if (getViewsTransition() != null) {
if (getViewsTransition() != null && mTransitioningViews != null) {
hideViews(mTransitioningViews);
}
if (mIsReturning) {
@@ -249,7 +249,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
mIsCanceled = true;
if (getViewsTransition() == null || mIsViewsTransitionStarted) {
showViews(mSharedElements, true);
} else {
} else if (mTransitioningViews != null) {
mTransitioningViews.addAll(mSharedElements);
}
mSharedElementNames.clear();
@@ -416,7 +416,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
Transition viewsTransition = null;
if (startEnterTransition) {
mIsViewsTransitionStarted = true;
if (!mTransitioningViews.isEmpty()) {
if (mTransitioningViews != null && !mTransitioningViews.isEmpty()) {
viewsTransition = configureTransition(getViewsTransition(), true);
if (viewsTransition != null && !mIsReturning) {
stripOffscreenViews();
@@ -426,11 +426,14 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
viewTransitionComplete();
} else {
viewsTransition.forceVisibility(View.INVISIBLE, true);
final ArrayList<View> transitioningViews = mTransitioningViews;
viewsTransition.addListener(new ContinueTransitionListener() {
@Override
public void onTransitionStart(Transition transition) {
mEnterViewsTransition = transition;
showViews(mTransitioningViews, false);
if (transitioningViews != null) {
showViews(transitioningViews, false);
}
super.onTransitionStart(transition);
}
@@ -451,7 +454,8 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
TransitionManager.beginDelayedTransition(decorView, transition);
if (startSharedElementTransition && !mSharedElementNames.isEmpty()) {
mSharedElements.get(0).invalidate();
} else if (startEnterTransition && !mTransitioningViews.isEmpty()) {
} else if (startEnterTransition && mTransitioningViews != null &&
!mTransitioningViews.isEmpty()) {
mTransitioningViews.get(0).invalidate();
}
} else {

View File

@@ -126,7 +126,9 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
}
public void resetViews() {
showViews(mTransitioningViews, true);
if (mTransitioningViews != null) {
showViews(mTransitioningViews, true);
}
showViews(mSharedElements, true);
mIsHidden = true;
ViewGroup decorView = getDecor();
@@ -253,7 +255,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
private void startExitTransition() {
Transition transition = getExitTransition();
ViewGroup decorView = getDecor();
if (transition != null && decorView != null) {
if (transition != null && decorView != null && mTransitioningViews != null) {
TransitionManager.beginDelayedTransition(decorView, transition);
mTransitioningViews.get(0).invalidate();
} else {
@@ -289,19 +291,20 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
private Transition getExitTransition() {
Transition viewsTransition = null;
if (!mTransitioningViews.isEmpty()) {
if (mTransitioningViews != null && !mTransitioningViews.isEmpty()) {
viewsTransition = configureTransition(getViewsTransition(), true);
}
if (viewsTransition == null) {
exitTransitionComplete();
} else {
final ArrayList<View> transitioningViews = mTransitioningViews;
viewsTransition.addListener(new ContinueTransitionListener() {
@Override
public void onTransitionEnd(Transition transition) {
transition.removeListener(this);
exitTransitionComplete();
if (mIsHidden) {
showViews(mTransitioningViews, true);
if (mIsHidden && transitioningViews != null) {
showViews(transitioningViews, true);
}
if (mSharedElementBundle != null) {
delayCancel();