Loading core/java/android/app/ActivityTransitionCoordinator.java +34 −21 Original line number Diff line number Diff line Loading @@ -223,7 +223,10 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { mSharedElementNames.addAll(sharedElements.keySet()); mSharedElements.addAll(sharedElements.values()); if (getViewsTransition() != null) { getDecor().captureTransitioningViews(mTransitioningViews); ViewGroup decorView = getDecor(); if (decorView != null) { decorView.captureTransitioningViews(mTransitioningViews); } mTransitioningViews.removeAll(mSharedElements); } setEpicenter(); Loading Loading @@ -351,7 +354,10 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { sharedElements.put(accepted.get(i), localViews.get(i)); } } else { getDecor().findNamedViews(sharedElements); ViewGroup decorView = getDecor(); if (decorView != null) { decorView.findNamedViews(sharedElements); } } return sharedElements; } Loading Loading @@ -472,6 +478,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { protected void scheduleSetSharedElementEnd(final ArrayList<View> snapshots) { final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override Loading @@ -483,6 +490,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { } ); } } private static SharedElementOriginalState getOldSharedElementState(View view, String name, Bundle transitionArgs) { Loading Loading @@ -524,7 +532,10 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { ArrayList<View> snapshots = new ArrayList<View>(numSharedElements); Context context = getWindow().getContext(); int[] decorLoc = new int[2]; getDecor().getLocationOnScreen(decorLoc); ViewGroup decorView = getDecor(); if (decorView != null) { decorView.getLocationOnScreen(decorLoc); } for (String name: names) { Bundle sharedElementBundle = state.getBundle(name); if (sharedElementBundle != null) { Loading Loading @@ -750,6 +761,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { protected void scheduleGhostVisibilityChange(final int visibility) { final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override Loading @@ -760,6 +772,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { } }); } } protected class ContinueTransitionListener extends Transition.TransitionListenerAdapter { @Override Loading core/java/android/app/EnterTransitionCoordinator.java +77 −55 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { resultReceiverBundle.putParcelable(KEY_REMOTE_RECEIVER, this); mResultReceiver.send(MSG_SET_REMOTE_RECEIVER, resultReceiverBundle); final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override Loading @@ -81,6 +82,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } }); } } public void viewInstancesReady(ArrayList<String> accepted, ArrayList<String> localNames, ArrayList<View> localViews) { Loading Loading @@ -152,7 +154,10 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { private ArrayMap<String, View> mapNamedElements(ArrayList<String> accepted, ArrayList<String> localNames) { ArrayMap<String, View> sharedElements = new ArrayMap<String, View>(); getDecor().findNamedViews(sharedElements); ViewGroup decorView = getDecor(); if (decorView != null) { decorView.findNamedViews(sharedElements); } if (accepted != null) { for (int i = 0; i < localNames.size(); i++) { String localName = localNames.get(i); Loading @@ -170,10 +175,13 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { private void sendSharedElementDestination() { boolean allReady; final View decorView = getDecor(); if (allowOverlappingTransitions() && getEnterViewsTransition() != null) { allReady = false; } else if (decorView == null) { allReady = true; } else { allReady = !getDecor().isLayoutRequested(); allReady = !decorView.isLayoutRequested(); if (allReady) { for (int i = 0; i < mSharedElements.size(); i++) { if (mSharedElements.get(i).isLayoutRequested()) { Loading @@ -188,8 +196,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { setSharedElementMatrices(); moveSharedElementsToOverlay(); mResultReceiver.send(MSG_SHARED_ELEMENT_DESTINATION, state); } else { final View decorView = getDecor(); } else if (decorView != null) { decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override Loading Loading @@ -291,6 +298,10 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } private void startSharedElementTransition(Bundle sharedElementState) { ViewGroup decorView = getDecor(); if (decorView == null) { return; } // Remove rejected shared elements ArrayList<String> rejectedNames = new ArrayList<String>(mAllSharedElementNames); rejectedNames.removeAll(mSharedElementNames); Loading @@ -311,7 +322,8 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { boolean startSharedElementTransition = true; setGhostVisibility(View.INVISIBLE); scheduleGhostVisibilityChange(View.INVISIBLE); Transition transition = beginTransition(startEnterTransition, startSharedElementTransition); Transition transition = beginTransition(decorView, startEnterTransition, startSharedElementTransition); scheduleGhostVisibilityChange(View.VISIBLE); setGhostVisibility(View.VISIBLE); Loading @@ -324,8 +336,9 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { if (mResultReceiver != null) { // We can't trust that the view will disappear on the same frame that the shared // element appears here. Assure that we get at least 2 frames for double-buffering. getDecor().postOnAnimation(new Runnable() { decorView.postOnAnimation(new Runnable() { int mAnimations; @Override public void run() { if (mAnimations++ < MIN_ANIMATION_FRAMES) { Loading @@ -349,6 +362,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { final Bundle sharedElementState = mSharedElementsBundle; mSharedElementsBundle = null; final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override Loading @@ -365,6 +379,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { }); decorView.invalidate(); } } private void requestLayoutForSharedElements() { int numSharedElements = mSharedElements.size(); Loading @@ -373,7 +388,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } } private Transition beginTransition(boolean startEnterTransition, private Transition beginTransition(ViewGroup decorView, boolean startEnterTransition, boolean startSharedElementTransition) { Transition sharedElementTransition = null; if (startSharedElementTransition) { Loading Loading @@ -433,7 +448,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { Transition transition = mergeTransitions(sharedElementTransition, viewsTransition); if (transition != null) { transition.addListener(new ContinueTransitionListener()); TransitionManager.beginDelayedTransition(getDecor(), transition); TransitionManager.beginDelayedTransition(decorView, transition); if (startSharedElementTransition && !mSharedElementNames.isEmpty()) { mSharedElements.get(0).invalidate(); } else if (startEnterTransition && !mTransitioningViews.isEmpty()) { Loading Loading @@ -467,8 +482,9 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } private void startEnterTransition(Transition transition) { if (!mIsReturning) { Drawable background = getDecor().getBackground(); ViewGroup decorView = getDecor(); if (!mIsReturning && decorView != null) { Drawable background = decorView.getBackground(); if (background != null) { background = background.mutate(); getWindow().setBackgroundDrawable(background); Loading Loading @@ -539,7 +555,9 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { if (rejectedSnapshots == null || rejectedSnapshots.isEmpty()) { return; } ViewGroupOverlay overlay = getDecor().getOverlay(); final ViewGroup decorView = getDecor(); if (decorView != null) { ViewGroupOverlay overlay = decorView.getOverlay(); ObjectAnimator animator = null; int numRejected = rejectedSnapshots.size(); for (int i = 0; i < numRejected; i++) { Loading @@ -551,7 +569,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { ViewGroupOverlay overlay = getDecor().getOverlay(); ViewGroupOverlay overlay = decorView.getOverlay(); int numRejected = rejectedSnapshots.size(); for (int i = 0; i < numRejected; i++) { overlay.remove(rejectedSnapshots.get(i)); Loading @@ -559,6 +577,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } }); } } protected void onRemoteExitTransitionComplete() { if (!allowOverlappingTransitions()) { Loading @@ -572,10 +591,13 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { public void run() { boolean startEnterTransition = true; boolean startSharedElementTransition = false; Transition transition = beginTransition(startEnterTransition, ViewGroup decorView = getDecor(); if (decorView != null) { Transition transition = beginTransition(decorView, startEnterTransition, startSharedElementTransition); startEnterTransition(transition); } } }); } Loading core/java/android/app/ExitTransitionCoordinator.java +29 −22 Original line number Diff line number Diff line Loading @@ -129,22 +129,25 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { showViews(mTransitioningViews, true); showViews(mSharedElements, true); mIsHidden = true; if (!mIsReturning && getDecor() != null) { getDecor().suppressLayout(false); ViewGroup decorView = getDecor(); if (!mIsReturning && decorView != null) { decorView.suppressLayout(false); } moveSharedElementsFromOverlay(); clearState(); } private void sharedElementExitBack() { if (getDecor() != null) { getDecor().suppressLayout(true); final ViewGroup decorView = getDecor(); if (decorView != null) { decorView.suppressLayout(true); } if (mExitSharedElementBundle != null && !mExitSharedElementBundle.isEmpty() && if (decorView != null && mExitSharedElementBundle != null && !mExitSharedElementBundle.isEmpty() && !mSharedElements.isEmpty() && getSharedElementTransition() != null) { startTransition(new Runnable() { public void run() { startSharedElementExit(); startSharedElementExit(decorView); } }); } else { Loading @@ -152,7 +155,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { } } private void startSharedElementExit() { private void startSharedElementExit(final ViewGroup decorView) { Transition transition = getSharedElementExitTransition(); transition.addListener(new Transition.TransitionListenerAdapter() { @Override Loading @@ -165,7 +168,6 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { }); final ArrayList<View> sharedElementSnapshots = createSnapshots(mExitSharedElementBundle, mSharedElementNames); final View decorView = getDecor(); decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override Loading @@ -178,10 +180,10 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { setGhostVisibility(View.INVISIBLE); scheduleGhostVisibilityChange(View.INVISIBLE); mListener.onSharedElementEnd(mSharedElementNames, mSharedElements, sharedElementSnapshots); TransitionManager.beginDelayedTransition(getDecor(), transition); TransitionManager.beginDelayedTransition(decorView, transition); scheduleGhostVisibilityChange(View.VISIBLE); setGhostVisibility(View.VISIBLE); getDecor().invalidate(); decorView.invalidate(); } private void hideSharedElements() { Loading @@ -196,8 +198,9 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { public void startExit() { if (!mIsExitStarted) { mIsExitStarted = true; if (getDecor() != null) { getDecor().suppressLayout(true); ViewGroup decorView = getDecor(); if (decorView != null) { decorView.suppressLayout(true); } moveSharedElementsToOverlay(); startTransition(new Runnable() { Loading @@ -212,8 +215,9 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { public void startExit(int resultCode, Intent data) { if (!mIsExitStarted) { mIsExitStarted = true; if (getDecor() != null) { getDecor().suppressLayout(true); ViewGroup decorView = getDecor(); if (decorView != null) { decorView.suppressLayout(true); } mHandler = new Handler() { @Override Loading @@ -224,7 +228,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { }; delayCancel(); moveSharedElementsToOverlay(); if (getDecor().getBackground() == null) { if (decorView != null && decorView.getBackground() == null) { getWindow().setBackgroundDrawable(new ColorDrawable(Color.BLACK)); } ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(mActivity, this, Loading @@ -248,8 +252,9 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { private void startExitTransition() { Transition transition = getExitTransition(); if (transition != null) { TransitionManager.beginDelayedTransition(getDecor(), transition); ViewGroup decorView = getDecor(); if (transition != null && decorView != null) { TransitionManager.beginDelayedTransition(decorView, transition); mTransitioningViews.get(0).invalidate(); } else { transitionStarted(); Loading Loading @@ -337,13 +342,14 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { Transition viewsTransition = getExitTransition(); Transition transition = mergeTransitions(sharedElementTransition, viewsTransition); if (transition != null) { ViewGroup decorView = getDecor(); if (transition != null && decorView != null) { setGhostVisibility(View.INVISIBLE); scheduleGhostVisibilityChange(View.INVISIBLE); TransitionManager.beginDelayedTransition(getDecor(), transition); TransitionManager.beginDelayedTransition(decorView, transition); scheduleGhostVisibilityChange(View.VISIBLE); setGhostVisibility(View.VISIBLE); getDecor().invalidate(); decorView.invalidate(); } else { transitionStarted(); } Loading Loading @@ -392,8 +398,9 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { mExitNotified = true; mResultReceiver.send(MSG_EXIT_TRANSITION_COMPLETE, null); mResultReceiver = null; // done talking if (!mIsReturning && getDecor() != null) { getDecor().suppressLayout(false); ViewGroup decorView = getDecor(); if (!mIsReturning && decorView != null) { decorView.suppressLayout(false); } finishIfNecessary(); } Loading Loading
core/java/android/app/ActivityTransitionCoordinator.java +34 −21 Original line number Diff line number Diff line Loading @@ -223,7 +223,10 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { mSharedElementNames.addAll(sharedElements.keySet()); mSharedElements.addAll(sharedElements.values()); if (getViewsTransition() != null) { getDecor().captureTransitioningViews(mTransitioningViews); ViewGroup decorView = getDecor(); if (decorView != null) { decorView.captureTransitioningViews(mTransitioningViews); } mTransitioningViews.removeAll(mSharedElements); } setEpicenter(); Loading Loading @@ -351,7 +354,10 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { sharedElements.put(accepted.get(i), localViews.get(i)); } } else { getDecor().findNamedViews(sharedElements); ViewGroup decorView = getDecor(); if (decorView != null) { decorView.findNamedViews(sharedElements); } } return sharedElements; } Loading Loading @@ -472,6 +478,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { protected void scheduleSetSharedElementEnd(final ArrayList<View> snapshots) { final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override Loading @@ -483,6 +490,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { } ); } } private static SharedElementOriginalState getOldSharedElementState(View view, String name, Bundle transitionArgs) { Loading Loading @@ -524,7 +532,10 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { ArrayList<View> snapshots = new ArrayList<View>(numSharedElements); Context context = getWindow().getContext(); int[] decorLoc = new int[2]; getDecor().getLocationOnScreen(decorLoc); ViewGroup decorView = getDecor(); if (decorView != null) { decorView.getLocationOnScreen(decorLoc); } for (String name: names) { Bundle sharedElementBundle = state.getBundle(name); if (sharedElementBundle != null) { Loading Loading @@ -750,6 +761,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { protected void scheduleGhostVisibilityChange(final int visibility) { final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override Loading @@ -760,6 +772,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { } }); } } protected class ContinueTransitionListener extends Transition.TransitionListenerAdapter { @Override Loading
core/java/android/app/EnterTransitionCoordinator.java +77 −55 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { resultReceiverBundle.putParcelable(KEY_REMOTE_RECEIVER, this); mResultReceiver.send(MSG_SET_REMOTE_RECEIVER, resultReceiverBundle); final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override Loading @@ -81,6 +82,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } }); } } public void viewInstancesReady(ArrayList<String> accepted, ArrayList<String> localNames, ArrayList<View> localViews) { Loading Loading @@ -152,7 +154,10 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { private ArrayMap<String, View> mapNamedElements(ArrayList<String> accepted, ArrayList<String> localNames) { ArrayMap<String, View> sharedElements = new ArrayMap<String, View>(); getDecor().findNamedViews(sharedElements); ViewGroup decorView = getDecor(); if (decorView != null) { decorView.findNamedViews(sharedElements); } if (accepted != null) { for (int i = 0; i < localNames.size(); i++) { String localName = localNames.get(i); Loading @@ -170,10 +175,13 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { private void sendSharedElementDestination() { boolean allReady; final View decorView = getDecor(); if (allowOverlappingTransitions() && getEnterViewsTransition() != null) { allReady = false; } else if (decorView == null) { allReady = true; } else { allReady = !getDecor().isLayoutRequested(); allReady = !decorView.isLayoutRequested(); if (allReady) { for (int i = 0; i < mSharedElements.size(); i++) { if (mSharedElements.get(i).isLayoutRequested()) { Loading @@ -188,8 +196,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { setSharedElementMatrices(); moveSharedElementsToOverlay(); mResultReceiver.send(MSG_SHARED_ELEMENT_DESTINATION, state); } else { final View decorView = getDecor(); } else if (decorView != null) { decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override Loading Loading @@ -291,6 +298,10 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } private void startSharedElementTransition(Bundle sharedElementState) { ViewGroup decorView = getDecor(); if (decorView == null) { return; } // Remove rejected shared elements ArrayList<String> rejectedNames = new ArrayList<String>(mAllSharedElementNames); rejectedNames.removeAll(mSharedElementNames); Loading @@ -311,7 +322,8 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { boolean startSharedElementTransition = true; setGhostVisibility(View.INVISIBLE); scheduleGhostVisibilityChange(View.INVISIBLE); Transition transition = beginTransition(startEnterTransition, startSharedElementTransition); Transition transition = beginTransition(decorView, startEnterTransition, startSharedElementTransition); scheduleGhostVisibilityChange(View.VISIBLE); setGhostVisibility(View.VISIBLE); Loading @@ -324,8 +336,9 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { if (mResultReceiver != null) { // We can't trust that the view will disappear on the same frame that the shared // element appears here. Assure that we get at least 2 frames for double-buffering. getDecor().postOnAnimation(new Runnable() { decorView.postOnAnimation(new Runnable() { int mAnimations; @Override public void run() { if (mAnimations++ < MIN_ANIMATION_FRAMES) { Loading @@ -349,6 +362,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { final Bundle sharedElementState = mSharedElementsBundle; mSharedElementsBundle = null; final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override Loading @@ -365,6 +379,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { }); decorView.invalidate(); } } private void requestLayoutForSharedElements() { int numSharedElements = mSharedElements.size(); Loading @@ -373,7 +388,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } } private Transition beginTransition(boolean startEnterTransition, private Transition beginTransition(ViewGroup decorView, boolean startEnterTransition, boolean startSharedElementTransition) { Transition sharedElementTransition = null; if (startSharedElementTransition) { Loading Loading @@ -433,7 +448,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { Transition transition = mergeTransitions(sharedElementTransition, viewsTransition); if (transition != null) { transition.addListener(new ContinueTransitionListener()); TransitionManager.beginDelayedTransition(getDecor(), transition); TransitionManager.beginDelayedTransition(decorView, transition); if (startSharedElementTransition && !mSharedElementNames.isEmpty()) { mSharedElements.get(0).invalidate(); } else if (startEnterTransition && !mTransitioningViews.isEmpty()) { Loading Loading @@ -467,8 +482,9 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } private void startEnterTransition(Transition transition) { if (!mIsReturning) { Drawable background = getDecor().getBackground(); ViewGroup decorView = getDecor(); if (!mIsReturning && decorView != null) { Drawable background = decorView.getBackground(); if (background != null) { background = background.mutate(); getWindow().setBackgroundDrawable(background); Loading Loading @@ -539,7 +555,9 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { if (rejectedSnapshots == null || rejectedSnapshots.isEmpty()) { return; } ViewGroupOverlay overlay = getDecor().getOverlay(); final ViewGroup decorView = getDecor(); if (decorView != null) { ViewGroupOverlay overlay = decorView.getOverlay(); ObjectAnimator animator = null; int numRejected = rejectedSnapshots.size(); for (int i = 0; i < numRejected; i++) { Loading @@ -551,7 +569,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { ViewGroupOverlay overlay = getDecor().getOverlay(); ViewGroupOverlay overlay = decorView.getOverlay(); int numRejected = rejectedSnapshots.size(); for (int i = 0; i < numRejected; i++) { overlay.remove(rejectedSnapshots.get(i)); Loading @@ -559,6 +577,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } }); } } protected void onRemoteExitTransitionComplete() { if (!allowOverlappingTransitions()) { Loading @@ -572,10 +591,13 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { public void run() { boolean startEnterTransition = true; boolean startSharedElementTransition = false; Transition transition = beginTransition(startEnterTransition, ViewGroup decorView = getDecor(); if (decorView != null) { Transition transition = beginTransition(decorView, startEnterTransition, startSharedElementTransition); startEnterTransition(transition); } } }); } Loading
core/java/android/app/ExitTransitionCoordinator.java +29 −22 Original line number Diff line number Diff line Loading @@ -129,22 +129,25 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { showViews(mTransitioningViews, true); showViews(mSharedElements, true); mIsHidden = true; if (!mIsReturning && getDecor() != null) { getDecor().suppressLayout(false); ViewGroup decorView = getDecor(); if (!mIsReturning && decorView != null) { decorView.suppressLayout(false); } moveSharedElementsFromOverlay(); clearState(); } private void sharedElementExitBack() { if (getDecor() != null) { getDecor().suppressLayout(true); final ViewGroup decorView = getDecor(); if (decorView != null) { decorView.suppressLayout(true); } if (mExitSharedElementBundle != null && !mExitSharedElementBundle.isEmpty() && if (decorView != null && mExitSharedElementBundle != null && !mExitSharedElementBundle.isEmpty() && !mSharedElements.isEmpty() && getSharedElementTransition() != null) { startTransition(new Runnable() { public void run() { startSharedElementExit(); startSharedElementExit(decorView); } }); } else { Loading @@ -152,7 +155,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { } } private void startSharedElementExit() { private void startSharedElementExit(final ViewGroup decorView) { Transition transition = getSharedElementExitTransition(); transition.addListener(new Transition.TransitionListenerAdapter() { @Override Loading @@ -165,7 +168,6 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { }); final ArrayList<View> sharedElementSnapshots = createSnapshots(mExitSharedElementBundle, mSharedElementNames); final View decorView = getDecor(); decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override Loading @@ -178,10 +180,10 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { setGhostVisibility(View.INVISIBLE); scheduleGhostVisibilityChange(View.INVISIBLE); mListener.onSharedElementEnd(mSharedElementNames, mSharedElements, sharedElementSnapshots); TransitionManager.beginDelayedTransition(getDecor(), transition); TransitionManager.beginDelayedTransition(decorView, transition); scheduleGhostVisibilityChange(View.VISIBLE); setGhostVisibility(View.VISIBLE); getDecor().invalidate(); decorView.invalidate(); } private void hideSharedElements() { Loading @@ -196,8 +198,9 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { public void startExit() { if (!mIsExitStarted) { mIsExitStarted = true; if (getDecor() != null) { getDecor().suppressLayout(true); ViewGroup decorView = getDecor(); if (decorView != null) { decorView.suppressLayout(true); } moveSharedElementsToOverlay(); startTransition(new Runnable() { Loading @@ -212,8 +215,9 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { public void startExit(int resultCode, Intent data) { if (!mIsExitStarted) { mIsExitStarted = true; if (getDecor() != null) { getDecor().suppressLayout(true); ViewGroup decorView = getDecor(); if (decorView != null) { decorView.suppressLayout(true); } mHandler = new Handler() { @Override Loading @@ -224,7 +228,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { }; delayCancel(); moveSharedElementsToOverlay(); if (getDecor().getBackground() == null) { if (decorView != null && decorView.getBackground() == null) { getWindow().setBackgroundDrawable(new ColorDrawable(Color.BLACK)); } ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(mActivity, this, Loading @@ -248,8 +252,9 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { private void startExitTransition() { Transition transition = getExitTransition(); if (transition != null) { TransitionManager.beginDelayedTransition(getDecor(), transition); ViewGroup decorView = getDecor(); if (transition != null && decorView != null) { TransitionManager.beginDelayedTransition(decorView, transition); mTransitioningViews.get(0).invalidate(); } else { transitionStarted(); Loading Loading @@ -337,13 +342,14 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { Transition viewsTransition = getExitTransition(); Transition transition = mergeTransitions(sharedElementTransition, viewsTransition); if (transition != null) { ViewGroup decorView = getDecor(); if (transition != null && decorView != null) { setGhostVisibility(View.INVISIBLE); scheduleGhostVisibilityChange(View.INVISIBLE); TransitionManager.beginDelayedTransition(getDecor(), transition); TransitionManager.beginDelayedTransition(decorView, transition); scheduleGhostVisibilityChange(View.VISIBLE); setGhostVisibility(View.VISIBLE); getDecor().invalidate(); decorView.invalidate(); } else { transitionStarted(); } Loading Loading @@ -392,8 +398,9 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { mExitNotified = true; mResultReceiver.send(MSG_EXIT_TRANSITION_COMPLETE, null); mResultReceiver = null; // done talking if (!mIsReturning && getDecor() != null) { getDecor().suppressLayout(false); ViewGroup decorView = getDecor(); if (!mIsReturning && decorView != null) { decorView.suppressLayout(false); } finishIfNecessary(); } Loading