summaryrefslogtreecommitdiff
path: root/core/java/android/app/ActivityOptions.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/app/ActivityOptions.java')
-rw-r--r--core/java/android/app/ActivityOptions.java157
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);
- }
- }
- }
- }
}