diff options
Diffstat (limited to 'core/java/android/app/ActivityOptions.java')
| -rw-r--r-- | core/java/android/app/ActivityOptions.java | 157 |
1 files changed, 9 insertions, 148 deletions
diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java index ccc37d72e846..4c8ddc7eb6b1 100644 --- a/core/java/android/app/ActivityOptions.java +++ b/core/java/android/app/ActivityOptions.java @@ -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; @@ -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; @@ -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.mExitCoordinatorIndex = - activity.mActivityTransitionState.addExitTransitionCoordinator(exit); - } - return exit; + opts.mIsReturning = false; + opts.mExitCoordinatorIndex = + activity.mActivityTransitionState.addExitTransitionCoordinator(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(); @@ -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; @@ -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); - } - } - } - } } |
