ActivityOptions.java revision 8078d8c8a282ca81344febe7256f63b1e805e3aa
16de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn/*
26de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * Copyright (C) 2012 The Android Open Source Project
36de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn *
46de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
56de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * you may not use this file except in compliance with the License.
66de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * You may obtain a copy of the License at
76de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn *
86de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
96de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn *
106de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * Unless required by applicable law or agreed to in writing, software
116de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
126de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * See the License for the specific language governing permissions and
146de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * limitations under the License.
156de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn */
166de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
176de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackbornpackage android.app;
186de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
196de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackbornimport android.content.Context;
208078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackbornimport android.graphics.Bitmap;
216de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackbornimport android.os.Bundle;
228078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackbornimport android.os.Handler;
238078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackbornimport android.os.IRemoteCallback;
248078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackbornimport android.os.Message;
258078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackbornimport android.os.RemoteException;
268078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackbornimport android.view.View;
276de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
286de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn/**
296de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * Helper class for building an options Bundle that can be used with
306de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * {@link android.content.Context#startActivity(android.content.Intent, android.os.Bundle)
316de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * Context.startActivity(Intent, Bundle)} and related methods.
326de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn */
336de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackbornpublic class ActivityOptions {
346de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
356de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * The package name that created the options.
366de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @hide
376de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
386de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public static final String KEY_PACKAGE_NAME = "android:packageName";
396de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
406de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
418078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Type of animation that arguments specify.
428078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @hide
438078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     */
448078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final String KEY_ANIM_TYPE = "android:animType";
458078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
468078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /**
476de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Custom enter animation resource ID.
486de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @hide
496de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
506de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public static final String KEY_ANIM_ENTER_RES_ID = "android:animEnterRes";
516de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
526de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
536de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Custom exit animation resource ID.
546de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @hide
556de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
566de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public static final String KEY_ANIM_EXIT_RES_ID = "android:animExitRes";
576de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
588078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /**
598078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Bitmap for thumbnail animation.
608078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @hide
618078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     */
628078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final String KEY_ANIM_THUMBNAIL = "android:animThumbnail";
638078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
648078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /**
658078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Start X position of thumbnail animation.
668078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @hide
678078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     */
688078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final String KEY_ANIM_START_X = "android:animStartX";
698078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
708078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /**
718078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Start Y position of thumbnail animation.
728078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @hide
738078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     */
748078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final String KEY_ANIM_START_Y = "android:animStartY";
758078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
768078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /**
778078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Callback for when animation is started.
788078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @hide
798078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     */
808078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final String KEY_ANIM_START_LISTENER = "android:animStartListener";
818078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
828078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
838078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final int ANIM_NONE = 0;
848078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
858078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final int ANIM_CUSTOM = 1;
868078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
878078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final int ANIM_THUMBNAIL = 2;
888078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
896de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    private String mPackageName;
908078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    private int mAnimationType = ANIM_NONE;
916de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    private int mCustomEnterResId;
926de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    private int mCustomExitResId;
938078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    private Bitmap mThumbnail;
948078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    private int mStartX;
958078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    private int mStartY;
968078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    private IRemoteCallback mAnimationStartedListener;
976de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
986de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
996de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Create an ActivityOptions specifying a custom animation to run when
1006de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * the activity is displayed.
1016de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     *
1026de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @param context Who is defining this.  This is the application that the
1036de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * animation resources will be loaded from.
1046de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @param enterResId A resource ID of the animation resource to use for
1056de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * the incoming activity.  Use 0 for no animation.
1066de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @param exitResId A resource ID of the animation resource to use for
1076de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * the outgoing activity.  Use 0 for no animation.
1086de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @return Returns a new ActivityOptions object that you can use to
1096de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * supply these options as the options Bundle when starting an activity.
1106de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
1116de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public static ActivityOptions makeCustomAnimation(Context context,
1126de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            int enterResId, int exitResId) {
1136de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        ActivityOptions opts = new ActivityOptions();
1146de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        opts.mPackageName = context.getPackageName();
1158078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        opts.mAnimationType = ANIM_CUSTOM;
1166de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        opts.mCustomEnterResId = enterResId;
1176de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        opts.mCustomExitResId = exitResId;
1186de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return opts;
1196de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
1206de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
1218078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /**
1228078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Callback for use with {@link ActivityOptions#makeThumbnailScaleUpAnimation}
1238078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * to find out when the given animation has started running.
1248078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     */
1258078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public interface OnAnimationStartedListener {
1268078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        void onAnimationStarted();
1278078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
1288078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
1298078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /**
1308078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Create an ActivityOptions specifying an animation where a thumbnail
1318078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * is scaled from a given position to the new activity window that is
1328078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * being started.
1338078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     *
1348078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @param source The View that this thumbnail is animating from.  This
1358078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * defines the coordinate space for <var>startX</var> and <var>startY</var>.
1368078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @param thumbnail The bitmap that will be shown as the initial thumbnail
1378078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * of the animation.
1388078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @param startX The x starting location of the bitmap, in screen coordiantes.
1398078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @param startY The y starting location of the bitmap, in screen coordinates.
1408078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @param listener Optional OnAnimationStartedListener to find out when the
1418078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * requested animation has started running.  If for some reason the animation
1428078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * is not executed, the callback will happen immediately.
1438078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @return Returns a new ActivityOptions object that you can use to
1448078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * supply these options as the options Bundle when starting an activity.
1458078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     */
1468078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static ActivityOptions makeThumbnailScaleUpAnimation(View source,
1478078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            Bitmap thumbnail, int startX, int startY, OnAnimationStartedListener listener) {
1488078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        ActivityOptions opts = new ActivityOptions();
1498078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        opts.mPackageName = source.getContext().getPackageName();
1508078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        opts.mAnimationType = ANIM_THUMBNAIL;
1518078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        opts.mThumbnail = thumbnail;
1528078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        int[] pts = new int[2];
1538078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        source.getLocationOnScreen(pts);
1548078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        opts.mStartX = pts[0] + startX;
1558078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        opts.mStartY = pts[1] + startY;
1568078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        if (listener != null) {
1578078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            final Handler h = source.getHandler();
1588078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            final OnAnimationStartedListener finalListener = listener;
1598078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            opts.mAnimationStartedListener = new IRemoteCallback.Stub() {
1608078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                @Override public void sendResult(Bundle data) throws RemoteException {
1618078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                    h.post(new Runnable() {
1628078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                        @Override public void run() {
1638078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                            finalListener.onAnimationStarted();
1648078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                        }
1658078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                    });
1668078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                }
1678078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            };
1688078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        }
1698078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        return opts;
1708078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
1718078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
1726de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    private ActivityOptions() {
1736de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
1746de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
1756de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /** @hide */
1766de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public ActivityOptions(Bundle opts) {
1776de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        mPackageName = opts.getString(KEY_PACKAGE_NAME);
1788078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        mAnimationType = opts.getInt(KEY_ANIM_TYPE);
1798078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        if (mAnimationType == ANIM_CUSTOM) {
1806de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            mCustomEnterResId = opts.getInt(KEY_ANIM_ENTER_RES_ID, 0);
1816de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            mCustomExitResId = opts.getInt(KEY_ANIM_EXIT_RES_ID, 0);
1828078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        } else if (mAnimationType == ANIM_THUMBNAIL) {
1838078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            mThumbnail = (Bitmap)opts.getParcelable(KEY_ANIM_THUMBNAIL);
1848078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            mStartX = opts.getInt(KEY_ANIM_START_X, 0);
1858078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            mStartY = opts.getInt(KEY_ANIM_START_Y, 0);
1868078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            mAnimationStartedListener = IRemoteCallback.Stub.asInterface(
1878078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                    opts.getIBinder(KEY_ANIM_START_LISTENER));
1886de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        }
1896de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
1906de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
1916de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /** @hide */
1926de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public String getPackageName() {
1936de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return mPackageName;
1946de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
1956de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
1966de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /** @hide */
1978078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public int getAnimationType() {
1988078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        return mAnimationType;
1996de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
2006de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
2016de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /** @hide */
2026de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public int getCustomEnterResId() {
2036de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return mCustomEnterResId;
2046de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
2056de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
2066de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /** @hide */
2076de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public int getCustomExitResId() {
2086de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return mCustomExitResId;
2096de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
2106de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
2118078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
2128078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public Bitmap getThumbnail() {
2138078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        return mThumbnail;
2148078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
2158078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
2168078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
2178078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public int getStartX() {
2188078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        return mStartX;
2198078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
2208078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
2218078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
2228078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public int getStartY() {
2238078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        return mStartY;
2248078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
2258078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
2268078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
2278078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public IRemoteCallback getOnAnimationStartListener() {
2288078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        return mAnimationStartedListener;
2298078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
2308078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
2318078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
2328078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public void abort() {
2338078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        if (mAnimationStartedListener != null) {
2348078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            try {
2358078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mAnimationStartedListener.sendResult(null);
2368078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            } catch (RemoteException e) {
2378078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            }
2388078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        }
2398078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
2408078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
2418078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
2428078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static void abort(Bundle options) {
2438078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        if (options != null) {
2448078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            (new ActivityOptions(options)).abort();
2458078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        }
2468078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
2478078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
2486de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
2496de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Join the values in <var>otherOptions</var> in to this one.  Any values
2506de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * defined in <var>otherOptions</var> replace those in the base options.
2516de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
2526de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public void join(ActivityOptions otherOptions) {
2536de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        if (otherOptions.mPackageName != null) {
2546de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            mPackageName = otherOptions.mPackageName;
2556de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        }
2568078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        switch (otherOptions.mAnimationType) {
2578078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            case ANIM_CUSTOM:
2588078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mAnimationType = otherOptions.mAnimationType;
2598078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mCustomEnterResId = otherOptions.mCustomEnterResId;
2608078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mCustomExitResId = otherOptions.mCustomExitResId;
2618078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mThumbnail = null;
2628078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mAnimationStartedListener = null;
2638078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                break;
2648078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            case ANIM_THUMBNAIL:
2658078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mAnimationType = otherOptions.mAnimationType;
2668078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mThumbnail = otherOptions.mThumbnail;
2678078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mStartX = otherOptions.mStartX;
2688078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mStartY = otherOptions.mStartY;
2698078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                if (otherOptions.mAnimationStartedListener != null) {
2708078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                    try {
2718078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                        otherOptions.mAnimationStartedListener.sendResult(null);
2728078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                    } catch (RemoteException e) {
2738078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                    }
2748078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                }
2758078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mAnimationStartedListener = otherOptions.mAnimationStartedListener;
2768078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                break;
2776de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        }
2786de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
2796de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
2806de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
2816de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Returns the created options as a Bundle, which can be passed to
2826de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * {@link android.content.Context#startActivity(android.content.Intent, android.os.Bundle)
2836de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Context.startActivity(Intent, Bundle)} and related methods.
2846de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Note that the returned Bundle is still owned by the ActivityOptions
2856de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * object; you must not modify it, but can supply it to the startActivity
2866de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * methods that take an options Bundle.
2876de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
2886de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public Bundle toBundle() {
2896de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        Bundle b = new Bundle();
2906de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        if (mPackageName != null) {
2916de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            b.putString(KEY_PACKAGE_NAME, mPackageName);
2926de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        }
2938078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        switch (mAnimationType) {
2948078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            case ANIM_CUSTOM:
2958078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putInt(KEY_ANIM_TYPE, mAnimationType);
2968078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putInt(KEY_ANIM_ENTER_RES_ID, mCustomEnterResId);
2978078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putInt(KEY_ANIM_EXIT_RES_ID, mCustomExitResId);
2988078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                break;
2998078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            case ANIM_THUMBNAIL:
3008078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putInt(KEY_ANIM_TYPE, mAnimationType);
3018078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putParcelable(KEY_ANIM_THUMBNAIL, mThumbnail);
3028078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putInt(KEY_ANIM_START_X, mStartX);
3038078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putInt(KEY_ANIM_START_Y, mStartY);
3048078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putIBinder(KEY_ANIM_START_LISTENER, mAnimationStartedListener
3058078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                        != null ? mAnimationStartedListener.asBinder() : null);
3066de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        }
3076de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return b;
3086de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
3096de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn}
310