diff --git a/core/java/android/app/ActivityTransitionCoordinator.java b/core/java/android/app/ActivityTransitionCoordinator.java index 0cac6a52974a6..5e0ea17ec8bf3 100644 --- a/core/java/android/app/ActivityTransitionCoordinator.java +++ b/core/java/android/app/ActivityTransitionCoordinator.java @@ -467,11 +467,12 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { } protected void scheduleSetSharedElementEnd(final ArrayList snapshots) { - getDecor().getViewTreeObserver().addOnPreDrawListener( + final View decorView = getDecor(); + decorView.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { - getDecor().getViewTreeObserver().removeOnPreDrawListener(this); + decorView.getViewTreeObserver().removeOnPreDrawListener(this); notifySharedElementEnd(snapshots); return true; } @@ -664,8 +665,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { GhostView.addGhost(view, decor); ViewGroup parent = (ViewGroup) view.getParent(); if (moveWithParent && !isInTransitionGroup(parent, decor)) { - GhostViewListeners listener = - new GhostViewListeners(view, decor); + GhostViewListeners listener = new GhostViewListeners(view, parent, decor); parent.getViewTreeObserver().addOnPreDrawListener(listener); mGhostViewListeners.add(listener); } @@ -723,11 +723,12 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { } protected void scheduleGhostVisibilityChange(final int visibility) { - getDecor().getViewTreeObserver() + final View decorView = getDecor(); + decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { - getDecor().getViewTreeObserver().removeOnPreDrawListener(this); + decorView.getViewTreeObserver().removeOnPreDrawListener(this); setGhostVisibility(visibility); return true; } @@ -769,10 +770,12 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { private static class GhostViewListeners implements ViewTreeObserver.OnPreDrawListener { private View mView; private ViewGroup mDecor; + private View mParent; private Matrix mMatrix = new Matrix(); - public GhostViewListeners(View view, ViewGroup decor) { + public GhostViewListeners(View view, View parent, ViewGroup decor) { mView = view; + mParent = parent; mDecor = decor; } @@ -782,10 +785,9 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { @Override public boolean onPreDraw() { - ViewGroup parent = ((ViewGroup) mView.getParent()); GhostView ghostView = GhostView.getGhost(mView); if (ghostView == null) { - parent.getViewTreeObserver().removeOnPreDrawListener(this); + mParent.getViewTreeObserver().removeOnPreDrawListener(this); } else { GhostView.calculateMatrix(mView, mDecor, mMatrix); ghostView.setMatrix(mMatrix); diff --git a/core/java/android/app/EnterTransitionCoordinator.java b/core/java/android/app/EnterTransitionCoordinator.java index 2bc4166d33d42..f432c4954f28e 100644 --- a/core/java/android/app/EnterTransitionCoordinator.java +++ b/core/java/android/app/EnterTransitionCoordinator.java @@ -69,12 +69,13 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { Bundle resultReceiverBundle = new Bundle(); resultReceiverBundle.putParcelable(KEY_REMOTE_RECEIVER, this); mResultReceiver.send(MSG_SET_REMOTE_RECEIVER, resultReceiverBundle); - getDecor().getViewTreeObserver().addOnPreDrawListener( + final View decorView = getDecor(); + decorView.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { if (mIsReadyForTransition) { - getDecor().getViewTreeObserver().removeOnPreDrawListener(this); + decorView.getViewTreeObserver().removeOnPreDrawListener(this); } return mIsReadyForTransition; } @@ -187,11 +188,12 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { moveSharedElementsToOverlay(); mResultReceiver.send(MSG_SHARED_ELEMENT_DESTINATION, state); } else { - getDecor().getViewTreeObserver() + final View decorView = getDecor(); + decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { - getDecor().getViewTreeObserver().removeOnPreDrawListener(this); + decorView.getViewTreeObserver().removeOnPreDrawListener(this); if (mResultReceiver != null) { Bundle state = captureSharedElementState(); setSharedElementMatrices(); @@ -342,11 +344,12 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } final Bundle sharedElementState = mSharedElementsBundle; mSharedElementsBundle = null; - getDecor().getViewTreeObserver() + final View decorView = getDecor(); + decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { - getDecor().getViewTreeObserver().removeOnPreDrawListener(this); + decorView.getViewTreeObserver().removeOnPreDrawListener(this); startTransition(new Runnable() { @Override public void run() { @@ -356,7 +359,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { return false; } }); - getDecor().invalidate(); + decorView.invalidate(); } private void requestLayoutForSharedElements() { diff --git a/core/java/android/app/ExitTransitionCoordinator.java b/core/java/android/app/ExitTransitionCoordinator.java index 9d5557f9f926d..a59a9272e495f 100644 --- a/core/java/android/app/ExitTransitionCoordinator.java +++ b/core/java/android/app/ExitTransitionCoordinator.java @@ -165,11 +165,12 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { }); final ArrayList sharedElementSnapshots = createSnapshots(mExitSharedElementBundle, mSharedElementNames); - getDecor().getViewTreeObserver() + final View decorView = getDecor(); + decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { - getDecor().getViewTreeObserver().removeOnPreDrawListener(this); + decorView.getViewTreeObserver().removeOnPreDrawListener(this); setSharedElementState(mExitSharedElementBundle, sharedElementSnapshots); return true; }