19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.os; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 221ebccf531d1049853b3b0630035434619682c016Dianne Hackbornimport android.util.TimeUtils; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defines a message containing a description and arbitrary data object that can be 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sent to a {@link Handler}. This object contains two extra int fields and an 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * extra object field that allow you to not do allocations in many cases. 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p class="note">While the constructor of Message is public, the best way to get 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * one of these is to call {@link #obtain Message.obtain()} or one of the 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Handler#obtainMessage Handler.obtainMessage()} methods, which will pull 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * them from a pool of recycled objects.</p> 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class Message implements Parcelable { 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * User-defined message code so that the recipient can identify 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * what this message is about. Each {@link Handler} has its own name-space 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for message codes, so you do not need to worry about yours conflicting 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with other handlers. 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int what; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4475288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn /** 4575288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * arg1 and arg2 are lower-cost alternatives to using 4675288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link #setData(Bundle) setData()} if you only need to store a 4775288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * few integer values. 4875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int arg1; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn /** 5275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * arg1 and arg2 are lower-cost alternatives to using 5375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link #setData(Bundle) setData()} if you only need to store a 5475288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * few integer values. 5575288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn */ 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int arg2; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn /** 5975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * An arbitrary object to send to the recipient. When using 6075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link Messenger} to send the message across processes this can only 6175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * be non-null if it contains a Parcelable of a framework class (not one 6275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * implemented by the application). For other data transfer use 6375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link #setData}. 6475288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * 6575288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * <p>Note that Parcelable objects here are not supported prior to 6675288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * the {@link android.os.Build.VERSION_CODES#FROYO} release. 6775288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn */ 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object obj; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn /** 7175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * Optional Messenger where replies to this message can be sent. The 7275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * semantics of exactly how this is used are up to the sender and 7375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * receiver. 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Messenger replyTo; 76a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 77a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville /** If set message is in use */ 78a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville /*package*/ static final int FLAG_IN_USE = 1; 79a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 80a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville /** Flags reserved for future use (All are reserved for now) */ 81a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville /*package*/ static final int FLAGS_RESERVED = ~FLAG_IN_USE; 82a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 83a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville /** Flags to clear in the copyFrom method */ 84a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville /*package*/ static final int FLAGS_TO_CLEAR_ON_COPY_FROM = FLAGS_RESERVED | FLAG_IN_USE; 85a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 86a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville /*package*/ int flags; 87a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ long when; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Bundle data; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Handler target; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Runnable callback; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // sometimes we store linked lists of these things 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Message next; 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 992405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick private static final Object sPoolSync = new Object(); 1002405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick private static Message sPool; 1012405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick private static int sPoolSize = 0; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MAX_POOL_SIZE = 10; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a new Message instance from the global pool. Allows us to 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * avoid allocating new objects in many cases. 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain() { 1102405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick synchronized (sPoolSync) { 1112405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick if (sPool != null) { 1122405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick Message m = sPool; 1132405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick sPool = m.next; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.next = null; 1152405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick sPoolSize--; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Message(); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but copies the values of an existing 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * message (including its target) into the new one. 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param orig Original message to copy. 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Message orig) { 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = orig.what; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg1 = orig.arg1; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg2 = orig.arg2; 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.obj = orig.obj; 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.replyTo = orig.replyTo; 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (orig.data != null) { 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.data = new Bundle(orig.data); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = orig.target; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.callback = orig.callback; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the value for the <em>target</em> member on the Message returned. 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h Handler to assign to the returned Message object's <em>target</em> member. 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h) { 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain(Handler)}, but assigns a callback Runnable on 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Message that is returned. 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h Handler to assign to the returned Message object's <em>target</em> member. 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param callback Runnable that will execute when the message is handled. 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, Runnable callback) { 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.callback = callback; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values for both <em>target</em> and 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <em>what</em> members on the Message. 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h Value to assign to the <em>target</em> member. 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what Value to assign to the <em>what</em> member. 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what) { 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values of the <em>target</em>, <em>what</em>, and <em>obj</em> 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * members. 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h The <em>target</em> value to set. 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what The <em>what</em> value to set. 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param obj The <em>object</em> method to set. 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what, Object obj) { 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.obj = obj; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values of the <em>target</em>, <em>what</em>, 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <em>arg1</em>, and <em>arg2</em> members. 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h The <em>target</em> value to set. 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what The <em>what</em> value to set. 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg1 The <em>arg1</em> value to set. 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg2 The <em>arg2</em> value to set. 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what, int arg1, int arg2) { 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg1 = arg1; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg2 = arg2; 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values of the <em>target</em>, <em>what</em>, 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <em>arg1</em>, <em>arg2</em>, and <em>obj</em> members. 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h The <em>target</em> value to set. 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what The <em>what</em> value to set. 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg1 The <em>arg1</em> value to set. 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg2 The <em>arg2</em> value to set. 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param obj The <em>obj</em> value to set. 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what, 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int arg1, int arg2, Object obj) { 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg1 = arg1; 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg2 = arg2; 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.obj = obj; 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a Message instance to the global pool. You MUST NOT touch 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Message after calling this function -- it has effectively been 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * freed. 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void recycle() { 252fc9ff4c834c5b3a3c4b024b89375d6c329092791Jeff Brown clearForRecycle(); 253fc9ff4c834c5b3a3c4b024b89375d6c329092791Jeff Brown 2542405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick synchronized (sPoolSync) { 2552405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick if (sPoolSize < MAX_POOL_SIZE) { 2562405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick next = sPool; 2572405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick sPool = this; 2582405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick sPoolSize++; 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Make this message like o. Performs a shallow copy of the data field. 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Does not copy the linked list fields, nor the timestamp or 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * target/callback of the original message. 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void copyFrom(Message o) { 269a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville this.flags = o.flags & ~FLAGS_TO_CLEAR_ON_COPY_FROM; 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.what = o.what; 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.arg1 = o.arg1; 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.arg2 = o.arg2; 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.obj = o.obj; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.replyTo = o.replyTo; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (o.data != null) { 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.data = (Bundle) o.data.clone(); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.data = null; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the targeted delivery time of this message, in milliseconds. 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getWhen() { 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return when; 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTarget(Handler target) { 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.target = target; 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the a {@link android.os.Handler Handler} implementation that 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will receive this message. The object must implement 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.os.Handler#handleMessage(android.os.Message) 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Handler.handleMessage()}. Each Handler has its own name-space for 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * message codes, so you do not need to 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * worry about yours conflicting with other handlers. 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Handler getTarget() { 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return target; 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve callback object that will execute when this message is handled. 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This object must implement Runnable. This is called by 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the <em>target</em> {@link Handler} that is receiving this Message to 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dispatch it. If 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not set, the message will be dispatched to the receiving Handler's 31275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link Handler#handleMessage(Message Handler.handleMessage())}. 31375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn */ 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Runnable getCallback() { 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return callback; 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Obtains a Bundle of arbitrary data associated with this 32075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * event, lazily creating it if necessary. Set this value by calling 32175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link #setData(Bundle)}. Note that when transferring data across 32275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * processes via {@link Messenger}, you will need to set your ClassLoader 32375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * on the Bundle via {@link Bundle#setClassLoader(ClassLoader) 32475288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * Bundle.setClassLoader()} so that it can instantiate your objects when 32575288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * you retrieve them. 32675288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #peekData() 32775288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #setData(Bundle) 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Bundle getData() { 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (data == null) { 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = new Bundle(); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return data; 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Like getData(), but does not lazily create the Bundle. A null 33975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * is returned if the Bundle does not already exist. See 34075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link #getData} for further information on this. 34175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #getData() 34275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #setData(Bundle) 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Bundle peekData() { 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return data; 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 34875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn /** 34975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * Sets a Bundle of arbitrary data values. Use arg1 and arg1 members 35075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * as a lower cost way to send a few simple integer values, if you can. 35175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #getData() 35275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #peekData() 35375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn */ 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setData(Bundle data) { 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.data = data; 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sends this Message to the Handler specified by {@link #getTarget}. 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Throws a null pointer exception if this field has not been set. 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void sendToTarget() { 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project target.sendMessage(this); 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void clearForRecycle() { 367a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville flags = 0; 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project what = 0; 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg1 = 0; 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg2 = 0; 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj = null; 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project replyTo = null; 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project when = 0; 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project target = null; 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callback = null; 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = null; 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville /*package*/ boolean isInUse() { 380a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville return ((flags & FLAG_IN_USE) == FLAG_IN_USE); 381a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 382a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 383a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville /*package*/ void markInUse() { 384a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville flags |= FLAG_IN_USE; 385a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 386a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Constructor (but the preferred way to get a Message is to call {@link #obtain() Message.obtain()}). 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message() { 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 3931ebccf531d1049853b3b0630035434619682c016Dianne Hackborn return toString(SystemClock.uptimeMillis()); 3941ebccf531d1049853b3b0630035434619682c016Dianne Hackborn } 3951ebccf531d1049853b3b0630035434619682c016Dianne Hackborn 3961ebccf531d1049853b3b0630035434619682c016Dianne Hackborn String toString(long now) { 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder b = new StringBuilder(); 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append("{ what="); 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(what); 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" when="); 4031ebccf531d1049853b3b0630035434619682c016Dianne Hackborn TimeUtils.formatDuration(when-now, b); 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (arg1 != 0) { 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" arg1="); 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(arg1); 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (arg2 != 0) { 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" arg2="); 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(arg2); 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (obj != null) { 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" obj="); 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(obj); 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" }"); 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return b.toString(); 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<Message> CREATOR 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Parcelable.Creator<Message>() { 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message createFromParcel(Parcel source) { 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message msg = Message.obtain(); 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project msg.readFromParcel(source); 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return msg; 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message[] newArray(int size) { 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Message[size]; 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 44375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn if (callback != null) { 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException( 44575288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn "Can't marshal callbacks across processes."); 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(what); 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(arg1); 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(arg2); 45075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn if (obj != null) { 45175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn try { 45275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn Parcelable p = (Parcelable)obj; 45375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn dest.writeInt(1); 45475288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn dest.writeParcelable(p, flags); 45575288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn } catch (ClassCastException e) { 45675288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn throw new RuntimeException( 45775288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn "Can't marshal non-Parcelable objects across processes."); 45875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn } 45975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn } else { 46075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn dest.writeInt(0); 46175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn } 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeLong(when); 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeBundle(data); 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Messenger.writeMessengerOrNullToParcel(replyTo, dest); 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void readFromParcel(Parcel source) { 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project what = source.readInt(); 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg1 = source.readInt(); 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg2 = source.readInt(); 47175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn if (source.readInt() != 0) { 47275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn obj = source.readParcelable(getClass().getClassLoader()); 47375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn } 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project when = source.readLong(); 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = source.readBundle(); 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project replyTo = Messenger.readMessengerOrNullFromParcel(source); 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 479