ActivityOptions.java revision 9944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31
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.RemoteException;
258078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackbornimport android.view.View;
266de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
276de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn/**
286de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * Helper class for building an options Bundle that can be used with
296de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * {@link android.content.Context#startActivity(android.content.Intent, android.os.Bundle)
306de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * Context.startActivity(Intent, Bundle)} and related methods.
316de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn */
326de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackbornpublic class ActivityOptions {
336de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
346de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * The package name that created the options.
356de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @hide
366de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
376de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public static final String KEY_PACKAGE_NAME = "android:packageName";
386de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
396de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
408078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Type of animation that arguments specify.
418078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @hide
428078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     */
438078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final String KEY_ANIM_TYPE = "android:animType";
448078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
458078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /**
466de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Custom enter animation resource ID.
476de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @hide
486de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
496de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public static final String KEY_ANIM_ENTER_RES_ID = "android:animEnterRes";
506de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
516de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
526de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Custom exit animation resource ID.
536de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @hide
546de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
556de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public static final String KEY_ANIM_EXIT_RES_ID = "android:animExitRes";
566de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
578078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /**
588078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Bitmap for thumbnail animation.
598078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @hide
608078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     */
618078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final String KEY_ANIM_THUMBNAIL = "android:animThumbnail";
628078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
638078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /**
648078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Start X position of thumbnail animation.
658078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @hide
668078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     */
678078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final String KEY_ANIM_START_X = "android:animStartX";
688078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
698078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /**
708078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Start Y position of thumbnail animation.
718078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @hide
728078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     */
738078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final String KEY_ANIM_START_Y = "android:animStartY";
748078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
758078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /**
768078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Callback for when animation is started.
778078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @hide
788078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     */
798078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final String KEY_ANIM_START_LISTENER = "android:animStartListener";
808078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
818078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
828078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final int ANIM_NONE = 0;
838078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
848078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final int ANIM_CUSTOM = 1;
858078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
868078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static final int ANIM_THUMBNAIL = 2;
878078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
886de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    private String mPackageName;
898078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    private int mAnimationType = ANIM_NONE;
906de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    private int mCustomEnterResId;
916de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    private int mCustomExitResId;
928078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    private Bitmap mThumbnail;
938078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    private int mStartX;
948078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    private int mStartY;
958078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    private IRemoteCallback mAnimationStartedListener;
966de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
976de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
986de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Create an ActivityOptions specifying a custom animation to run when
996de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * the activity is displayed.
1006de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     *
1016de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @param context Who is defining this.  This is the application that the
1026de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * animation resources will be loaded from.
1036de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @param enterResId A resource ID of the animation resource to use for
1046de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * the incoming activity.  Use 0 for no animation.
1056de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @param exitResId A resource ID of the animation resource to use for
1066de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * the outgoing activity.  Use 0 for no animation.
1076de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @return Returns a new ActivityOptions object that you can use to
1086de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * supply these options as the options Bundle when starting an activity.
1096de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
1106de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public static ActivityOptions makeCustomAnimation(Context context,
1116de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            int enterResId, int exitResId) {
1126de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        ActivityOptions opts = new ActivityOptions();
1136de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        opts.mPackageName = context.getPackageName();
1148078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        opts.mAnimationType = ANIM_CUSTOM;
1156de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        opts.mCustomEnterResId = enterResId;
1166de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        opts.mCustomExitResId = exitResId;
1176de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return opts;
1186de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
1196de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
1208078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /**
1218078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Callback for use with {@link ActivityOptions#makeThumbnailScaleUpAnimation}
1228078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * to find out when the given animation has started running.
1239944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn     * @hide
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.
1409944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn     * @return Returns a new ActivityOptions object that you can use to
1419944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn     * supply these options as the options Bundle when starting an activity.
1429944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn     */
1439944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn    public static ActivityOptions makeThumbnailScaleUpAnimation(View source,
1449944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn            Bitmap thumbnail, int startX, int startY) {
1459944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn        return makeThumbnailScaleUpAnimation(source, thumbnail, startX, startY, null);
1469944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn    }
1479944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn
1489944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn    /**
1499944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn     * Create an ActivityOptions specifying an animation where a thumbnail
1509944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn     * is scaled from a given position to the new activity window that is
1519944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn     * being started.
1529944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn     *
1539944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn     * @param source The View that this thumbnail is animating from.  This
1549944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn     * defines the coordinate space for <var>startX</var> and <var>startY</var>.
1559944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn     * @param thumbnail The bitmap that will be shown as the initial thumbnail
1569944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn     * of the animation.
1579944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn     * @param startX The x starting location of the bitmap, in screen coordiantes.
1589944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn     * @param startY The y starting location of the bitmap, in screen coordinates.
1598078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @param listener Optional OnAnimationStartedListener to find out when the
1608078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * requested animation has started running.  If for some reason the animation
1618078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * is not executed, the callback will happen immediately.
1628078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @return Returns a new ActivityOptions object that you can use to
1638078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * supply these options as the options Bundle when starting an activity.
1649944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn     * @hide
1658078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     */
1668078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static ActivityOptions makeThumbnailScaleUpAnimation(View source,
1678078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            Bitmap thumbnail, int startX, int startY, OnAnimationStartedListener listener) {
1688078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        ActivityOptions opts = new ActivityOptions();
1698078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        opts.mPackageName = source.getContext().getPackageName();
1708078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        opts.mAnimationType = ANIM_THUMBNAIL;
1718078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        opts.mThumbnail = thumbnail;
1728078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        int[] pts = new int[2];
1738078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        source.getLocationOnScreen(pts);
1748078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        opts.mStartX = pts[0] + startX;
1758078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        opts.mStartY = pts[1] + startY;
1768078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        if (listener != null) {
1778078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            final Handler h = source.getHandler();
1788078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            final OnAnimationStartedListener finalListener = listener;
1798078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            opts.mAnimationStartedListener = new IRemoteCallback.Stub() {
1808078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                @Override public void sendResult(Bundle data) throws RemoteException {
1818078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                    h.post(new Runnable() {
1828078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                        @Override public void run() {
1838078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                            finalListener.onAnimationStarted();
1848078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                        }
1858078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                    });
1868078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                }
1878078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            };
1888078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        }
1898078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        return opts;
1908078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
1918078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
1926de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    private ActivityOptions() {
1936de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
1946de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
1956de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /** @hide */
1966de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public ActivityOptions(Bundle opts) {
1976de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        mPackageName = opts.getString(KEY_PACKAGE_NAME);
1988078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        mAnimationType = opts.getInt(KEY_ANIM_TYPE);
1998078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        if (mAnimationType == ANIM_CUSTOM) {
2006de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            mCustomEnterResId = opts.getInt(KEY_ANIM_ENTER_RES_ID, 0);
2016de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            mCustomExitResId = opts.getInt(KEY_ANIM_EXIT_RES_ID, 0);
2028078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        } else if (mAnimationType == ANIM_THUMBNAIL) {
2038078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            mThumbnail = (Bitmap)opts.getParcelable(KEY_ANIM_THUMBNAIL);
2048078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            mStartX = opts.getInt(KEY_ANIM_START_X, 0);
2058078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            mStartY = opts.getInt(KEY_ANIM_START_Y, 0);
2068078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            mAnimationStartedListener = IRemoteCallback.Stub.asInterface(
2078078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                    opts.getIBinder(KEY_ANIM_START_LISTENER));
2086de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        }
2096de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
2106de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
2116de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /** @hide */
2126de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public String getPackageName() {
2136de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return mPackageName;
2146de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
2156de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
2166de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /** @hide */
2178078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public int getAnimationType() {
2188078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        return mAnimationType;
2196de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
2206de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
2216de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /** @hide */
2226de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public int getCustomEnterResId() {
2236de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return mCustomEnterResId;
2246de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
2256de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
2266de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /** @hide */
2276de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public int getCustomExitResId() {
2286de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return mCustomExitResId;
2296de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
2306de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
2318078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
2328078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public Bitmap getThumbnail() {
2338078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        return mThumbnail;
2348078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
2358078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
2368078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
2378078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public int getStartX() {
2388078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        return mStartX;
2398078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
2408078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
2418078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
2428078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public int getStartY() {
2438078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        return mStartY;
2448078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
2458078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
2468078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
2478078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public IRemoteCallback getOnAnimationStartListener() {
2488078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        return mAnimationStartedListener;
2498078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
2508078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
2518078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
2528078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public void abort() {
2538078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        if (mAnimationStartedListener != null) {
2548078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            try {
2558078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mAnimationStartedListener.sendResult(null);
2568078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            } catch (RemoteException e) {
2578078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            }
2588078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        }
2598078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
2608078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
2618078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /** @hide */
2628078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public static void abort(Bundle options) {
2638078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        if (options != null) {
2648078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            (new ActivityOptions(options)).abort();
2658078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        }
2668078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
2678078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
2686de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
2696de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Join the values in <var>otherOptions</var> in to this one.  Any values
2706de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * defined in <var>otherOptions</var> replace those in the base options.
2716de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
2726de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public void join(ActivityOptions otherOptions) {
2736de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        if (otherOptions.mPackageName != null) {
2746de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            mPackageName = otherOptions.mPackageName;
2756de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        }
2768078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        switch (otherOptions.mAnimationType) {
2778078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            case ANIM_CUSTOM:
2788078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mAnimationType = otherOptions.mAnimationType;
2798078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mCustomEnterResId = otherOptions.mCustomEnterResId;
2808078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mCustomExitResId = otherOptions.mCustomExitResId;
2818078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mThumbnail = null;
2828078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mAnimationStartedListener = null;
2838078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                break;
2848078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            case ANIM_THUMBNAIL:
2858078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mAnimationType = otherOptions.mAnimationType;
2868078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mThumbnail = otherOptions.mThumbnail;
2878078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mStartX = otherOptions.mStartX;
2888078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mStartY = otherOptions.mStartY;
2898078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                if (otherOptions.mAnimationStartedListener != null) {
2908078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                    try {
2918078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                        otherOptions.mAnimationStartedListener.sendResult(null);
2928078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                    } catch (RemoteException e) {
2938078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                    }
2948078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                }
2958078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                mAnimationStartedListener = otherOptions.mAnimationStartedListener;
2968078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                break;
2976de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        }
2986de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
2996de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
3006de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
3016de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Returns the created options as a Bundle, which can be passed to
3026de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * {@link android.content.Context#startActivity(android.content.Intent, android.os.Bundle)
3036de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Context.startActivity(Intent, Bundle)} and related methods.
3046de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Note that the returned Bundle is still owned by the ActivityOptions
3056de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * object; you must not modify it, but can supply it to the startActivity
3066de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * methods that take an options Bundle.
3076de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
3086de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public Bundle toBundle() {
3096de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        Bundle b = new Bundle();
3106de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        if (mPackageName != null) {
3116de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            b.putString(KEY_PACKAGE_NAME, mPackageName);
3126de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        }
3138078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        switch (mAnimationType) {
3148078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            case ANIM_CUSTOM:
3158078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putInt(KEY_ANIM_TYPE, mAnimationType);
3168078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putInt(KEY_ANIM_ENTER_RES_ID, mCustomEnterResId);
3178078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putInt(KEY_ANIM_EXIT_RES_ID, mCustomExitResId);
3188078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                break;
3198078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            case ANIM_THUMBNAIL:
3208078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putInt(KEY_ANIM_TYPE, mAnimationType);
3218078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putParcelable(KEY_ANIM_THUMBNAIL, mThumbnail);
3228078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putInt(KEY_ANIM_START_X, mStartX);
3238078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putInt(KEY_ANIM_START_Y, mStartY);
3248078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                b.putIBinder(KEY_ANIM_START_LISTENER, mAnimationStartedListener
3258078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn                        != null ? mAnimationStartedListener.asBinder() : null);
3266de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        }
3276de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return b;
3286de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
3296de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn}
330