Message.java revision 2405c278ef51ac527bca6d76a0b9d4804f9aab17
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; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ long when; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Bundle data; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Handler target; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Runnable callback; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // sometimes we store linked lists of these things 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Message next; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 882405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick private static final Object sPoolSync = new Object(); 892405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick private static Message sPool; 902405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick private static int sPoolSize = 0; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MAX_POOL_SIZE = 10; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a new Message instance from the global pool. Allows us to 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * avoid allocating new objects in many cases. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain() { 992405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick synchronized (sPoolSync) { 1002405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick if (sPool != null) { 1012405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick Message m = sPool; 1022405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick sPool = m.next; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.next = null; 1042405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick sPoolSize--; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Message(); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but copies the values of an existing 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * message (including its target) into the new one. 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param orig Original message to copy. 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Message orig) { 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = orig.what; 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg1 = orig.arg1; 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg2 = orig.arg2; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.obj = orig.obj; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.replyTo = orig.replyTo; 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (orig.data != null) { 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.data = new Bundle(orig.data); 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = orig.target; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.callback = orig.callback; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the value for the <em>target</em> member on the Message returned. 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h Handler to assign to the returned Message object's <em>target</em> member. 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h) { 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain(Handler)}, but assigns a callback Runnable on 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Message that is returned. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h Handler to assign to the returned Message object's <em>target</em> member. 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param callback Runnable that will execute when the message is handled. 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, Runnable callback) { 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.callback = callback; 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values for both <em>target</em> and 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <em>what</em> members on the Message. 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h Value to assign to the <em>target</em> member. 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what Value to assign to the <em>what</em> member. 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what) { 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values of the <em>target</em>, <em>what</em>, and <em>obj</em> 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * members. 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h The <em>target</em> value to set. 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what The <em>what</em> value to set. 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param obj The <em>object</em> method to set. 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what, Object obj) { 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.obj = obj; 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values of the <em>target</em>, <em>what</em>, 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <em>arg1</em>, and <em>arg2</em> members. 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h The <em>target</em> value to set. 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what The <em>what</em> value to set. 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg1 The <em>arg1</em> value to set. 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg2 The <em>arg2</em> value to set. 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what, int arg1, int arg2) { 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg1 = arg1; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg2 = arg2; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values of the <em>target</em>, <em>what</em>, 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <em>arg1</em>, <em>arg2</em>, and <em>obj</em> members. 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h The <em>target</em> value to set. 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what The <em>what</em> value to set. 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg1 The <em>arg1</em> value to set. 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg2 The <em>arg2</em> value to set. 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param obj The <em>obj</em> value to set. 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what, 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int arg1, int arg2, Object obj) { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg1 = arg1; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg2 = arg2; 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.obj = obj; 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a Message instance to the global pool. You MUST NOT touch 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Message after calling this function -- it has effectively been 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * freed. 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void recycle() { 2412405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick synchronized (sPoolSync) { 2422405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick if (sPoolSize < MAX_POOL_SIZE) { 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clearForRecycle(); 2442405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick next = sPool; 2452405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick sPool = this; 2462405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick sPoolSize++; 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Make this message like o. Performs a shallow copy of the data field. 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Does not copy the linked list fields, nor the timestamp or 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * target/callback of the original message. 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void copyFrom(Message o) { 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.what = o.what; 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.arg1 = o.arg1; 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.arg2 = o.arg2; 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.obj = o.obj; 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.replyTo = o.replyTo; 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (o.data != null) { 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.data = (Bundle) o.data.clone(); 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.data = null; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the targeted delivery time of this message, in milliseconds. 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getWhen() { 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return when; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTarget(Handler target) { 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.target = target; 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the a {@link android.os.Handler Handler} implementation that 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will receive this message. The object must implement 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.os.Handler#handleMessage(android.os.Message) 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Handler.handleMessage()}. Each Handler has its own name-space for 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * message codes, so you do not need to 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * worry about yours conflicting with other handlers. 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Handler getTarget() { 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return target; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve callback object that will execute when this message is handled. 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This object must implement Runnable. This is called by 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the <em>target</em> {@link Handler} that is receiving this Message to 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dispatch it. If 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not set, the message will be dispatched to the receiving Handler's 29975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link Handler#handleMessage(Message Handler.handleMessage())}. 30075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn */ 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Runnable getCallback() { 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return callback; 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Obtains a Bundle of arbitrary data associated with this 30775288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * event, lazily creating it if necessary. Set this value by calling 30875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link #setData(Bundle)}. Note that when transferring data across 30975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * processes via {@link Messenger}, you will need to set your ClassLoader 31075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * on the Bundle via {@link Bundle#setClassLoader(ClassLoader) 31175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * Bundle.setClassLoader()} so that it can instantiate your objects when 31275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * you retrieve them. 31375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #peekData() 31475288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #setData(Bundle) 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Bundle getData() { 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (data == null) { 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = new Bundle(); 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return data; 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Like getData(), but does not lazily create the Bundle. A null 32675288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * is returned if the Bundle does not already exist. See 32775288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link #getData} for further information on this. 32875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #getData() 32975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #setData(Bundle) 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Bundle peekData() { 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return data; 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33575288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn /** 33675288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * Sets a Bundle of arbitrary data values. Use arg1 and arg1 members 33775288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * as a lower cost way to send a few simple integer values, if you can. 33875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #getData() 33975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #peekData() 34075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn */ 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setData(Bundle data) { 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.data = data; 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sends this Message to the Handler specified by {@link #getTarget}. 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Throws a null pointer exception if this field has not been set. 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void sendToTarget() { 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project target.sendMessage(this); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void clearForRecycle() { 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project what = 0; 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg1 = 0; 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg2 = 0; 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj = null; 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project replyTo = null; 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project when = 0; 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project target = null; 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callback = null; 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = null; 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Constructor (but the preferred way to get a Message is to call {@link #obtain() Message.obtain()}). 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message() { 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 3711ebccf531d1049853b3b0630035434619682c016Dianne Hackborn return toString(SystemClock.uptimeMillis()); 3721ebccf531d1049853b3b0630035434619682c016Dianne Hackborn } 3731ebccf531d1049853b3b0630035434619682c016Dianne Hackborn 3741ebccf531d1049853b3b0630035434619682c016Dianne Hackborn String toString(long now) { 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder b = new StringBuilder(); 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append("{ what="); 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(what); 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" when="); 3811ebccf531d1049853b3b0630035434619682c016Dianne Hackborn TimeUtils.formatDuration(when-now, b); 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (arg1 != 0) { 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" arg1="); 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(arg1); 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (arg2 != 0) { 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" arg2="); 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(arg2); 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (obj != null) { 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" obj="); 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(obj); 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" }"); 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return b.toString(); 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<Message> CREATOR 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Parcelable.Creator<Message>() { 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message createFromParcel(Parcel source) { 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message msg = Message.obtain(); 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project msg.readFromParcel(source); 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return msg; 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message[] newArray(int size) { 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Message[size]; 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 42175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn if (callback != null) { 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException( 42375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn "Can't marshal callbacks across processes."); 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(what); 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(arg1); 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(arg2); 42875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn if (obj != null) { 42975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn try { 43075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn Parcelable p = (Parcelable)obj; 43175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn dest.writeInt(1); 43275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn dest.writeParcelable(p, flags); 43375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn } catch (ClassCastException e) { 43475288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn throw new RuntimeException( 43575288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn "Can't marshal non-Parcelable objects across processes."); 43675288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn } 43775288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn } else { 43875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn dest.writeInt(0); 43975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn } 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeLong(when); 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeBundle(data); 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Messenger.writeMessengerOrNullToParcel(replyTo, dest); 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void readFromParcel(Parcel source) { 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project what = source.readInt(); 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg1 = source.readInt(); 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg2 = source.readInt(); 44975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn if (source.readInt() != 0) { 45075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn obj = source.readParcelable(getClass().getClassLoader()); 45175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn } 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project when = source.readLong(); 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = source.readBundle(); 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project replyTo = Messenger.readMessengerOrNullFromParcel(source); 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 457