ActivityOptions.java revision eabfb3a36e9469c5e219f92b39b7200104319185
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 /** 76eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * Initial width of the animation. 77eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * @hide 78eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn */ 79eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn public static final String KEY_ANIM_START_WIDTH = "android:animStartWidth"; 80eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn 81eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn /** 82eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * Initial height of the animation. 83eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * @hide 84eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn */ 85eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn public static final String KEY_ANIM_START_HEIGHT = "android:animStartHeight"; 86eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn 87eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn /** 888078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * Callback for when animation is started. 898078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * @hide 908078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn */ 918078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public static final String KEY_ANIM_START_LISTENER = "android:animStartListener"; 928078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn 938078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn /** @hide */ 948078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public static final int ANIM_NONE = 0; 958078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn /** @hide */ 968078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public static final int ANIM_CUSTOM = 1; 978078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn /** @hide */ 98eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn public static final int ANIM_SCALE_UP = 2; 99eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn /** @hide */ 100eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn public static final int ANIM_THUMBNAIL = 3; 1018078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn 1026de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn private String mPackageName; 1038078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn private int mAnimationType = ANIM_NONE; 1046de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn private int mCustomEnterResId; 1056de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn private int mCustomExitResId; 1068078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn private Bitmap mThumbnail; 1078078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn private int mStartX; 1088078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn private int mStartY; 109eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn private int mStartWidth; 110eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn private int mStartHeight; 1118078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn private IRemoteCallback mAnimationStartedListener; 1126de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn 1136de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn /** 1146de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * Create an ActivityOptions specifying a custom animation to run when 1156de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * the activity is displayed. 1166de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * 1176de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * @param context Who is defining this. This is the application that the 1186de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * animation resources will be loaded from. 1196de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * @param enterResId A resource ID of the animation resource to use for 1206de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * the incoming activity. Use 0 for no animation. 1216de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * @param exitResId A resource ID of the animation resource to use for 1226de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * the outgoing activity. Use 0 for no animation. 1236de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * @return Returns a new ActivityOptions object that you can use to 1246de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * supply these options as the options Bundle when starting an activity. 1256de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn */ 1266de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn public static ActivityOptions makeCustomAnimation(Context context, 1276de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn int enterResId, int exitResId) { 1286de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn ActivityOptions opts = new ActivityOptions(); 1296de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn opts.mPackageName = context.getPackageName(); 1308078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn opts.mAnimationType = ANIM_CUSTOM; 1316de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn opts.mCustomEnterResId = enterResId; 1326de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn opts.mCustomExitResId = exitResId; 1336de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn return opts; 1346de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn } 1356de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn 1368078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn /** 1378078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * Callback for use with {@link ActivityOptions#makeThumbnailScaleUpAnimation} 1388078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * to find out when the given animation has started running. 1399944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn * @hide 1408078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn */ 1418078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public interface OnAnimationStartedListener { 1428078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn void onAnimationStarted(); 1438078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 1448078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn 1458078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn /** 146eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * Create an ActivityOptions specifying an animation where the new 147eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * activity is scaled from a small originating area of the screen to 148eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * its final full representation. 149eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * 150eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * @param source The View that the new activity is animating from. This 151eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * defines the coordinate space for <var>startX</var> and <var>startY</var>. 152eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * @param startX The x starting location of the new activity, relative to <var>source</var>. 153eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * @param startY The y starting location of the activity, relative to <var>source</var>. 154eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * @param startWidth The initial width of the new activity. 155eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * @param startWidth The initial height of the new activity. 156eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * @return Returns a new ActivityOptions object that you can use to 157eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * supply these options as the options Bundle when starting an activity. 158eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn */ 159eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn public static ActivityOptions makeScaleUpAnimation(View source, 160eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn int startX, int startY, int startWidth, int startHeight) { 161eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn ActivityOptions opts = new ActivityOptions(); 162eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn opts.mPackageName = source.getContext().getPackageName(); 163eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn opts.mAnimationType = ANIM_SCALE_UP; 164eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn int[] pts = new int[2]; 165eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn source.getLocationOnScreen(pts); 166eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn opts.mStartX = pts[0] + startX; 167eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn opts.mStartY = pts[1] + startY; 168eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn opts.mStartWidth = startWidth; 169eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn opts.mStartHeight = startHeight; 170eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn return opts; 171eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn } 172eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn 173eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn /** 1748078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * Create an ActivityOptions specifying an animation where a thumbnail 1758078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * is scaled from a given position to the new activity window that is 1768078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * being started. 1778078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * 1788078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * @param source The View that this thumbnail is animating from. This 1798078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * defines the coordinate space for <var>startX</var> and <var>startY</var>. 1808078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * @param thumbnail The bitmap that will be shown as the initial thumbnail 1818078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * of the animation. 182eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * @param startX The x starting location of the bitmap, relative to <var>source</var>. 183eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * @param startY The y starting location of the bitmap, relative to <var>source</var>. 1849944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn * @return Returns a new ActivityOptions object that you can use to 1859944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn * supply these options as the options Bundle when starting an activity. 1869944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn */ 1879944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn public static ActivityOptions makeThumbnailScaleUpAnimation(View source, 1889944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn Bitmap thumbnail, int startX, int startY) { 1899944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn return makeThumbnailScaleUpAnimation(source, thumbnail, startX, startY, null); 1909944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn } 1919944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn 1929944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn /** 1939944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn * Create an ActivityOptions specifying an animation where a thumbnail 1949944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn * is scaled from a given position to the new activity window that is 1959944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn * being started. 1969944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn * 1979944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn * @param source The View that this thumbnail is animating from. This 1989944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn * defines the coordinate space for <var>startX</var> and <var>startY</var>. 1999944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn * @param thumbnail The bitmap that will be shown as the initial thumbnail 2009944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn * of the animation. 201eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * @param startX The x starting location of the bitmap, relative to <var>source</var>. 202eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn * @param startY The y starting location of the bitmap, relative to <var>source</var>. 2038078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * @param listener Optional OnAnimationStartedListener to find out when the 2048078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * requested animation has started running. If for some reason the animation 2058078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * is not executed, the callback will happen immediately. 2068078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * @return Returns a new ActivityOptions object that you can use to 2078078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * supply these options as the options Bundle when starting an activity. 2089944ecd28e1c56c4e9f0a50ed6e8be2110ba5c31Dianne Hackborn * @hide 2098078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn */ 2108078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public static ActivityOptions makeThumbnailScaleUpAnimation(View source, 2118078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn Bitmap thumbnail, int startX, int startY, OnAnimationStartedListener listener) { 2128078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn ActivityOptions opts = new ActivityOptions(); 2138078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn opts.mPackageName = source.getContext().getPackageName(); 2148078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn opts.mAnimationType = ANIM_THUMBNAIL; 2158078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn opts.mThumbnail = thumbnail; 2168078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn int[] pts = new int[2]; 2178078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn source.getLocationOnScreen(pts); 2188078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn opts.mStartX = pts[0] + startX; 2198078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn opts.mStartY = pts[1] + startY; 2208078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn if (listener != null) { 2218078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn final Handler h = source.getHandler(); 2228078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn final OnAnimationStartedListener finalListener = listener; 2238078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn opts.mAnimationStartedListener = new IRemoteCallback.Stub() { 2248078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn @Override public void sendResult(Bundle data) throws RemoteException { 2258078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn h.post(new Runnable() { 2268078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn @Override public void run() { 2278078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn finalListener.onAnimationStarted(); 2288078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 2298078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn }); 2308078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 2318078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn }; 2328078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 2338078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn return opts; 2348078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 2358078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn 2366de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn private ActivityOptions() { 2376de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn } 2386de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn 2396de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn /** @hide */ 2406de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn public ActivityOptions(Bundle opts) { 2416de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn mPackageName = opts.getString(KEY_PACKAGE_NAME); 2428078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mAnimationType = opts.getInt(KEY_ANIM_TYPE); 2438078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn if (mAnimationType == ANIM_CUSTOM) { 2446de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn mCustomEnterResId = opts.getInt(KEY_ANIM_ENTER_RES_ID, 0); 2456de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn mCustomExitResId = opts.getInt(KEY_ANIM_EXIT_RES_ID, 0); 246eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn } else if (mAnimationType == ANIM_SCALE_UP) { 247eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn mStartX = opts.getInt(KEY_ANIM_START_X, 0); 248eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn mStartY = opts.getInt(KEY_ANIM_START_Y, 0); 249eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn mStartWidth = opts.getInt(KEY_ANIM_START_WIDTH, 0); 250eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn mStartHeight = opts.getInt(KEY_ANIM_START_HEIGHT, 0); 2518078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } else if (mAnimationType == ANIM_THUMBNAIL) { 2528078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mThumbnail = (Bitmap)opts.getParcelable(KEY_ANIM_THUMBNAIL); 2538078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mStartX = opts.getInt(KEY_ANIM_START_X, 0); 2548078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mStartY = opts.getInt(KEY_ANIM_START_Y, 0); 2558078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mAnimationStartedListener = IRemoteCallback.Stub.asInterface( 2568078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn opts.getIBinder(KEY_ANIM_START_LISTENER)); 2576de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn } 2586de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn } 2596de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn 2606de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn /** @hide */ 2616de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn public String getPackageName() { 2626de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn return mPackageName; 2636de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn } 2646de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn 2656de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn /** @hide */ 2668078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public int getAnimationType() { 2678078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn return mAnimationType; 2686de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn } 2696de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn 2706de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn /** @hide */ 2716de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn public int getCustomEnterResId() { 2726de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn return mCustomEnterResId; 2736de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn } 2746de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn 2756de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn /** @hide */ 2766de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn public int getCustomExitResId() { 2776de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn return mCustomExitResId; 2786de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn } 2796de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn 2808078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn /** @hide */ 2818078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public Bitmap getThumbnail() { 2828078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn return mThumbnail; 2838078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 2848078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn 2858078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn /** @hide */ 2868078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public int getStartX() { 2878078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn return mStartX; 2888078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 2898078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn 2908078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn /** @hide */ 2918078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public int getStartY() { 2928078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn return mStartY; 2938078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 2948078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn 2958078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn /** @hide */ 296eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn public int getStartWidth() { 297eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn return mStartWidth; 298eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn } 299eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn 300eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn /** @hide */ 301eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn public int getStartHeight() { 302eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn return mStartHeight; 303eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn } 304eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn 305eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn /** @hide */ 3068078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public IRemoteCallback getOnAnimationStartListener() { 3078078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn return mAnimationStartedListener; 3088078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 3098078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn 3108078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn /** @hide */ 3118078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public void abort() { 3128078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn if (mAnimationStartedListener != null) { 3138078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn try { 3148078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mAnimationStartedListener.sendResult(null); 3158078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } catch (RemoteException e) { 3168078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 3178078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 3188078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 3198078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn 3208078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn /** @hide */ 3218078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public static void abort(Bundle options) { 3228078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn if (options != null) { 3238078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn (new ActivityOptions(options)).abort(); 3248078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 3258078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 3268078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn 3276de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn /** 3286de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * Join the values in <var>otherOptions</var> in to this one. Any values 3296de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * defined in <var>otherOptions</var> replace those in the base options. 3306de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn */ 3316de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn public void join(ActivityOptions otherOptions) { 3326de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn if (otherOptions.mPackageName != null) { 3336de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn mPackageName = otherOptions.mPackageName; 3346de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn } 3358078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn switch (otherOptions.mAnimationType) { 3368078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn case ANIM_CUSTOM: 3378078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mAnimationType = otherOptions.mAnimationType; 3388078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mCustomEnterResId = otherOptions.mCustomEnterResId; 3398078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mCustomExitResId = otherOptions.mCustomExitResId; 3408078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mThumbnail = null; 3418078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mAnimationStartedListener = null; 3428078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn break; 343eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn case ANIM_SCALE_UP: 344eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn mAnimationType = otherOptions.mAnimationType; 345eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn mStartX = otherOptions.mStartX; 346eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn mStartY = otherOptions.mStartY; 347eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn mStartWidth = otherOptions.mStartWidth; 348eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn mStartHeight = otherOptions.mStartHeight; 349eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn break; 3508078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn case ANIM_THUMBNAIL: 3518078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mAnimationType = otherOptions.mAnimationType; 3528078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mThumbnail = otherOptions.mThumbnail; 3538078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mStartX = otherOptions.mStartX; 3548078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mStartY = otherOptions.mStartY; 3558078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn if (otherOptions.mAnimationStartedListener != null) { 3568078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn try { 3578078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn otherOptions.mAnimationStartedListener.sendResult(null); 3588078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } catch (RemoteException e) { 3598078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 3608078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 3618078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn mAnimationStartedListener = otherOptions.mAnimationStartedListener; 3628078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn break; 3636de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn } 3646de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn } 3656de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn 3666de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn /** 3676de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * Returns the created options as a Bundle, which can be passed to 3686de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * {@link android.content.Context#startActivity(android.content.Intent, android.os.Bundle) 3696de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * Context.startActivity(Intent, Bundle)} and related methods. 3706de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * Note that the returned Bundle is still owned by the ActivityOptions 3716de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * object; you must not modify it, but can supply it to the startActivity 3726de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * methods that take an options Bundle. 3736de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn */ 3746de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn public Bundle toBundle() { 3756de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn Bundle b = new Bundle(); 3766de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn if (mPackageName != null) { 3776de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn b.putString(KEY_PACKAGE_NAME, mPackageName); 3786de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn } 3798078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn switch (mAnimationType) { 3808078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn case ANIM_CUSTOM: 3818078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn b.putInt(KEY_ANIM_TYPE, mAnimationType); 3828078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn b.putInt(KEY_ANIM_ENTER_RES_ID, mCustomEnterResId); 3838078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn b.putInt(KEY_ANIM_EXIT_RES_ID, mCustomExitResId); 3848078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn break; 385eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn case ANIM_SCALE_UP: 386eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn b.putInt(KEY_ANIM_TYPE, mAnimationType); 387eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn b.putInt(KEY_ANIM_START_X, mStartX); 388eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn b.putInt(KEY_ANIM_START_Y, mStartY); 389eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn b.putInt(KEY_ANIM_START_WIDTH, mStartWidth); 390eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn b.putInt(KEY_ANIM_START_HEIGHT, mStartHeight); 391eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn break; 3928078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn case ANIM_THUMBNAIL: 3938078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn b.putInt(KEY_ANIM_TYPE, mAnimationType); 3948078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn b.putParcelable(KEY_ANIM_THUMBNAIL, mThumbnail); 3958078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn b.putInt(KEY_ANIM_START_X, mStartX); 3968078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn b.putInt(KEY_ANIM_START_Y, mStartY); 3978078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn b.putIBinder(KEY_ANIM_START_LISTENER, mAnimationStartedListener 3988078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn != null ? mAnimationStartedListener.asBinder() : null); 399eabfb3a36e9469c5e219f92b39b7200104319185Dianne Hackborn break; 4006de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn } 4016de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn return b; 4026de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn } 4036de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn} 404