Loading core/java/android/app/Activity.java +18 −14 Original line number Diff line number Diff line Loading @@ -3841,10 +3841,7 @@ public class Activity extends ContextThemeWrapper mStartedActivity = true; } final View decor = mWindow != null ? mWindow.peekDecorView() : null; if (decor != null) { decor.cancelPendingInputEvents(); } cancelInputsAndStartExitTransition(options); // TODO Consider clearing/flushing other event sources and events for child windows. } else { if (options != null) { Loading @@ -3855,6 +3852,18 @@ public class Activity extends ContextThemeWrapper mParent.startActivityFromChild(this, intent, requestCode); } } } /** * Cancels pending inputs and if an Activity Transition is to be run, starts the transition. * * @param options The ActivityOptions bundle used to start an Activity. */ private void cancelInputsAndStartExitTransition(Bundle options) { final View decor = mWindow != null ? mWindow.peekDecorView() : null; if (decor != null) { decor.cancelPendingInputEvents(); } if (options != null && !isTopOfTask()) { mActivityTransitionState.startExitOutTransition(this, options); } Loading @@ -3872,9 +3881,6 @@ public class Activity extends ContextThemeWrapper */ public void startActivityForResultAsUser(Intent intent, int requestCode, @Nullable Bundle options, UserHandle user) { if (options != null) { mActivityTransitionState.startExitOutTransition(this, options); } if (mParent != null) { throw new RuntimeException("Can't be called from a child"); } Loading @@ -3896,10 +3902,7 @@ public class Activity extends ContextThemeWrapper mStartedActivity = true; } final View decor = mWindow != null ? mWindow.peekDecorView() : null; if (decor != null) { decor.cancelPendingInputEvents(); } cancelInputsAndStartExitTransition(options); } /** Loading @@ -3925,6 +3928,7 @@ public class Activity extends ContextThemeWrapper mToken, mEmbeddedID, -1, ar.getResultCode(), ar.getResultData()); } cancelInputsAndStartExitTransition(options); } /** Loading @@ -3948,6 +3952,7 @@ public class Activity extends ContextThemeWrapper mToken, mEmbeddedID, -1, ar.getResultCode(), ar.getResultData()); } cancelInputsAndStartExitTransition(options); } /** Loading Loading @@ -4380,6 +4385,7 @@ public class Activity extends ContextThemeWrapper mToken, child.mEmbeddedID, requestCode, ar.getResultCode(), ar.getResultData()); } cancelInputsAndStartExitTransition(options); } /** Loading Loading @@ -4431,9 +4437,6 @@ public class Activity extends ContextThemeWrapper @Override public void startActivityForResult( String who, Intent intent, int requestCode, @Nullable Bundle options) { if (options != null) { mActivityTransitionState.startExitOutTransition(this, options); } Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, who, Loading @@ -4443,6 +4446,7 @@ public class Activity extends ContextThemeWrapper mToken, who, requestCode, ar.getResultCode(), ar.getResultData()); } cancelInputsAndStartExitTransition(options); } /** Loading core/java/android/app/ActivityTransitionCoordinator.java +34 −5 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.ViewGroupOverlay; import android.view.ViewParent; import android.view.ViewRootImpl; import android.view.ViewTreeObserver; import android.view.Window; import android.widget.ImageView; Loading Loading @@ -187,11 +188,6 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { */ public static final int MSG_SHARED_ELEMENT_DESTINATION = 107; /** * Send the shared element positions. */ public static final int MSG_SEND_SHARED_ELEMENT_DESTINATION = 108; private Window mWindow; final protected ArrayList<String> mAllSharedElementNames; final protected ArrayList<View> mSharedElements = new ArrayList<View>(); Loading @@ -207,6 +203,8 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { new ArrayList<GhostViewListeners>(); private ArrayMap<View, Float> mOriginalAlphas = new ArrayMap<View, Float>(); private ArrayList<Matrix> mSharedElementParentMatrices; private boolean mSharedElementTransitionComplete; private boolean mViewsTransitionComplete; public ActivityTransitionCoordinator(Window window, ArrayList<String> allSharedElementNames, Loading @@ -219,6 +217,11 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { } protected void viewsReady(ArrayMap<String, View> sharedElements) { final View decor = getDecor(); final ViewRootImpl viewRoot = decor == null ? null : decor.getViewRootImpl(); if (viewRoot != null) { viewRoot.setPausedForTransition(true); } sharedElements.retainAll(mAllSharedElementNames); if (mListener != null) { mListener.onMapSharedElements(mAllSharedElementNames, sharedElements); Loading Loading @@ -878,6 +881,32 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { } } protected boolean isViewsTransitionComplete() { return mViewsTransitionComplete; } protected void viewsTransitionComplete() { mViewsTransitionComplete = true; startInputWhenTransitionsComplete(); } protected void sharedElementTransitionComplete() { mSharedElementTransitionComplete = true; startInputWhenTransitionsComplete(); } private void startInputWhenTransitionsComplete() { if (mViewsTransitionComplete && mSharedElementTransitionComplete) { final View decor = getDecor(); if (decor != null) { final ViewRootImpl viewRoot = decor.getViewRootImpl(); viewRoot.setPausedForTransition(false); } onTransitionsComplete(); } } protected void onTransitionsComplete() {} protected class ContinueTransitionListener extends Transition.TransitionListenerAdapter { @Override public void onTransitionStart(Transition transition) { Loading core/java/android/app/EnterTransitionCoordinator.java +5 −16 Original line number Diff line number Diff line Loading @@ -55,8 +55,6 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { private boolean mWasOpaque; private boolean mAreViewsReady; private boolean mIsViewsTransitionStarted; private boolean mIsViewsTransitionComplete; private boolean mIsSharedElementTransitionComplete; private Transition mEnterViewsTransition; public EnterTransitionCoordinator(Activity activity, ResultReceiver resultReceiver, Loading Loading @@ -456,7 +454,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } } if (viewsTransition == null) { viewTransitionComplete(); viewsTransitionComplete(); } else { viewsTransition.forceVisibility(View.INVISIBLE, true); final ArrayList<View> transitioningViews = mTransitioningViews; Loading @@ -474,7 +472,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { public void onTransitionEnd(Transition transition) { mEnterViewsTransition = null; transition.removeListener(this); viewTransitionComplete(); viewsTransitionComplete(); super.onTransitionEnd(transition); } }); Loading @@ -497,19 +495,10 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { return transition; } private void viewTransitionComplete() { mIsViewsTransitionComplete = true; if (mIsSharedElementTransitionComplete) { moveSharedElementsFromOverlay(); } } private void sharedElementTransitionComplete() { mIsSharedElementTransitionComplete = true; if (mIsViewsTransitionComplete) { @Override protected void onTransitionsComplete() { moveSharedElementsFromOverlay(); } } private void sharedElementTransitionStarted() { mSharedElementTransitionStarted = true; Loading core/java/android/app/ExitTransitionCoordinator.java +12 −13 Original line number Diff line number Diff line Loading @@ -46,8 +46,6 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { private static final String TAG = "ExitTransitionCoordinator"; private static final long MAX_WAIT_MS = 1000; private boolean mExitComplete; private Bundle mSharedElementBundle; private boolean mExitNotified; Loading Loading @@ -165,7 +163,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { @Override public void onTransitionEnd(Transition transition) { transition.removeListener(this); if (mExitComplete) { if (isViewsTransitionComplete()) { delayCancel(); } } Loading Loading @@ -310,14 +308,14 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { viewsTransition = configureTransition(getViewsTransition(), true); } if (viewsTransition == null) { exitTransitionComplete(); viewsTransitionComplete(); } else { final ArrayList<View> transitioningViews = mTransitioningViews; viewsTransition.addListener(new ContinueTransitionListener() { @Override public void onTransitionEnd(Transition transition) { transition.removeListener(this); exitTransitionComplete(); viewsTransitionComplete(); if (mIsHidden && transitioningViews != null) { showViews(transitioningViews, true); } Loading Loading @@ -373,19 +371,15 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { } } private void exitTransitionComplete() { mExitComplete = true; notifyComplete(); } protected boolean isReadyToNotify() { return mSharedElementBundle != null && mResultReceiver != null && mIsBackgroundReady; } private void sharedElementTransitionComplete() { @Override protected void sharedElementTransitionComplete() { mSharedElementBundle = mExitSharedElementBundle == null ? captureSharedElementState() : captureExitSharedElementsState(); notifyComplete(); super.sharedElementTransitionComplete(); } private Bundle captureExitSharedElementsState() { Loading @@ -405,6 +399,11 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { return bundle; } @Override protected void onTransitionsComplete() { notifyComplete(); } protected void notifyComplete() { if (isReadyToNotify()) { if (!mSharedElementNotified) { Loading Loading @@ -433,7 +432,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { } private void notifyExitComplete() { if (!mExitNotified && mExitComplete) { if (!mExitNotified && isViewsTransitionComplete()) { mExitNotified = true; mResultReceiver.send(MSG_EXIT_TRANSITION_COMPLETE, null); mResultReceiver = null; // done talking Loading core/java/android/view/AccessibilityInteractionController.java +4 −3 Original line number Diff line number Diff line Loading @@ -586,7 +586,7 @@ final class AccessibilityInteractionController { } } private void perfromAccessibilityActionUiThread(Message message) { private void performAccessibilityActionUiThread(Message message) { final int flags = message.arg1; final int accessibilityViewId = message.arg2; Loading @@ -602,7 +602,8 @@ final class AccessibilityInteractionController { boolean succeeded = false; try { if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) { if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null || mViewRootImpl.mStopped || mViewRootImpl.mPausedForTransition) { return; } mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags; Loading Loading @@ -1146,7 +1147,7 @@ final class AccessibilityInteractionController { findAccessibilityNodeInfoByAccessibilityIdUiThread(message); } break; case MSG_PERFORM_ACCESSIBILITY_ACTION: { perfromAccessibilityActionUiThread(message); performAccessibilityActionUiThread(message); } break; case MSG_FIND_ACCESSIBILITY_NODE_INFOS_BY_VIEW_ID: { findAccessibilityNodeInfosByViewIdUiThread(message); Loading Loading
core/java/android/app/Activity.java +18 −14 Original line number Diff line number Diff line Loading @@ -3841,10 +3841,7 @@ public class Activity extends ContextThemeWrapper mStartedActivity = true; } final View decor = mWindow != null ? mWindow.peekDecorView() : null; if (decor != null) { decor.cancelPendingInputEvents(); } cancelInputsAndStartExitTransition(options); // TODO Consider clearing/flushing other event sources and events for child windows. } else { if (options != null) { Loading @@ -3855,6 +3852,18 @@ public class Activity extends ContextThemeWrapper mParent.startActivityFromChild(this, intent, requestCode); } } } /** * Cancels pending inputs and if an Activity Transition is to be run, starts the transition. * * @param options The ActivityOptions bundle used to start an Activity. */ private void cancelInputsAndStartExitTransition(Bundle options) { final View decor = mWindow != null ? mWindow.peekDecorView() : null; if (decor != null) { decor.cancelPendingInputEvents(); } if (options != null && !isTopOfTask()) { mActivityTransitionState.startExitOutTransition(this, options); } Loading @@ -3872,9 +3881,6 @@ public class Activity extends ContextThemeWrapper */ public void startActivityForResultAsUser(Intent intent, int requestCode, @Nullable Bundle options, UserHandle user) { if (options != null) { mActivityTransitionState.startExitOutTransition(this, options); } if (mParent != null) { throw new RuntimeException("Can't be called from a child"); } Loading @@ -3896,10 +3902,7 @@ public class Activity extends ContextThemeWrapper mStartedActivity = true; } final View decor = mWindow != null ? mWindow.peekDecorView() : null; if (decor != null) { decor.cancelPendingInputEvents(); } cancelInputsAndStartExitTransition(options); } /** Loading @@ -3925,6 +3928,7 @@ public class Activity extends ContextThemeWrapper mToken, mEmbeddedID, -1, ar.getResultCode(), ar.getResultData()); } cancelInputsAndStartExitTransition(options); } /** Loading @@ -3948,6 +3952,7 @@ public class Activity extends ContextThemeWrapper mToken, mEmbeddedID, -1, ar.getResultCode(), ar.getResultData()); } cancelInputsAndStartExitTransition(options); } /** Loading Loading @@ -4380,6 +4385,7 @@ public class Activity extends ContextThemeWrapper mToken, child.mEmbeddedID, requestCode, ar.getResultCode(), ar.getResultData()); } cancelInputsAndStartExitTransition(options); } /** Loading Loading @@ -4431,9 +4437,6 @@ public class Activity extends ContextThemeWrapper @Override public void startActivityForResult( String who, Intent intent, int requestCode, @Nullable Bundle options) { if (options != null) { mActivityTransitionState.startExitOutTransition(this, options); } Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, who, Loading @@ -4443,6 +4446,7 @@ public class Activity extends ContextThemeWrapper mToken, who, requestCode, ar.getResultCode(), ar.getResultData()); } cancelInputsAndStartExitTransition(options); } /** Loading
core/java/android/app/ActivityTransitionCoordinator.java +34 −5 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.ViewGroupOverlay; import android.view.ViewParent; import android.view.ViewRootImpl; import android.view.ViewTreeObserver; import android.view.Window; import android.widget.ImageView; Loading Loading @@ -187,11 +188,6 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { */ public static final int MSG_SHARED_ELEMENT_DESTINATION = 107; /** * Send the shared element positions. */ public static final int MSG_SEND_SHARED_ELEMENT_DESTINATION = 108; private Window mWindow; final protected ArrayList<String> mAllSharedElementNames; final protected ArrayList<View> mSharedElements = new ArrayList<View>(); Loading @@ -207,6 +203,8 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { new ArrayList<GhostViewListeners>(); private ArrayMap<View, Float> mOriginalAlphas = new ArrayMap<View, Float>(); private ArrayList<Matrix> mSharedElementParentMatrices; private boolean mSharedElementTransitionComplete; private boolean mViewsTransitionComplete; public ActivityTransitionCoordinator(Window window, ArrayList<String> allSharedElementNames, Loading @@ -219,6 +217,11 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { } protected void viewsReady(ArrayMap<String, View> sharedElements) { final View decor = getDecor(); final ViewRootImpl viewRoot = decor == null ? null : decor.getViewRootImpl(); if (viewRoot != null) { viewRoot.setPausedForTransition(true); } sharedElements.retainAll(mAllSharedElementNames); if (mListener != null) { mListener.onMapSharedElements(mAllSharedElementNames, sharedElements); Loading Loading @@ -878,6 +881,32 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { } } protected boolean isViewsTransitionComplete() { return mViewsTransitionComplete; } protected void viewsTransitionComplete() { mViewsTransitionComplete = true; startInputWhenTransitionsComplete(); } protected void sharedElementTransitionComplete() { mSharedElementTransitionComplete = true; startInputWhenTransitionsComplete(); } private void startInputWhenTransitionsComplete() { if (mViewsTransitionComplete && mSharedElementTransitionComplete) { final View decor = getDecor(); if (decor != null) { final ViewRootImpl viewRoot = decor.getViewRootImpl(); viewRoot.setPausedForTransition(false); } onTransitionsComplete(); } } protected void onTransitionsComplete() {} protected class ContinueTransitionListener extends Transition.TransitionListenerAdapter { @Override public void onTransitionStart(Transition transition) { Loading
core/java/android/app/EnterTransitionCoordinator.java +5 −16 Original line number Diff line number Diff line Loading @@ -55,8 +55,6 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { private boolean mWasOpaque; private boolean mAreViewsReady; private boolean mIsViewsTransitionStarted; private boolean mIsViewsTransitionComplete; private boolean mIsSharedElementTransitionComplete; private Transition mEnterViewsTransition; public EnterTransitionCoordinator(Activity activity, ResultReceiver resultReceiver, Loading Loading @@ -456,7 +454,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } } if (viewsTransition == null) { viewTransitionComplete(); viewsTransitionComplete(); } else { viewsTransition.forceVisibility(View.INVISIBLE, true); final ArrayList<View> transitioningViews = mTransitioningViews; Loading @@ -474,7 +472,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { public void onTransitionEnd(Transition transition) { mEnterViewsTransition = null; transition.removeListener(this); viewTransitionComplete(); viewsTransitionComplete(); super.onTransitionEnd(transition); } }); Loading @@ -497,19 +495,10 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { return transition; } private void viewTransitionComplete() { mIsViewsTransitionComplete = true; if (mIsSharedElementTransitionComplete) { moveSharedElementsFromOverlay(); } } private void sharedElementTransitionComplete() { mIsSharedElementTransitionComplete = true; if (mIsViewsTransitionComplete) { @Override protected void onTransitionsComplete() { moveSharedElementsFromOverlay(); } } private void sharedElementTransitionStarted() { mSharedElementTransitionStarted = true; Loading
core/java/android/app/ExitTransitionCoordinator.java +12 −13 Original line number Diff line number Diff line Loading @@ -46,8 +46,6 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { private static final String TAG = "ExitTransitionCoordinator"; private static final long MAX_WAIT_MS = 1000; private boolean mExitComplete; private Bundle mSharedElementBundle; private boolean mExitNotified; Loading Loading @@ -165,7 +163,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { @Override public void onTransitionEnd(Transition transition) { transition.removeListener(this); if (mExitComplete) { if (isViewsTransitionComplete()) { delayCancel(); } } Loading Loading @@ -310,14 +308,14 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { viewsTransition = configureTransition(getViewsTransition(), true); } if (viewsTransition == null) { exitTransitionComplete(); viewsTransitionComplete(); } else { final ArrayList<View> transitioningViews = mTransitioningViews; viewsTransition.addListener(new ContinueTransitionListener() { @Override public void onTransitionEnd(Transition transition) { transition.removeListener(this); exitTransitionComplete(); viewsTransitionComplete(); if (mIsHidden && transitioningViews != null) { showViews(transitioningViews, true); } Loading Loading @@ -373,19 +371,15 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { } } private void exitTransitionComplete() { mExitComplete = true; notifyComplete(); } protected boolean isReadyToNotify() { return mSharedElementBundle != null && mResultReceiver != null && mIsBackgroundReady; } private void sharedElementTransitionComplete() { @Override protected void sharedElementTransitionComplete() { mSharedElementBundle = mExitSharedElementBundle == null ? captureSharedElementState() : captureExitSharedElementsState(); notifyComplete(); super.sharedElementTransitionComplete(); } private Bundle captureExitSharedElementsState() { Loading @@ -405,6 +399,11 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { return bundle; } @Override protected void onTransitionsComplete() { notifyComplete(); } protected void notifyComplete() { if (isReadyToNotify()) { if (!mSharedElementNotified) { Loading Loading @@ -433,7 +432,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { } private void notifyExitComplete() { if (!mExitNotified && mExitComplete) { if (!mExitNotified && isViewsTransitionComplete()) { mExitNotified = true; mResultReceiver.send(MSG_EXIT_TRANSITION_COMPLETE, null); mResultReceiver = null; // done talking Loading
core/java/android/view/AccessibilityInteractionController.java +4 −3 Original line number Diff line number Diff line Loading @@ -586,7 +586,7 @@ final class AccessibilityInteractionController { } } private void perfromAccessibilityActionUiThread(Message message) { private void performAccessibilityActionUiThread(Message message) { final int flags = message.arg1; final int accessibilityViewId = message.arg2; Loading @@ -602,7 +602,8 @@ final class AccessibilityInteractionController { boolean succeeded = false; try { if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) { if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null || mViewRootImpl.mStopped || mViewRootImpl.mPausedForTransition) { return; } mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags; Loading Loading @@ -1146,7 +1147,7 @@ final class AccessibilityInteractionController { findAccessibilityNodeInfoByAccessibilityIdUiThread(message); } break; case MSG_PERFORM_ACCESSIBILITY_ACTION: { perfromAccessibilityActionUiThread(message); performAccessibilityActionUiThread(message); } break; case MSG_FIND_ACCESSIBILITY_NODE_INFOS_BY_VIEW_ID: { findAccessibilityNodeInfosByViewIdUiThread(message); Loading