ActivityOptions.java revision 6de01a9b03ad6f8a1af4a0d893d952caa4b69d39
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;
206de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackbornimport android.os.Bundle;
216de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
226de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn/**
236de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * Helper class for building an options Bundle that can be used with
246de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * {@link android.content.Context#startActivity(android.content.Intent, android.os.Bundle)
256de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn * Context.startActivity(Intent, Bundle)} and related methods.
266de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn */
276de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackbornpublic class ActivityOptions {
286de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
296de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * The package name that created the options.
306de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @hide
316de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
326de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public static final String KEY_PACKAGE_NAME = "android:packageName";
336de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
346de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
356de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Custom enter animation resource ID.
366de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @hide
376de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
386de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public static final String KEY_ANIM_ENTER_RES_ID = "android:animEnterRes";
396de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
406de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
416de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Custom exit animation resource ID.
426de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @hide
436de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
446de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public static final String KEY_ANIM_EXIT_RES_ID = "android:animExitRes";
456de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
466de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    private String mPackageName;
476de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    private boolean mIsCustomAnimation;
486de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    private int mCustomEnterResId;
496de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    private int mCustomExitResId;
506de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
516de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
526de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Create an ActivityOptions specifying a custom animation to run when
536de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * the activity is displayed.
546de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     *
556de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @param context Who is defining this.  This is the application that the
566de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * animation resources will be loaded from.
576de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @param enterResId A resource ID of the animation resource to use for
586de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * the incoming activity.  Use 0 for no animation.
596de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @param exitResId A resource ID of the animation resource to use for
606de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * the outgoing activity.  Use 0 for no animation.
616de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * @return Returns a new ActivityOptions object that you can use to
626de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * supply these options as the options Bundle when starting an activity.
636de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
646de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public static ActivityOptions makeCustomAnimation(Context context,
656de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            int enterResId, int exitResId) {
666de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        ActivityOptions opts = new ActivityOptions();
676de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        opts.mPackageName = context.getPackageName();
686de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        opts.mIsCustomAnimation = true;
696de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        opts.mCustomEnterResId = enterResId;
706de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        opts.mCustomExitResId = exitResId;
716de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return opts;
726de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
736de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
746de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    private ActivityOptions() {
756de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
766de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
776de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /** @hide */
786de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public ActivityOptions(Bundle opts) {
796de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        mPackageName = opts.getString(KEY_PACKAGE_NAME);
806de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        if (opts.containsKey(KEY_ANIM_ENTER_RES_ID)) {
816de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            mIsCustomAnimation = true;
826de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            mCustomEnterResId = opts.getInt(KEY_ANIM_ENTER_RES_ID, 0);
836de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            mCustomExitResId = opts.getInt(KEY_ANIM_EXIT_RES_ID, 0);
846de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        }
856de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
866de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
876de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /** @hide */
886de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public String getPackageName() {
896de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return mPackageName;
906de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
916de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
926de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /** @hide */
936de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public boolean isCustomAnimation() {
946de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return mIsCustomAnimation;
956de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
966de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
976de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /** @hide */
986de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public int getCustomEnterResId() {
996de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return mCustomEnterResId;
1006de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
1016de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
1026de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /** @hide */
1036de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public int getCustomExitResId() {
1046de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return mCustomExitResId;
1056de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
1066de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
1076de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
1086de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Join the values in <var>otherOptions</var> in to this one.  Any values
1096de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * defined in <var>otherOptions</var> replace those in the base options.
1106de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
1116de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public void join(ActivityOptions otherOptions) {
1126de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        if (otherOptions.mPackageName != null) {
1136de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            mPackageName = otherOptions.mPackageName;
1146de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        }
1156de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        if (otherOptions.mIsCustomAnimation) {
1166de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            mIsCustomAnimation = true;
1176de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            mCustomEnterResId = otherOptions.mCustomEnterResId;
1186de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            mCustomExitResId = otherOptions.mCustomExitResId;
1196de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        }
1206de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
1216de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn
1226de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    /**
1236de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Returns the created options as a Bundle, which can be passed to
1246de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * {@link android.content.Context#startActivity(android.content.Intent, android.os.Bundle)
1256de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Context.startActivity(Intent, Bundle)} and related methods.
1266de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * Note that the returned Bundle is still owned by the ActivityOptions
1276de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * object; you must not modify it, but can supply it to the startActivity
1286de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     * methods that take an options Bundle.
1296de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn     */
1306de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    public Bundle toBundle() {
1316de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        Bundle b = new Bundle();
1326de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        if (mPackageName != null) {
1336de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            b.putString(KEY_PACKAGE_NAME, mPackageName);
1346de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        }
1356de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        if (mIsCustomAnimation) {
1366de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            b.putInt(KEY_ANIM_ENTER_RES_ID, mCustomEnterResId);
1376de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn            b.putInt(KEY_ANIM_EXIT_RES_ID, mCustomExitResId);
1386de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        }
1396de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn        return b;
1406de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn    }
1416de01a9b03ad6f8a1af4a0d893d952caa4b69d39Dianne Hackborn}
142