Loading core/java/android/app/Activity.java +1 −16 Original line number Diff line number Diff line Loading @@ -4219,7 +4219,6 @@ public class Activity extends ContextThemeWrapper public void startActivityForResult(@RequiresPermission Intent intent, int requestCode, @Nullable Bundle options) { if (mParent == null) { options = transferSpringboardActivityOptions(options); Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, this, Loading Loading @@ -4268,14 +4267,6 @@ public class Activity extends ContextThemeWrapper } } private Bundle transferSpringboardActivityOptions(Bundle options) { if (options == null && (mWindow != null && !mWindow.isActive())) { return mActivityTransitionState.transferEnterActivityOptions(); } else { return options; } } /** * @hide Implement to provide correct calling token. */ Loading @@ -4291,7 +4282,6 @@ public class Activity extends ContextThemeWrapper if (mParent != null) { throw new RuntimeException("Can't be called from a child"); } options = transferSpringboardActivityOptions(options); Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, this, intent, requestCode, options, user); Loading Loading @@ -4327,7 +4317,6 @@ public class Activity extends ContextThemeWrapper if (mParent != null) { throw new RuntimeException("Can't be called from a child"); } options = transferSpringboardActivityOptions(options); Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, this, Loading Loading @@ -4360,7 +4349,6 @@ public class Activity extends ContextThemeWrapper if (mParent != null) { throw new RuntimeException("Can't be called from a child"); } options = transferSpringboardActivityOptions(options); Instrumentation.ActivityResult ar = mInstrumentation.execStartActivityAsCaller( this, mMainThread.getApplicationThread(), mToken, this, Loading Loading @@ -4800,7 +4788,6 @@ public class Activity extends ContextThemeWrapper */ public void startActivityFromChild(@NonNull Activity child, @RequiresPermission Intent intent, int requestCode, @Nullable Bundle options) { options = transferSpringboardActivityOptions(options); Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, child, Loading Loading @@ -4866,7 +4853,6 @@ public class Activity extends ContextThemeWrapper if (referrer != null) { intent.putExtra(Intent.EXTRA_REFERRER, referrer); } options = transferSpringboardActivityOptions(options); Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, who, Loading Loading @@ -6664,11 +6650,11 @@ public class Activity extends ContextThemeWrapper mVisibleFromClient = !mWindow.getWindowStyle().getBoolean( com.android.internal.R.styleable.Window_windowNoDisplay, false); mFragments.dispatchActivityCreated(); mActivityTransitionState.setEnterActivityOptions(this, getActivityOptions()); } final void performCreate(Bundle icicle) { restoreHasCurrentPermissionRequest(icicle); mActivityTransitionState.setEnterActivityOptions(this, getActivityOptions()); onCreate(icicle); mActivityTransitionState.readState(icicle); performCreateCommon(); Loading @@ -6676,7 +6662,6 @@ public class Activity extends ContextThemeWrapper final void performCreate(Bundle icicle, PersistableBundle persistentState) { restoreHasCurrentPermissionRequest(icicle); mActivityTransitionState.setEnterActivityOptions(this, getActivityOptions()); onCreate(icicle, persistentState); mActivityTransitionState.readState(icicle); performCreateCommon(); Loading core/java/android/app/ActivityOptions.java +9 −148 Original line number Diff line number Diff line Loading @@ -31,13 +31,10 @@ import android.os.IRemoteCallback; import android.os.Parcelable; import android.os.RemoteException; import android.os.ResultReceiver; import android.transition.Transition; import android.transition.TransitionManager; import android.util.Pair; import android.util.Slog; import android.view.AppTransitionAnimationSpec; import android.view.View; import android.view.ViewGroup; import android.view.Window; import java.util.ArrayList; Loading Loading @@ -643,70 +640,9 @@ public class ActivityOptions { public static ActivityOptions makeSceneTransitionAnimation(Activity activity, Pair<View, String>... sharedElements) { ActivityOptions opts = new ActivityOptions(); makeSceneTransitionAnimation(activity, activity.getWindow(), opts, activity.mExitTransitionListener, sharedElements); return opts; } /** * Call this immediately prior to startActivity to begin a shared element transition * from a non-Activity. The window must support Window.FEATURE_ACTIVITY_TRANSITIONS. * The exit transition will start immediately and the shared element transition will * start once the launched Activity's shared element is ready. * <p> * When all transitions have completed and the shared element has been transfered, * the window's decor View will have its visibility set to View.GONE. * * @hide */ @SafeVarargs public static ActivityOptions startSharedElementAnimation(Window window, Pair<View, String>... sharedElements) { ActivityOptions opts = new ActivityOptions(); final View decorView = window.getDecorView(); if (decorView == null) { return opts; } final ExitTransitionCoordinator exit = makeSceneTransitionAnimation(null, window, opts, null, sharedElements); if (exit != null) { HideWindowListener listener = new HideWindowListener(window, exit); exit.setHideSharedElementsCallback(listener); exit.startExit(); } return opts; } /** * This method should be called when the {@link #startSharedElementAnimation(Window, Pair[])} * animation must be stopped and the Views reset. This can happen if there was an error * from startActivity or a springboard activity and the animation should stop and reset. * * @hide */ public static void stopSharedElementAnimation(Window window) { final View decorView = window.getDecorView(); if (decorView == null) { return; } final ExitTransitionCoordinator exit = (ExitTransitionCoordinator) decorView.getTag(com.android.internal.R.id.cross_task_transition); if (exit != null) { exit.cancelPendingTransitions(); decorView.setTagInternal(com.android.internal.R.id.cross_task_transition, null); TransitionManager.endTransitions((ViewGroup) decorView); exit.resetViews(); exit.clearState(); decorView.setVisibility(View.VISIBLE); } } static ExitTransitionCoordinator makeSceneTransitionAnimation(Activity activity, Window window, ActivityOptions opts, SharedElementCallback callback, Pair<View, String>[] sharedElements) { if (!window.hasFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)) { if (!activity.getWindow().hasFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)) { opts.mAnimationType = ANIM_DEFAULT; return null; return opts; } opts.mAnimationType = ANIM_SCENE_TRANSITION; Loading @@ -729,22 +665,18 @@ public class ActivityOptions { } } ExitTransitionCoordinator exit = new ExitTransitionCoordinator(activity, window, callback, names, names, views, false); ExitTransitionCoordinator exit = new ExitTransitionCoordinator(activity, names, names, views, false); opts.mTransitionReceiver = exit; opts.mSharedElementNames = names; opts.mIsReturning = (activity == null); if (activity == null) { opts.mExitCoordinatorIndex = -1; } else { opts.mIsReturning = false; opts.mExitCoordinatorIndex = activity.mActivityTransitionState.addExitTransitionCoordinator(exit); } return exit; return opts; } /** @hide */ static ActivityOptions makeSceneTransitionAnimation(Activity activity, public static ActivityOptions makeSceneTransitionAnimation(Activity activity, ExitTransitionCoordinator exitCoordinator, ArrayList<String> sharedElementNames, int resultCode, Intent resultData) { ActivityOptions opts = new ActivityOptions(); Loading Loading @@ -968,16 +900,6 @@ public class ActivityOptions { return mIsReturning; } /** * Returns whether or not the ActivityOptions was created with * {@link #startSharedElementAnimation(Window, Pair[])}. * * @hide */ boolean isCrossTask() { return mExitCoordinatorIndex < 0; } /** @hide */ public ArrayList<String> getSharedElementNames() { return mSharedElementNames; Loading Loading @@ -1269,65 +1191,4 @@ public class ActivityOptions { + ", mAnimationType=" + mAnimationType + ", mStartX=" + mStartX + ", mStartY=" + mStartY + ", mWidth=" + mWidth + ", mHeight=" + mHeight; } private static class HideWindowListener extends Transition.TransitionListenerAdapter implements ExitTransitionCoordinator.HideSharedElementsCallback { private final Window mWindow; private final ExitTransitionCoordinator mExit; private final boolean mWaitingForTransition; private boolean mTransitionEnded; private boolean mSharedElementHidden; private ArrayList<View> mSharedElements; public HideWindowListener(Window window, ExitTransitionCoordinator exit) { mWindow = window; mExit = exit; mSharedElements = new ArrayList<>(exit.mSharedElements); Transition transition = mWindow.getExitTransition(); if (transition != null) { transition.addListener(this); mWaitingForTransition = true; } else { mWaitingForTransition = false; } View decorView = mWindow.getDecorView(); if (decorView != null) { if (decorView.getTag(com.android.internal.R.id.cross_task_transition) != null) { throw new IllegalStateException( "Cannot start a transition while one is running"); } decorView.setTagInternal(com.android.internal.R.id.cross_task_transition, exit); } } @Override public void onTransitionEnd(Transition transition) { mTransitionEnded = true; hideWhenDone(); transition.removeListener(this); } @Override public void hideSharedElements() { mSharedElementHidden = true; hideWhenDone(); } private void hideWhenDone() { if (mSharedElementHidden && (!mWaitingForTransition || mTransitionEnded)) { mExit.resetViews(); int numSharedElements = mSharedElements.size(); for (int i = 0; i < numSharedElements; i++) { View view = mSharedElements.get(i); view.requestLayout(); } View decorView = mWindow.getDecorView(); if (decorView != null) { decorView.setTagInternal( com.android.internal.R.id.cross_task_transition, null); decorView.setVisibility(View.GONE); } } } } } core/java/android/app/ActivityTransitionState.java +4 −28 Original line number Diff line number Diff line Loading @@ -105,12 +105,6 @@ class ActivityTransitionState { private boolean mIsEnterTriggered; /** * The ActivityOptions Bundle. This is used to transfer ActivityOptions through a * springboard Activity. */ private Bundle mEnterBundle; public ActivityTransitionState() { } Loading Loading @@ -156,10 +150,6 @@ class ActivityTransitionState { } public void setEnterActivityOptions(Activity activity, ActivityOptions options) { if (options != null && mEnterBundle == null && options.getAnimationType() == ActivityOptions.ANIM_SCENE_TRANSITION) { mEnterBundle = options.toBundle(); } final Window window = activity.getWindow(); if (window == null) { return; Loading Loading @@ -195,12 +185,7 @@ class ActivityTransitionState { activity.getWindow().getDecorView().setVisibility(View.VISIBLE); } mEnterTransitionCoordinator = new EnterTransitionCoordinator(activity, resultReceiver, sharedElementNames, mEnterActivityOptions.isReturning(), mEnterActivityOptions.isCrossTask()); if (mEnterActivityOptions.isCrossTask()) { mExitingFrom = new ArrayList<>(mEnterActivityOptions.getSharedElementNames()); mExitingTo = new ArrayList<>(mEnterActivityOptions.getSharedElementNames()); } resultReceiver, sharedElementNames, mEnterActivityOptions.isReturning()); if (!mIsEnterPostponed) { startEnter(); Loading Loading @@ -239,13 +224,6 @@ class ActivityTransitionState { mEnterActivityOptions = null; } Bundle transferEnterActivityOptions() { mEnterActivityOptions = null; Bundle options = mEnterBundle; mEnterBundle = null; return options; } public void onStop() { restoreExitedViews(); if (mEnterTransitionCoordinator != null) { Loading Loading @@ -297,8 +275,7 @@ class ActivityTransitionState { } private void restoreReenteringViews() { if (mEnterTransitionCoordinator != null && mEnterTransitionCoordinator.isReturning() && !mEnterTransitionCoordinator.isCrossTask()) { if (mEnterTransitionCoordinator != null && mEnterTransitionCoordinator.isReturning()) { mEnterTransitionCoordinator.forceViewsToAppear(); mExitingFrom = null; mExitingTo = null; Loading @@ -325,9 +302,8 @@ class ActivityTransitionState { } } mReturnExitCoordinator = new ExitTransitionCoordinator(activity, activity.getWindow(), activity.mEnterTransitionListener, mEnteringNames, null, null, true); mReturnExitCoordinator = new ExitTransitionCoordinator(activity, mEnteringNames, null, null, true); if (enterViewsTransition != null && decor != null) { enterViewsTransition.resume(decor); } Loading core/java/android/app/EnterTransitionCoordinator.java +3 −11 Original line number Diff line number Diff line Loading @@ -59,14 +59,12 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { private boolean mIsViewsTransitionStarted; private Transition mEnterViewsTransition; private OnPreDrawListener mViewsReadyListener; private final boolean mIsCrossTask; public EnterTransitionCoordinator(Activity activity, ResultReceiver resultReceiver, ArrayList<String> sharedElementNames, boolean isReturning, boolean isCrossTask) { ArrayList<String> sharedElementNames, boolean isReturning) { super(activity.getWindow(), sharedElementNames, getListener(activity, isReturning && !isCrossTask), isReturning); getListener(activity, isReturning), isReturning); mActivity = activity; mIsCrossTask = isCrossTask; setResultReceiver(resultReceiver); prepareEnter(); Bundle resultReceiverBundle = new Bundle(); Loading @@ -87,10 +85,6 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } } boolean isCrossTask() { return mIsCrossTask; } public void viewInstancesReady(ArrayList<String> accepted, ArrayList<String> localNames, ArrayList<View> localViews) { boolean remap = false; Loading Loading @@ -331,9 +325,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { if (mActivity == null || decorView == null) { return; } if (!isCrossTask()) { mActivity.overridePendingTransition(0, 0); } if (!mIsReturning) { mWasOpaque = mActivity.convertToTranslucent(null, null); Drawable background = decorView.getBackground(); Loading core/java/android/app/ExitTransitionCoordinator.java +5 −19 Original line number Diff line number Diff line Loading @@ -35,7 +35,6 @@ import android.transition.TransitionManager; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.Window; import java.util.ArrayList; Loading @@ -60,20 +59,18 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { private Bundle mExitSharedElementBundle; private boolean mIsExitStarted; private boolean mSharedElementsHidden; private HideSharedElementsCallback mHideSharedElementsCallback; public ExitTransitionCoordinator(Activity activity, Window window, SharedElementCallback listener, ArrayList<String> names, public ExitTransitionCoordinator(Activity activity, ArrayList<String> names, ArrayList<String> accepted, ArrayList<View> mapped, boolean isReturning) { super(window, names, listener, isReturning); super(activity.getWindow(), names, getListener(activity, isReturning), isReturning); viewsReady(mapSharedElements(accepted, mapped)); stripOffscreenViews(); mIsBackgroundReady = !isReturning; mActivity = activity; } void setHideSharedElementsCallback(HideSharedElementsCallback callback) { mHideSharedElementsCallback = callback; private static SharedElementCallback getListener(Activity activity, boolean isReturning) { return isReturning ? activity.mEnterTransitionListener : activity.mExitTransitionListener; } @Override Loading Loading @@ -191,9 +188,6 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { private void hideSharedElements() { moveSharedElementsFromOverlay(); if (mHideSharedElementsCallback != null) { mHideSharedElementsCallback.hideSharedElements(); } if (!mIsHidden) { hideViews(mSharedElements); } Loading @@ -213,11 +207,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { startTransition(new Runnable() { @Override public void run() { if (mActivity != null) { beginTransitions(); } else { startExitTransition(); } } }); } Loading Loading @@ -518,8 +508,4 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { return getWindow().getSharedElementExitTransition(); } } interface HideSharedElementsCallback { void hideSharedElements(); } } Loading
core/java/android/app/Activity.java +1 −16 Original line number Diff line number Diff line Loading @@ -4219,7 +4219,6 @@ public class Activity extends ContextThemeWrapper public void startActivityForResult(@RequiresPermission Intent intent, int requestCode, @Nullable Bundle options) { if (mParent == null) { options = transferSpringboardActivityOptions(options); Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, this, Loading Loading @@ -4268,14 +4267,6 @@ public class Activity extends ContextThemeWrapper } } private Bundle transferSpringboardActivityOptions(Bundle options) { if (options == null && (mWindow != null && !mWindow.isActive())) { return mActivityTransitionState.transferEnterActivityOptions(); } else { return options; } } /** * @hide Implement to provide correct calling token. */ Loading @@ -4291,7 +4282,6 @@ public class Activity extends ContextThemeWrapper if (mParent != null) { throw new RuntimeException("Can't be called from a child"); } options = transferSpringboardActivityOptions(options); Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, this, intent, requestCode, options, user); Loading Loading @@ -4327,7 +4317,6 @@ public class Activity extends ContextThemeWrapper if (mParent != null) { throw new RuntimeException("Can't be called from a child"); } options = transferSpringboardActivityOptions(options); Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, this, Loading Loading @@ -4360,7 +4349,6 @@ public class Activity extends ContextThemeWrapper if (mParent != null) { throw new RuntimeException("Can't be called from a child"); } options = transferSpringboardActivityOptions(options); Instrumentation.ActivityResult ar = mInstrumentation.execStartActivityAsCaller( this, mMainThread.getApplicationThread(), mToken, this, Loading Loading @@ -4800,7 +4788,6 @@ public class Activity extends ContextThemeWrapper */ public void startActivityFromChild(@NonNull Activity child, @RequiresPermission Intent intent, int requestCode, @Nullable Bundle options) { options = transferSpringboardActivityOptions(options); Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, child, Loading Loading @@ -4866,7 +4853,6 @@ public class Activity extends ContextThemeWrapper if (referrer != null) { intent.putExtra(Intent.EXTRA_REFERRER, referrer); } options = transferSpringboardActivityOptions(options); Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, who, Loading Loading @@ -6664,11 +6650,11 @@ public class Activity extends ContextThemeWrapper mVisibleFromClient = !mWindow.getWindowStyle().getBoolean( com.android.internal.R.styleable.Window_windowNoDisplay, false); mFragments.dispatchActivityCreated(); mActivityTransitionState.setEnterActivityOptions(this, getActivityOptions()); } final void performCreate(Bundle icicle) { restoreHasCurrentPermissionRequest(icicle); mActivityTransitionState.setEnterActivityOptions(this, getActivityOptions()); onCreate(icicle); mActivityTransitionState.readState(icicle); performCreateCommon(); Loading @@ -6676,7 +6662,6 @@ public class Activity extends ContextThemeWrapper final void performCreate(Bundle icicle, PersistableBundle persistentState) { restoreHasCurrentPermissionRequest(icicle); mActivityTransitionState.setEnterActivityOptions(this, getActivityOptions()); onCreate(icicle, persistentState); mActivityTransitionState.readState(icicle); performCreateCommon(); Loading
core/java/android/app/ActivityOptions.java +9 −148 Original line number Diff line number Diff line Loading @@ -31,13 +31,10 @@ import android.os.IRemoteCallback; import android.os.Parcelable; import android.os.RemoteException; import android.os.ResultReceiver; import android.transition.Transition; import android.transition.TransitionManager; import android.util.Pair; import android.util.Slog; import android.view.AppTransitionAnimationSpec; import android.view.View; import android.view.ViewGroup; import android.view.Window; import java.util.ArrayList; Loading Loading @@ -643,70 +640,9 @@ public class ActivityOptions { public static ActivityOptions makeSceneTransitionAnimation(Activity activity, Pair<View, String>... sharedElements) { ActivityOptions opts = new ActivityOptions(); makeSceneTransitionAnimation(activity, activity.getWindow(), opts, activity.mExitTransitionListener, sharedElements); return opts; } /** * Call this immediately prior to startActivity to begin a shared element transition * from a non-Activity. The window must support Window.FEATURE_ACTIVITY_TRANSITIONS. * The exit transition will start immediately and the shared element transition will * start once the launched Activity's shared element is ready. * <p> * When all transitions have completed and the shared element has been transfered, * the window's decor View will have its visibility set to View.GONE. * * @hide */ @SafeVarargs public static ActivityOptions startSharedElementAnimation(Window window, Pair<View, String>... sharedElements) { ActivityOptions opts = new ActivityOptions(); final View decorView = window.getDecorView(); if (decorView == null) { return opts; } final ExitTransitionCoordinator exit = makeSceneTransitionAnimation(null, window, opts, null, sharedElements); if (exit != null) { HideWindowListener listener = new HideWindowListener(window, exit); exit.setHideSharedElementsCallback(listener); exit.startExit(); } return opts; } /** * This method should be called when the {@link #startSharedElementAnimation(Window, Pair[])} * animation must be stopped and the Views reset. This can happen if there was an error * from startActivity or a springboard activity and the animation should stop and reset. * * @hide */ public static void stopSharedElementAnimation(Window window) { final View decorView = window.getDecorView(); if (decorView == null) { return; } final ExitTransitionCoordinator exit = (ExitTransitionCoordinator) decorView.getTag(com.android.internal.R.id.cross_task_transition); if (exit != null) { exit.cancelPendingTransitions(); decorView.setTagInternal(com.android.internal.R.id.cross_task_transition, null); TransitionManager.endTransitions((ViewGroup) decorView); exit.resetViews(); exit.clearState(); decorView.setVisibility(View.VISIBLE); } } static ExitTransitionCoordinator makeSceneTransitionAnimation(Activity activity, Window window, ActivityOptions opts, SharedElementCallback callback, Pair<View, String>[] sharedElements) { if (!window.hasFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)) { if (!activity.getWindow().hasFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)) { opts.mAnimationType = ANIM_DEFAULT; return null; return opts; } opts.mAnimationType = ANIM_SCENE_TRANSITION; Loading @@ -729,22 +665,18 @@ public class ActivityOptions { } } ExitTransitionCoordinator exit = new ExitTransitionCoordinator(activity, window, callback, names, names, views, false); ExitTransitionCoordinator exit = new ExitTransitionCoordinator(activity, names, names, views, false); opts.mTransitionReceiver = exit; opts.mSharedElementNames = names; opts.mIsReturning = (activity == null); if (activity == null) { opts.mExitCoordinatorIndex = -1; } else { opts.mIsReturning = false; opts.mExitCoordinatorIndex = activity.mActivityTransitionState.addExitTransitionCoordinator(exit); } return exit; return opts; } /** @hide */ static ActivityOptions makeSceneTransitionAnimation(Activity activity, public static ActivityOptions makeSceneTransitionAnimation(Activity activity, ExitTransitionCoordinator exitCoordinator, ArrayList<String> sharedElementNames, int resultCode, Intent resultData) { ActivityOptions opts = new ActivityOptions(); Loading Loading @@ -968,16 +900,6 @@ public class ActivityOptions { return mIsReturning; } /** * Returns whether or not the ActivityOptions was created with * {@link #startSharedElementAnimation(Window, Pair[])}. * * @hide */ boolean isCrossTask() { return mExitCoordinatorIndex < 0; } /** @hide */ public ArrayList<String> getSharedElementNames() { return mSharedElementNames; Loading Loading @@ -1269,65 +1191,4 @@ public class ActivityOptions { + ", mAnimationType=" + mAnimationType + ", mStartX=" + mStartX + ", mStartY=" + mStartY + ", mWidth=" + mWidth + ", mHeight=" + mHeight; } private static class HideWindowListener extends Transition.TransitionListenerAdapter implements ExitTransitionCoordinator.HideSharedElementsCallback { private final Window mWindow; private final ExitTransitionCoordinator mExit; private final boolean mWaitingForTransition; private boolean mTransitionEnded; private boolean mSharedElementHidden; private ArrayList<View> mSharedElements; public HideWindowListener(Window window, ExitTransitionCoordinator exit) { mWindow = window; mExit = exit; mSharedElements = new ArrayList<>(exit.mSharedElements); Transition transition = mWindow.getExitTransition(); if (transition != null) { transition.addListener(this); mWaitingForTransition = true; } else { mWaitingForTransition = false; } View decorView = mWindow.getDecorView(); if (decorView != null) { if (decorView.getTag(com.android.internal.R.id.cross_task_transition) != null) { throw new IllegalStateException( "Cannot start a transition while one is running"); } decorView.setTagInternal(com.android.internal.R.id.cross_task_transition, exit); } } @Override public void onTransitionEnd(Transition transition) { mTransitionEnded = true; hideWhenDone(); transition.removeListener(this); } @Override public void hideSharedElements() { mSharedElementHidden = true; hideWhenDone(); } private void hideWhenDone() { if (mSharedElementHidden && (!mWaitingForTransition || mTransitionEnded)) { mExit.resetViews(); int numSharedElements = mSharedElements.size(); for (int i = 0; i < numSharedElements; i++) { View view = mSharedElements.get(i); view.requestLayout(); } View decorView = mWindow.getDecorView(); if (decorView != null) { decorView.setTagInternal( com.android.internal.R.id.cross_task_transition, null); decorView.setVisibility(View.GONE); } } } } }
core/java/android/app/ActivityTransitionState.java +4 −28 Original line number Diff line number Diff line Loading @@ -105,12 +105,6 @@ class ActivityTransitionState { private boolean mIsEnterTriggered; /** * The ActivityOptions Bundle. This is used to transfer ActivityOptions through a * springboard Activity. */ private Bundle mEnterBundle; public ActivityTransitionState() { } Loading Loading @@ -156,10 +150,6 @@ class ActivityTransitionState { } public void setEnterActivityOptions(Activity activity, ActivityOptions options) { if (options != null && mEnterBundle == null && options.getAnimationType() == ActivityOptions.ANIM_SCENE_TRANSITION) { mEnterBundle = options.toBundle(); } final Window window = activity.getWindow(); if (window == null) { return; Loading Loading @@ -195,12 +185,7 @@ class ActivityTransitionState { activity.getWindow().getDecorView().setVisibility(View.VISIBLE); } mEnterTransitionCoordinator = new EnterTransitionCoordinator(activity, resultReceiver, sharedElementNames, mEnterActivityOptions.isReturning(), mEnterActivityOptions.isCrossTask()); if (mEnterActivityOptions.isCrossTask()) { mExitingFrom = new ArrayList<>(mEnterActivityOptions.getSharedElementNames()); mExitingTo = new ArrayList<>(mEnterActivityOptions.getSharedElementNames()); } resultReceiver, sharedElementNames, mEnterActivityOptions.isReturning()); if (!mIsEnterPostponed) { startEnter(); Loading Loading @@ -239,13 +224,6 @@ class ActivityTransitionState { mEnterActivityOptions = null; } Bundle transferEnterActivityOptions() { mEnterActivityOptions = null; Bundle options = mEnterBundle; mEnterBundle = null; return options; } public void onStop() { restoreExitedViews(); if (mEnterTransitionCoordinator != null) { Loading Loading @@ -297,8 +275,7 @@ class ActivityTransitionState { } private void restoreReenteringViews() { if (mEnterTransitionCoordinator != null && mEnterTransitionCoordinator.isReturning() && !mEnterTransitionCoordinator.isCrossTask()) { if (mEnterTransitionCoordinator != null && mEnterTransitionCoordinator.isReturning()) { mEnterTransitionCoordinator.forceViewsToAppear(); mExitingFrom = null; mExitingTo = null; Loading @@ -325,9 +302,8 @@ class ActivityTransitionState { } } mReturnExitCoordinator = new ExitTransitionCoordinator(activity, activity.getWindow(), activity.mEnterTransitionListener, mEnteringNames, null, null, true); mReturnExitCoordinator = new ExitTransitionCoordinator(activity, mEnteringNames, null, null, true); if (enterViewsTransition != null && decor != null) { enterViewsTransition.resume(decor); } Loading
core/java/android/app/EnterTransitionCoordinator.java +3 −11 Original line number Diff line number Diff line Loading @@ -59,14 +59,12 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { private boolean mIsViewsTransitionStarted; private Transition mEnterViewsTransition; private OnPreDrawListener mViewsReadyListener; private final boolean mIsCrossTask; public EnterTransitionCoordinator(Activity activity, ResultReceiver resultReceiver, ArrayList<String> sharedElementNames, boolean isReturning, boolean isCrossTask) { ArrayList<String> sharedElementNames, boolean isReturning) { super(activity.getWindow(), sharedElementNames, getListener(activity, isReturning && !isCrossTask), isReturning); getListener(activity, isReturning), isReturning); mActivity = activity; mIsCrossTask = isCrossTask; setResultReceiver(resultReceiver); prepareEnter(); Bundle resultReceiverBundle = new Bundle(); Loading @@ -87,10 +85,6 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } } boolean isCrossTask() { return mIsCrossTask; } public void viewInstancesReady(ArrayList<String> accepted, ArrayList<String> localNames, ArrayList<View> localViews) { boolean remap = false; Loading Loading @@ -331,9 +325,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { if (mActivity == null || decorView == null) { return; } if (!isCrossTask()) { mActivity.overridePendingTransition(0, 0); } if (!mIsReturning) { mWasOpaque = mActivity.convertToTranslucent(null, null); Drawable background = decorView.getBackground(); Loading
core/java/android/app/ExitTransitionCoordinator.java +5 −19 Original line number Diff line number Diff line Loading @@ -35,7 +35,6 @@ import android.transition.TransitionManager; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.Window; import java.util.ArrayList; Loading @@ -60,20 +59,18 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { private Bundle mExitSharedElementBundle; private boolean mIsExitStarted; private boolean mSharedElementsHidden; private HideSharedElementsCallback mHideSharedElementsCallback; public ExitTransitionCoordinator(Activity activity, Window window, SharedElementCallback listener, ArrayList<String> names, public ExitTransitionCoordinator(Activity activity, ArrayList<String> names, ArrayList<String> accepted, ArrayList<View> mapped, boolean isReturning) { super(window, names, listener, isReturning); super(activity.getWindow(), names, getListener(activity, isReturning), isReturning); viewsReady(mapSharedElements(accepted, mapped)); stripOffscreenViews(); mIsBackgroundReady = !isReturning; mActivity = activity; } void setHideSharedElementsCallback(HideSharedElementsCallback callback) { mHideSharedElementsCallback = callback; private static SharedElementCallback getListener(Activity activity, boolean isReturning) { return isReturning ? activity.mEnterTransitionListener : activity.mExitTransitionListener; } @Override Loading Loading @@ -191,9 +188,6 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { private void hideSharedElements() { moveSharedElementsFromOverlay(); if (mHideSharedElementsCallback != null) { mHideSharedElementsCallback.hideSharedElements(); } if (!mIsHidden) { hideViews(mSharedElements); } Loading @@ -213,11 +207,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { startTransition(new Runnable() { @Override public void run() { if (mActivity != null) { beginTransitions(); } else { startExitTransition(); } } }); } Loading Loading @@ -518,8 +508,4 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { return getWindow().getSharedElementExitTransition(); } } interface HideSharedElementsCallback { void hideSharedElements(); } }