Merge "Revert "Internal API for cross-task Activity used by assistant."" into nyc-mr1-dev

am: fe3ecdab1b

* commit 'fe3ecdab1b461d811825ce363d7041f3c8c120c3':
  Revert "Internal API for cross-task Activity used by assistant."

Change-Id: If16a43f4a17e71cc12ed7c912ed5e6a46c85e56c
This commit is contained in:
Eino-Ville Talvala
2016-06-06 23:50:36 +00:00
committed by android-build-merger
10 changed files with 26 additions and 261 deletions

View File

@@ -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,
@@ -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.
*/
@@ -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);
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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();
@@ -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();

View File

@@ -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);
}
}
}
}
}

View File

@@ -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() {
}
@@ -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;
@@ -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();
@@ -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) {
@@ -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;
@@ -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);
}

View File

@@ -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();
@@ -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;
@@ -331,9 +325,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
if (mActivity == null || decorView == null) {
return;
}
if (!isCrossTask()) {
mActivity.overridePendingTransition(0, 0);
}
mActivity.overridePendingTransition(0, 0);
if (!mIsReturning) {
mWasOpaque = mActivity.convertToTranslucent(null, null);
Drawable background = decorView.getBackground();

View File

@@ -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;
@@ -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
@@ -191,9 +188,6 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
private void hideSharedElements() {
moveSharedElementsFromOverlay();
if (mHideSharedElementsCallback != null) {
mHideSharedElementsCallback.hideSharedElements();
}
if (!mIsHidden) {
hideViews(mSharedElements);
}
@@ -213,11 +207,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
startTransition(new Runnable() {
@Override
public void run() {
if (mActivity != null) {
beginTransitions();
} else {
startExitTransition();
}
beginTransitions();
}
});
}
@@ -518,8 +508,4 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
return getWindow().getSharedElementExitTransition();
}
}
interface HideSharedElementsCallback {
void hideSharedElements();
}
}

View File

@@ -1940,26 +1940,6 @@ public abstract class Transition implements Cloneable {
}
}
/**
* Force the transition to move to its end state, ending all the animators.
*
* @hide
*/
void forceToEnd(ViewGroup sceneRoot) {
ArrayMap<Animator, AnimationInfo> runningAnimators = getRunningAnimators();
int numOldAnims = runningAnimators.size();
if (sceneRoot != null) {
WindowId windowId = sceneRoot.getWindowId();
for (int i = numOldAnims - 1; i >= 0; i--) {
AnimationInfo info = runningAnimators.valueAt(i);
if (info.view != null && windowId != null && windowId.equals(info.windowId)) {
Animator anim = runningAnimators.keyAt(i);
anim.end();
}
}
}
}
/**
* This method cancels a transition that is currently running.
*

View File

@@ -440,7 +440,7 @@ public class TransitionManager {
ArrayList<Transition> copy = new ArrayList(runningTransitions);
for (int i = copy.size() - 1; i >= 0; i--) {
final Transition transition = copy.get(i);
transition.forceToEnd(sceneRoot);
transition.end();
}
}

View File

@@ -16,6 +16,8 @@
package android.transition;
import com.android.internal.R;
import android.animation.TimeInterpolator;
import android.content.Context;
import android.content.res.TypedArray;
@@ -24,8 +26,6 @@ import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import com.android.internal.R;
import java.util.ArrayList;
/**
@@ -498,16 +498,6 @@ public class TransitionSet extends Transition {
}
}
/** @hide */
@Override
void forceToEnd(ViewGroup sceneRoot) {
super.forceToEnd(sceneRoot);
int numTransitions = mTransitions.size();
for (int i = 0; i < numTransitions; ++i) {
mTransitions.get(i).forceToEnd(sceneRoot);
}
}
@Override
TransitionSet setSceneRoot(ViewGroup sceneRoot) {
super.setSceneRoot(sceneRoot);

View File

@@ -122,11 +122,9 @@
<!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_SET_PROGRESS}. -->
<item type="id" name="accessibilityActionSetProgress" />
<!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_CONTEXT_CLICK}. -->
<item type="id" name="accessibilityActionContextClick" />
<item type="id" name="remote_input_tag" />
<item type="id" name="cross_task_transition" />
</resources>

View File

@@ -2612,7 +2612,4 @@
<java-symbol type="array" name="config_defaultPinnerServiceFiles" />
<java-symbol type="string" name="suspended_widget_accessibility" />
<!-- Used internally for assistant to launch activity transitions -->
<java-symbol type="id" name="cross_task_transition" />
</resources>