19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.os;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Interface for classes whose instances can be written to
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and restored from a {@link Parcel}.  Classes implementing the Parcelable
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * interface must also have a static field called <code>CREATOR</code>, which
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is an object implementing the {@link Parcelable.Creator Parcelable.Creator}
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * interface.
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>A typical implementation of Parcelable is:</p>
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre>
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * public class MyParcelable implements Parcelable {
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *     private int mData;
31d8919f07d10662e6b15cf6d73cddb167a144f0e7Bjorn Bringert *
32d8919f07d10662e6b15cf6d73cddb167a144f0e7Bjorn Bringert *     public int describeContents() {
33d8919f07d10662e6b15cf6d73cddb167a144f0e7Bjorn Bringert *         return 0;
34d8919f07d10662e6b15cf6d73cddb167a144f0e7Bjorn Bringert *     }
35d8919f07d10662e6b15cf6d73cddb167a144f0e7Bjorn Bringert *
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *     public void writeToParcel(Parcel out, int flags) {
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *         out.writeInt(mData);
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *     }
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
40d8919f07d10662e6b15cf6d73cddb167a144f0e7Bjorn Bringert *     public static final Parcelable.Creator&lt;MyParcelable&gt; CREATOR
41d8919f07d10662e6b15cf6d73cddb167a144f0e7Bjorn Bringert *             = new Parcelable.Creator&lt;MyParcelable&gt;() {
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *         public MyParcelable createFromParcel(Parcel in) {
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *             return new MyParcelable(in);
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *         }
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *         public MyParcelable[] newArray(int size) {
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *             return new MyParcelable[size];
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *         }
49d8919f07d10662e6b15cf6d73cddb167a144f0e7Bjorn Bringert *     };
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *     private MyParcelable(Parcel in) {
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *         mData = in.readInt();
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *     }
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * }</pre>
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic interface Parcelable {
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for use with {@link #writeToParcel}: the object being written
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is a return value, that is the result of a function such as
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * "<code>Parcelable someFunction()</code>",
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * "<code>void someFunction(out Parcelable)</code>", or
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * "<code>void someFunction(inout Parcelable)</code>".  Some implementations
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * may want to release resources at this point.
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int PARCELABLE_WRITE_RETURN_VALUE = 0x0001;
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Bit masks for use with {@link #describeContents}: each bit represents a
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * kind of object considered to have potential special significance when
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * marshalled.
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int CONTENTS_FILE_DESCRIPTOR = 0x0001;
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Describe the kinds of special objects contained in this Parcelable's
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * marshalled representation.
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return a bitmask indicating the set of special object types marshalled
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by the Parcelable.
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents();
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flatten this object in to a Parcel.
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param dest The Parcel in which the object should be written.
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flags Additional flags about how the object should be written.
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * May be 0 or {@link #PARCELABLE_WRITE_RETURN_VALUE}.
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel dest, int flags);
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Interface that must be implemented and provided as a public CREATOR
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * field that generates instances of your Parcelable class from a Parcel.
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public interface Creator<T> {
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Create a new instance of the Parcelable class, instantiating it
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * from the given Parcel whose data had previously been written by
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * {@link Parcelable#writeToParcel Parcelable.writeToParcel()}.
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param source The Parcel to read the object's data from.
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @return Returns a new instance of the Parcelable class.
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public T createFromParcel(Parcel source);
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Create a new array of the Parcelable class.
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param size Size of the array.
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @return Returns an array of the Parcelable class, with every entry
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * initialized to null.
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public T[] newArray(int size);
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
116b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn
117b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn    /**
118b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn     * Specialization of {@link Creator} that allows you to receive the
119b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn     * ClassLoader the object is being created in.
120b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn     */
121b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn    public interface ClassLoaderCreator<T> extends Creator<T> {
122b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn        /**
123b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn         * Create a new instance of the Parcelable class, instantiating it
124b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn         * from the given Parcel whose data had previously been written by
125b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn         * {@link Parcelable#writeToParcel Parcelable.writeToParcel()} and
126b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn         * using the given ClassLoader.
127b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn         *
128b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn         * @param source The Parcel to read the object's data from.
129b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn         * @param loader The ClassLoader that this object is being created in.
130b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn         * @return Returns a new instance of the Parcelable class.
131b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn         */
132b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn        public T createFromParcel(Parcel source, ClassLoader loader);
133b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn    }
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
135