1719e6b167041ffaffc2245f692714c8de191863fCraig Mautner/*
2719e6b167041ffaffc2245f692714c8de191863fCraig Mautner * Copyright (C) 2014 The Android Open Source Project
3719e6b167041ffaffc2245f692714c8de191863fCraig Mautner *
4719e6b167041ffaffc2245f692714c8de191863fCraig Mautner * Licensed under the Apache License, Version 2.0 (the "License");
5719e6b167041ffaffc2245f692714c8de191863fCraig Mautner * you may not use this file except in compliance with the License.
6719e6b167041ffaffc2245f692714c8de191863fCraig Mautner * You may obtain a copy of the License at
7719e6b167041ffaffc2245f692714c8de191863fCraig Mautner *
8719e6b167041ffaffc2245f692714c8de191863fCraig Mautner *      http://www.apache.org/licenses/LICENSE-2.0
9719e6b167041ffaffc2245f692714c8de191863fCraig Mautner *
10719e6b167041ffaffc2245f692714c8de191863fCraig Mautner * Unless required by applicable law or agreed to in writing, software
11719e6b167041ffaffc2245f692714c8de191863fCraig Mautner * distributed under the License is distributed on an "AS IS" BASIS,
12719e6b167041ffaffc2245f692714c8de191863fCraig Mautner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13719e6b167041ffaffc2245f692714c8de191863fCraig Mautner * See the License for the specific language governing permissions and
14719e6b167041ffaffc2245f692714c8de191863fCraig Mautner * limitations under the License.
15719e6b167041ffaffc2245f692714c8de191863fCraig Mautner */
16719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
17719e6b167041ffaffc2245f692714c8de191863fCraig Mautnerpackage android.os;
18719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
19719e6b167041ffaffc2245f692714c8de191863fCraig Mautnerimport android.util.ArrayMap;
20719e6b167041ffaffc2245f692714c8de191863fCraig Mautnerimport android.util.Log;
21719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
22719e6b167041ffaffc2245f692714c8de191863fCraig Mautnerimport java.io.Serializable;
23719e6b167041ffaffc2245f692714c8de191863fCraig Mautnerimport java.util.ArrayList;
2421d24a21ea4aaadd78e73de54168e8a8a8973e4dCraig Mautnerimport java.util.Map;
25719e6b167041ffaffc2245f692714c8de191863fCraig Mautnerimport java.util.Set;
26719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
27719e6b167041ffaffc2245f692714c8de191863fCraig Mautner/**
28719e6b167041ffaffc2245f692714c8de191863fCraig Mautner * A mapping from String values to various types.
29719e6b167041ffaffc2245f692714c8de191863fCraig Mautner */
300a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautnerpublic class BaseBundle {
31719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    private static final String TAG = "Bundle";
32719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    static final boolean DEBUG = false;
33719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
34719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    static final int BUNDLE_MAGIC = 0x4C444E42; // 'B' 'N' 'D' 'L'
35719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    static final Parcel EMPTY_PARCEL;
36719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
37719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    static {
38719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        EMPTY_PARCEL = Parcel.obtain();
39719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
40719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
41719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    // Invariant - exactly one of mMap / mParcelledData will be null
42719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    // (except inside a call to unparcel)
43719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
44719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    ArrayMap<String, Object> mMap = null;
45719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
46719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /*
47719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * If mParcelledData is non-null, then mMap will be null and the
48719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * data are stored as a Parcel containing a Bundle.  When the data
49719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * are unparcelled, mParcelledData willbe set to null.
50719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
51719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    Parcel mParcelledData = null;
52719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
53719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
54719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * The ClassLoader used when unparcelling data from mParcelledData.
55719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
56719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    private ClassLoader mClassLoader;
57719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
58719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
59719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Constructs a new, empty Bundle that uses a specific ClassLoader for
60719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * instantiating Parcelable and Serializable objects.
61719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
62719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param loader An explicit ClassLoader to use when instantiating objects
63719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * inside of the Bundle.
64719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param capacity Initial size of the ArrayMap.
65719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
660a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    BaseBundle(ClassLoader loader, int capacity) {
67719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap = capacity > 0 ?
68719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                new ArrayMap<String, Object>(capacity) : new ArrayMap<String, Object>();
69719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mClassLoader = loader == null ? getClass().getClassLoader() : loader;
70719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
71719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
72719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
73719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Constructs a new, empty Bundle.
74719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
750a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    BaseBundle() {
76719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        this((ClassLoader) null, 0);
77719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
78719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
79719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
80719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Constructs a Bundle whose data is stored as a Parcel.  The data
81719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * will be unparcelled on first contact, using the assigned ClassLoader.
82719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
83719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param parcelledData a Parcel containing a Bundle
84719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
850a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    BaseBundle(Parcel parcelledData) {
86719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        readFromParcelInner(parcelledData);
87719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
88719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
890a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    BaseBundle(Parcel parcelledData, int length) {
90719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        readFromParcelInner(parcelledData, length);
91719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
92719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
93719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
94719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Constructs a new, empty Bundle that uses a specific ClassLoader for
95719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * instantiating Parcelable and Serializable objects.
96719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
97719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param loader An explicit ClassLoader to use when instantiating objects
98719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * inside of the Bundle.
99719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
1000a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    BaseBundle(ClassLoader loader) {
101719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        this(loader, 0);
102719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
103719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
104719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
105719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Constructs a new, empty Bundle sized to hold the given number of
106719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * elements. The Bundle will grow as needed.
107719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
108719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param capacity the initial capacity of the Bundle
109719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
1100a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    BaseBundle(int capacity) {
111719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        this((ClassLoader) null, capacity);
112719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
113719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
114719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
115719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Constructs a Bundle containing a copy of the mappings from the given
116719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Bundle.
117719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
118719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param b a Bundle to be copied.
119719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
1200a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    BaseBundle(BaseBundle b) {
121719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (b.mParcelledData != null) {
122719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            if (b.mParcelledData == EMPTY_PARCEL) {
123719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                mParcelledData = EMPTY_PARCEL;
124719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            } else {
125719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                mParcelledData = Parcel.obtain();
126719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                mParcelledData.appendFrom(b.mParcelledData, 0, b.mParcelledData.dataSize());
127719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                mParcelledData.setDataPosition(0);
128719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            }
129719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } else {
130719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            mParcelledData = null;
131719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
132719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
133719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (b.mMap != null) {
134719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            mMap = new ArrayMap<String, Object>(b.mMap);
135719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } else {
136719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            mMap = null;
137719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
138719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
139719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mClassLoader = b.mClassLoader;
140719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
141719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
142719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
143719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * TODO: optimize this later (getting just the value part of a Bundle
144719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * with a single pair) once Bundle.forPair() above is implemented
145719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * with a special single-value Map implementation/serialization.
146719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
147719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Note: value in single-pair Bundle may be null.
148719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
149719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @hide
150719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
1510a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public String getPairValue() {
152719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
153719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        int size = mMap.size();
154719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (size > 1) {
155719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            Log.w(TAG, "getPairValue() used on Bundle with multiple pairs.");
156719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
157719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (size == 0) {
158719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
159719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
160719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.valueAt(0);
161719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
162719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (String) o;
163719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
164719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning("getPairValue()", o, "String", e);
165719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
166719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
167719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
168719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
169719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
170719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Changes the ClassLoader this Bundle uses when instantiating objects.
171719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
172719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param loader An explicit ClassLoader to use when instantiating objects
173719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * inside of the Bundle.
174719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
175719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void setClassLoader(ClassLoader loader) {
176719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mClassLoader = loader;
177719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
178719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
179719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
180719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Return the ClassLoader currently associated with this Bundle.
181719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
182719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    ClassLoader getClassLoader() {
183719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return mClassLoader;
184719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
185719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
186719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
187719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * If the underlying data are stored as a Parcel, unparcel them
188719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * using the currently assigned class loader.
189719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
190719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /* package */ synchronized void unparcel() {
191719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (mParcelledData == null) {
192719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
193719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                    + ": no parcelled data");
194719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return;
195719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
196719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
197719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (mParcelledData == EMPTY_PARCEL) {
198719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
199719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                    + ": empty");
200719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            if (mMap == null) {
201719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                mMap = new ArrayMap<String, Object>(1);
202719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            } else {
203719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                mMap.erase();
204719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            }
205719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            mParcelledData = null;
206719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return;
207719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
208719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
209719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        int N = mParcelledData.readInt();
210719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
211719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                + ": reading " + N + " maps");
212719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (N < 0) {
213719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return;
214719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
215719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (mMap == null) {
216719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            mMap = new ArrayMap<String, Object>(N);
217719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } else {
218719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            mMap.erase();
219719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            mMap.ensureCapacity(N);
220719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
221719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mParcelledData.readArrayMapInternal(mMap, N, mClassLoader);
222719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mParcelledData.recycle();
223719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mParcelledData = null;
224719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
225719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                + " final map: " + mMap);
226719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
227719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
228719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
229719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @hide
230719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
2310a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public boolean isParcelled() {
232719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return mParcelledData != null;
233719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
234719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
235719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
236719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the number of mappings contained in this Bundle.
237719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
238719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return the number of mappings as an int.
239719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
2400a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public int size() {
241719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
242719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return mMap.size();
243719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
244719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
245719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
246719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns true if the mapping of this Bundle is empty, false otherwise.
247719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
2480a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public boolean isEmpty() {
249719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
250719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return mMap.isEmpty();
251719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
252719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
253719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
254719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Removes all elements from the mapping of this Bundle.
255719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
2560a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public void clear() {
257719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
258719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.clear();
259719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
260719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
261719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
262719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns true if the given key is contained in the mapping
263719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * of this Bundle.
264719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
265719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String key
266719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return true if the key is part of the mapping, false otherwise
267719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
2680a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public boolean containsKey(String key) {
269719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
270719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return mMap.containsKey(key);
271719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
272719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
273719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
274719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the entry with the given key as an object.
275719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
276719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String key
277719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return an Object, or null
278719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
2790a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public Object get(String key) {
280719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
281719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return mMap.get(key);
282719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
283719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
284719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
285719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Removes any entry with the given key from the mapping of this Bundle.
286719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
287719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String key
288719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
2890a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public void remove(String key) {
290719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
291719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.remove(key);
292719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
293719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
294719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
2950a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner     * Inserts all mappings from the given PersistableBundle into this BaseBundle.
296719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
297719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param bundle a PersistableBundle
298719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
2990a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public void putAll(PersistableBundle bundle) {
300719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
301719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        bundle.unparcel();
302719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.putAll(bundle.mMap);
303719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
304719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
305719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
3060a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner     * Inserts all mappings from the given Map into this BaseBundle.
30721d24a21ea4aaadd78e73de54168e8a8a8973e4dCraig Mautner     *
30821d24a21ea4aaadd78e73de54168e8a8a8973e4dCraig Mautner     * @param map a Map
30921d24a21ea4aaadd78e73de54168e8a8a8973e4dCraig Mautner     */
31021d24a21ea4aaadd78e73de54168e8a8a8973e4dCraig Mautner    void putAll(Map map) {
31121d24a21ea4aaadd78e73de54168e8a8a8973e4dCraig Mautner        unparcel();
31221d24a21ea4aaadd78e73de54168e8a8a8973e4dCraig Mautner        mMap.putAll(map);
31321d24a21ea4aaadd78e73de54168e8a8a8973e4dCraig Mautner    }
31421d24a21ea4aaadd78e73de54168e8a8a8973e4dCraig Mautner
31521d24a21ea4aaadd78e73de54168e8a8a8973e4dCraig Mautner    /**
316719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns a Set containing the Strings used as keys in this Bundle.
317719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
318719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a Set of String keys
319719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
3200a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public Set<String> keySet() {
321719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
322719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return mMap.keySet();
323719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
324719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
325719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
326719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a Boolean value into the mapping of this Bundle, replacing
327719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
328719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
329719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
330719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a Boolean, or null
331719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
33273bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner    public void putBoolean(String key, boolean value) {
333719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
334719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
335719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
336719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
337719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
338719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a byte value into the mapping of this Bundle, replacing
339719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.
340719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
341719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
342719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a byte
343719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
344719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void putByte(String key, byte value) {
345719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
346719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
347719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
348719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
349719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
350719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a char value into the mapping of this Bundle, replacing
351719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.
352719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
353719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
354719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a char, or null
355719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
356719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void putChar(String key, char value) {
357719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
358719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
359719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
360719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
361719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
362719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a short value into the mapping of this Bundle, replacing
363719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.
364719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
365719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
366719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a short
367719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
368719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void putShort(String key, short value) {
369719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
370719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
371719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
372719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
373719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
374719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts an int value into the mapping of this Bundle, replacing
375719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.
376719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
377719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
378719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value an int, or null
379719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
3800a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public void putInt(String key, int value) {
381719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
382719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
383719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
384719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
385719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
386719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a long value into the mapping of this Bundle, replacing
387719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.
388719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
389719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
390719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a long
391719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
3920a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public void putLong(String key, long value) {
393719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
394719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
395719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
396719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
397719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
398719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a float value into the mapping of this Bundle, replacing
399719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.
400719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
401719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
402719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a float
403719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
404719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void putFloat(String key, float value) {
405719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
406719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
407719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
408719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
409719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
410719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a double value into the mapping of this Bundle, replacing
411719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.
412719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
413719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
414719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a double
415719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
4160a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public void putDouble(String key, double value) {
417719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
418719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
419719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
420719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
421719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
422719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a String value into the mapping of this Bundle, replacing
423719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
424719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
425719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
426719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a String, or null
427719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
4280a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public void putString(String key, String value) {
429719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
430719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
431719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
432719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
433719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
434719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a CharSequence value into the mapping of this Bundle, replacing
435719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
436719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
437719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
438719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a CharSequence, or null
439719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
440719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void putCharSequence(String key, CharSequence value) {
441719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
442719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
443719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
444719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
445719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
446719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts an ArrayList<Integer> value into the mapping of this Bundle, replacing
447719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
448719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
449719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
450719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value an ArrayList<Integer> object, or null
451719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
452719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void putIntegerArrayList(String key, ArrayList<Integer> value) {
453719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
454719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
455719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
456719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
457719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
458719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts an ArrayList<String> value into the mapping of this Bundle, replacing
459719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
460719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
461719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
462719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value an ArrayList<String> object, or null
463719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
464719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void putStringArrayList(String key, ArrayList<String> value) {
465719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
466719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
467719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
468719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
469719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
470719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts an ArrayList<CharSequence> value into the mapping of this Bundle, replacing
471719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
472719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
473719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
474719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value an ArrayList<CharSequence> object, or null
475719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
476719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void putCharSequenceArrayList(String key, ArrayList<CharSequence> value) {
477719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
478719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
479719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
480719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
481719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
482719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a Serializable value into the mapping of this Bundle, replacing
483719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
484719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
485719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
486719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a Serializable object, or null
487719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
488719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void putSerializable(String key, Serializable value) {
489719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
490719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
491719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
492719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
493719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
494719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a boolean array value into the mapping of this Bundle, replacing
495719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
496719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
497719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
498719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a boolean array object, or null
499719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
50073bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner    public void putBooleanArray(String key, boolean[] value) {
501719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
502719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
503719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
504719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
505719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
506719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a byte array value into the mapping of this Bundle, replacing
507719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
508719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
509719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
510719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a byte array object, or null
511719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
512719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void putByteArray(String key, byte[] value) {
513719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
514719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
515719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
516719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
517719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
518719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a short array value into the mapping of this Bundle, replacing
519719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
520719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
521719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
522719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a short array object, or null
523719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
524719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void putShortArray(String key, short[] value) {
525719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
526719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
527719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
528719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
529719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
530719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a char array value into the mapping of this Bundle, replacing
531719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
532719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
533719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
534719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a char array object, or null
535719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
536719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void putCharArray(String key, char[] value) {
537719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
538719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
539719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
540719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
541719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
542719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts an int array value into the mapping of this Bundle, replacing
543719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
544719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
545719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
546719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value an int array object, or null
547719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
5480a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public void putIntArray(String key, int[] value) {
549719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
550719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
551719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
552719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
553719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
554719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a long array value into the mapping of this Bundle, replacing
555719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
556719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
557719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
558719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a long array object, or null
559719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
5600a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public void putLongArray(String key, long[] value) {
561719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
562719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
563719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
564719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
565719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
566719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a float array value into the mapping of this Bundle, replacing
567719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
568719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
569719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
570719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a float array object, or null
571719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
572719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void putFloatArray(String key, float[] value) {
573719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
574719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
575719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
576719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
577719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
578719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a double array value into the mapping of this Bundle, replacing
579719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
580719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
581719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
582719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a double array object, or null
583719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
5840a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public void putDoubleArray(String key, double[] value) {
585719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
586719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
587719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
588719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
589719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
590719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a String array value into the mapping of this Bundle, replacing
591719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
592719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
593719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
594719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a String array object, or null
595719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
5960a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public void putStringArray(String key, String[] value) {
597719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
598719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
599719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
600719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
601719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
602719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Inserts a CharSequence array value into the mapping of this Bundle, replacing
603719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * any existing value for the given key.  Either key or value may be null.
604719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
605719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
606719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param value a CharSequence array object, or null
607719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
608719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void putCharSequenceArray(String key, CharSequence[] value) {
609719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
610719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mMap.put(key, value);
611719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
612719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
613719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
614719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or false if
615719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
616719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
617719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
618719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a boolean value
619719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
62073bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner    public boolean getBoolean(String key) {
621719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
622719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (DEBUG) Log.d(TAG, "Getting boolean in "
623719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                + Integer.toHexString(System.identityHashCode(this)));
624719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return getBoolean(key, false);
625719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
626719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
627719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    // Log a message if the value was non-null but not of the expected type
628719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void typeWarning(String key, Object value, String className,
629719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            Object defaultValue, ClassCastException e) {
630719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        StringBuilder sb = new StringBuilder();
631719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        sb.append("Key ");
632719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        sb.append(key);
633719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        sb.append(" expected ");
634719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        sb.append(className);
635719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        sb.append(" but value was a ");
636719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        sb.append(value.getClass().getName());
637719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        sb.append(".  The default value ");
638719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        sb.append(defaultValue);
639719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        sb.append(" was returned.");
640719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Log.w(TAG, sb.toString());
641719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Log.w(TAG, "Attempt to cast generated internal exception:", e);
642719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
643719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
644719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void typeWarning(String key, Object value, String className,
645719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            ClassCastException e) {
646719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        typeWarning(key, value, className, "<null>", e);
647719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
648719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
649719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
650719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or defaultValue if
651719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
652719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
653719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
654719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param defaultValue Value to return if key does not exist
655719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a boolean value
656719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
65773bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner    public boolean getBoolean(String key, boolean defaultValue) {
658719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
659719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
660719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
661719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
662719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
663719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
664719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (Boolean) o;
665719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
666719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "Boolean", defaultValue, e);
667719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
668719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
669719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
670719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
671719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
672719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or (byte) 0 if
673719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
674719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
675719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
676719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a byte value
677719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
678719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    byte getByte(String key) {
679719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
680719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return getByte(key, (byte) 0);
681719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
682719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
683719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
684719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or defaultValue if
685719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
686719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
687719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
688719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param defaultValue Value to return if key does not exist
689719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a byte value
690719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
691719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    Byte getByte(String key, byte defaultValue) {
692719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
693719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
694719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
695719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
696719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
697719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
698719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (Byte) o;
699719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
700719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "Byte", defaultValue, e);
701719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
702719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
703719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
704719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
705719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
706719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or (char) 0 if
707719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
708719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
709719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
710719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a char value
711719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
712719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    char getChar(String key) {
713719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
714719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return getChar(key, (char) 0);
715719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
716719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
717719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
718719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or defaultValue if
719719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
720719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
721719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
722719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param defaultValue Value to return if key does not exist
723719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a char value
724719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
725719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    char getChar(String key, char defaultValue) {
726719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
727719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
728719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
729719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
730719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
731719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
732719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (Character) o;
733719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
734719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "Character", defaultValue, e);
735719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
736719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
737719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
738719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
739719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
740719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or (short) 0 if
741719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
742719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
743719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
744719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a short value
745719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
746719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    short getShort(String key) {
747719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
748719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return getShort(key, (short) 0);
749719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
750719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
751719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
752719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or defaultValue if
753719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
754719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
755719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
756719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param defaultValue Value to return if key does not exist
757719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a short value
758719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
759719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    short getShort(String key, short defaultValue) {
760719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
761719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
762719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
763719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
764719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
765719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
766719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (Short) o;
767719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
768719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "Short", defaultValue, e);
769719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
770719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
771719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
772719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
773719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
774719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or 0 if
775719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
776719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
777719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
778719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return an int value
779719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
7800a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public int getInt(String key) {
781719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
782719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return getInt(key, 0);
783719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
784719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
785719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
786719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or defaultValue if
787719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
788719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
789719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
790719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param defaultValue Value to return if key does not exist
791719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return an int value
792719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
7930a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner   public int getInt(String key, int defaultValue) {
794719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
795719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
796719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
797719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
798719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
799719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
800719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (Integer) o;
801719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
802719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "Integer", defaultValue, e);
803719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
804719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
805719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
806719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
807719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
808719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or 0L if
809719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
810719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
811719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
812719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a long value
813719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
8140a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public long getLong(String key) {
815719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
816719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return getLong(key, 0L);
817719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
818719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
819719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
820719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or defaultValue if
821719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
822719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
823719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
824719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param defaultValue Value to return if key does not exist
825719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a long value
826719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
8270a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public long getLong(String key, long defaultValue) {
828719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
829719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
830719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
831719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
832719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
833719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
834719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (Long) o;
835719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
836719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "Long", defaultValue, e);
837719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
838719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
839719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
840719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
841719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
842719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or 0.0f if
843719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
844719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
845719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
846719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a float value
847719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
848719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    float getFloat(String key) {
849719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
850719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return getFloat(key, 0.0f);
851719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
852719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
853719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
854719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or defaultValue if
855719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
856719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
857719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
858719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param defaultValue Value to return if key does not exist
859719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a float value
860719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
861719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    float getFloat(String key, float defaultValue) {
862719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
863719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
864719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
865719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
866719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
867719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
868719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (Float) o;
869719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
870719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "Float", defaultValue, e);
871719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
872719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
873719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
874719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
875719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
876719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or 0.0 if
877719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
878719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
879719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
880719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a double value
881719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
8820a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public double getDouble(String key) {
883719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
884719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return getDouble(key, 0.0);
885719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
886719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
887719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
888719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or defaultValue if
889719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key.
890719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
891719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String
892719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param defaultValue Value to return if key does not exist
893719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a double value
894719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
8950a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public double getDouble(String key, double defaultValue) {
896719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
897719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
898719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
899719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
900719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
901719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
902719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (Double) o;
903719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
904719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "Double", defaultValue, e);
905719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return defaultValue;
906719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
907719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
908719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
909719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
910719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
911719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
912719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
913719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
914719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
915719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a String value, or null
916719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
9170a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public String getString(String key) {
918719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
919719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        final Object o = mMap.get(key);
920719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
921719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (String) o;
922719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
923719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "String", e);
924719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
925719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
926719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
927719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
928719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
929719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or defaultValue if
930aeaf87fe452353371b36da42e5beccca3150ab08Narayan Kamath     * no mapping of the desired type exists for the given key or if a null
931aeaf87fe452353371b36da42e5beccca3150ab08Narayan Kamath     * value is explicitly associated with the given key.
932719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
933719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
934aeaf87fe452353371b36da42e5beccca3150ab08Narayan Kamath     * @param defaultValue Value to return if key does not exist or if a null
935aeaf87fe452353371b36da42e5beccca3150ab08Narayan Kamath     *     value is associated with the given key.
936719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return the String value associated with the given key, or defaultValue
937719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *     if no valid String object is currently mapped to that key.
938719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
9390a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public String getString(String key, String defaultValue) {
940719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        final String s = getString(key);
941719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return (s == null) ? defaultValue : s;
942719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
943719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
944719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
945719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
946719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
947719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
948719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
949719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
950719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a CharSequence value, or null
951719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
952719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    CharSequence getCharSequence(String key) {
953719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
954719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        final Object o = mMap.get(key);
955719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
956719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (CharSequence) o;
957719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
958719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "CharSequence", e);
959719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
960719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
961719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
962719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
963719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
964719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or defaultValue if
965aeaf87fe452353371b36da42e5beccca3150ab08Narayan Kamath     * no mapping of the desired type exists for the given key or if a null
966aeaf87fe452353371b36da42e5beccca3150ab08Narayan Kamath     * value is explicitly associated with the given key.
967719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
968719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
969aeaf87fe452353371b36da42e5beccca3150ab08Narayan Kamath     * @param defaultValue Value to return if key does not exist or if a null
970aeaf87fe452353371b36da42e5beccca3150ab08Narayan Kamath     *     value is associated with the given key.
971719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return the CharSequence value associated with the given key, or defaultValue
972719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *     if no valid CharSequence object is currently mapped to that key.
973719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
974719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    CharSequence getCharSequence(String key, CharSequence defaultValue) {
975719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        final CharSequence cs = getCharSequence(key);
976719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        return (cs == null) ? defaultValue : cs;
977719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
978719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
979719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
980719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
981719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
982719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
983719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
984719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
985719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a Serializable value, or null
986719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
987719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    Serializable getSerializable(String key) {
988719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
989719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
990719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
991719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
992719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
993719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
994719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (Serializable) o;
995719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
996719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "Serializable", e);
997719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
998719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
999719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1000719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1001719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
1002719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
1003719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
1004719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
1005719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
1006719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
1007719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return an ArrayList<String> value, or null
1008719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
1009719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    ArrayList<Integer> getIntegerArrayList(String key) {
1010719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
1011719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
1012719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
1013719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1014719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1015719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
1016719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (ArrayList<Integer>) o;
1017719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
1018719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "ArrayList<Integer>", e);
1019719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1020719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1021719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1022719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1023719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
1024719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
1025719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
1026719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
1027719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
1028719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
1029719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return an ArrayList<String> value, or null
1030719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
1031719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    ArrayList<String> getStringArrayList(String key) {
1032719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
1033719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
1034719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
1035719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1036719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1037719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
1038719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (ArrayList<String>) o;
1039719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
1040719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "ArrayList<String>", e);
1041719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1042719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1043719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1044719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1045719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
1046719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
1047719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
1048719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
1049719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
1050719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
1051719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return an ArrayList<CharSequence> value, or null
1052719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
1053719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    ArrayList<CharSequence> getCharSequenceArrayList(String key) {
1054719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
1055719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
1056719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
1057719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1058719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1059719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
1060719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (ArrayList<CharSequence>) o;
1061719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
1062719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "ArrayList<CharSequence>", e);
1063719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1064719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1065719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1066719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1067719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
1068719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
1069719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
1070719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
1071719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
1072719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
1073719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a boolean[] value, or null
1074719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
107573bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner    public boolean[] getBooleanArray(String key) {
1076719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
1077719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
1078719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
1079719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1080719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1081719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
1082719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (boolean[]) o;
1083719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
1084719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "byte[]", e);
1085719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1086719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1087719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1088719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1089719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
1090719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
1091719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
1092719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
1093719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
1094719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
1095719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a byte[] value, or null
1096719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
1097719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    byte[] getByteArray(String key) {
1098719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
1099719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
1100719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
1101719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1102719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1103719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
1104719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (byte[]) o;
1105719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
1106719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "byte[]", e);
1107719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1108719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1109719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1110719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1111719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
1112719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
1113719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
1114719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
1115719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
1116719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
1117719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a short[] value, or null
1118719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
1119719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    short[] getShortArray(String key) {
1120719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
1121719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
1122719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
1123719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1124719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1125719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
1126719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (short[]) o;
1127719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
1128719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "short[]", e);
1129719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1130719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1131719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1132719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1133719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
1134719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
1135719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
1136719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
1137719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
1138719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
1139719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a char[] value, or null
1140719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
1141719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    char[] getCharArray(String key) {
1142719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
1143719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
1144719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
1145719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1146719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1147719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
1148719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (char[]) o;
1149719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
1150719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "char[]", e);
1151719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1152719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1153719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1154719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1155719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
1156719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
1157719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
1158719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
1159719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
1160719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
1161719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return an int[] value, or null
1162719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
11630a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public int[] getIntArray(String key) {
1164719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
1165719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
1166719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
1167719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1168719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1169719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
1170719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (int[]) o;
1171719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
1172719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "int[]", e);
1173719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1174719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1175719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1176719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1177719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
1178719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
1179719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
1180719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
1181719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
1182719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
1183719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a long[] value, or null
1184719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
11850a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public long[] getLongArray(String key) {
1186719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
1187719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
1188719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
1189719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1190719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1191719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
1192719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (long[]) o;
1193719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
1194719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "long[]", e);
1195719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1196719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1197719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1198719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1199719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
1200719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
1201719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
1202719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
1203719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
1204719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
1205719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a float[] value, or null
1206719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
1207719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    float[] getFloatArray(String key) {
1208719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
1209719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
1210719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
1211719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1212719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1213719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
1214719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (float[]) o;
1215719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
1216719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "float[]", e);
1217719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1218719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1219719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1220719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1221719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
1222719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
1223719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
1224719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
1225719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
1226719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
1227719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a double[] value, or null
1228719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
12290a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public double[] getDoubleArray(String key) {
1230719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
1231719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
1232719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
1233719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1234719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1235719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
1236719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (double[]) o;
1237719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
1238719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "double[]", e);
1239719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1240719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1241719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1242719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1243719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
1244719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
1245719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
1246719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
1247719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
1248719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
1249719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a String[] value, or null
1250719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
12510a8e160eb56f3b8f504b37349a79ec4edb7e5039Craig Mautner    public String[] getStringArray(String key) {
1252719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
1253719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
1254719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
1255719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1256719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1257719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
1258719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (String[]) o;
1259719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
1260719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "String[]", e);
1261719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1262719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1263719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1264719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1265719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
1266719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Returns the value associated with the given key, or null if
1267719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * no mapping of the desired type exists for the given key or a null
1268719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * value is explicitly associated with the key.
1269719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     *
1270719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param key a String, or null
1271719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @return a CharSequence[] value, or null
1272719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
1273719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    CharSequence[] getCharSequenceArray(String key) {
1274719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        unparcel();
1275719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Object o = mMap.get(key);
1276719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (o == null) {
1277719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1278719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1279719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        try {
1280719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return (CharSequence[]) o;
1281719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } catch (ClassCastException e) {
1282719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            typeWarning(key, o, "CharSequence[]", e);
1283719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return null;
1284719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1285719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1286719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1287719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
1288719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Writes the Bundle contents to a Parcel, typically in order for
1289719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * it to be passed through an IBinder connection.
1290719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param parcel The parcel to copy this bundle to.
1291719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
1292719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void writeToParcelInner(Parcel parcel, int flags) {
1293719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (mParcelledData != null) {
1294719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            if (mParcelledData == EMPTY_PARCEL) {
1295719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                parcel.writeInt(0);
1296719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            } else {
1297719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                int length = mParcelledData.dataSize();
1298719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                parcel.writeInt(length);
1299719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                parcel.writeInt(BUNDLE_MAGIC);
1300719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                parcel.appendFrom(mParcelledData, 0, length);
1301719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            }
1302719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        } else {
1303719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            // Special case for empty bundles.
1304719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            if (mMap == null || mMap.size() <= 0) {
1305719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                parcel.writeInt(0);
1306719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                return;
1307719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            }
1308719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            int lengthPos = parcel.dataPosition();
1309719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            parcel.writeInt(-1); // dummy, will hold length
1310719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            parcel.writeInt(BUNDLE_MAGIC);
1311719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1312719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            int startPos = parcel.dataPosition();
1313719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            parcel.writeArrayMapInternal(mMap);
1314719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            int endPos = parcel.dataPosition();
1315719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1316719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            // Backpatch length
1317719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            parcel.setDataPosition(lengthPos);
1318719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            int length = endPos - startPos;
1319719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            parcel.writeInt(length);
1320719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            parcel.setDataPosition(endPos);
1321719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1322719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1323719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1324719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    /**
1325719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * Reads the Parcel contents into this Bundle, typically in order for
1326719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * it to be passed through an IBinder connection.
1327719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     * @param parcel The parcel to overwrite this bundle from.
1328719e6b167041ffaffc2245f692714c8de191863fCraig Mautner     */
1329719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    void readFromParcelInner(Parcel parcel) {
1330719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        int length = parcel.readInt();
1331719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (length < 0) {
1332719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            throw new RuntimeException("Bad length in parcel: " + length);
1333719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1334719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        readFromParcelInner(parcel, length);
1335719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1336719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1337719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    private void readFromParcelInner(Parcel parcel, int length) {
1338719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (length == 0) {
1339719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            // Empty Bundle or end of data.
1340719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            mParcelledData = EMPTY_PARCEL;
1341719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            return;
1342719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1343719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        int magic = parcel.readInt();
1344719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (magic != BUNDLE_MAGIC) {
1345719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            //noinspection ThrowableInstanceNeverThrown
1346719e6b167041ffaffc2245f692714c8de191863fCraig Mautner            throw new IllegalStateException("Bad magic number for Bundle: 0x"
1347719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                    + Integer.toHexString(magic));
1348719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        }
1349719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1350719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        // Advance within this Parcel
1351719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        int offset = parcel.dataPosition();
1352719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        parcel.setDataPosition(offset + length);
1353719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1354719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        Parcel p = Parcel.obtain();
1355719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        p.setDataPosition(0);
1356719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        p.appendFrom(parcel, offset, length);
1357719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        if (DEBUG) Log.d(TAG, "Retrieving "  + Integer.toHexString(System.identityHashCode(this))
1358719e6b167041ffaffc2245f692714c8de191863fCraig Mautner                + ": " + length + " bundle bytes starting at " + offset);
1359719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        p.setDataPosition(0);
1360719e6b167041ffaffc2245f692714c8de191863fCraig Mautner
1361719e6b167041ffaffc2245f692714c8de191863fCraig Mautner        mParcelledData = p;
1362719e6b167041ffaffc2245f692714c8de191863fCraig Mautner    }
1363719e6b167041ffaffc2245f692714c8de191863fCraig Mautner}
1364