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 191ebccf531d1049853b3b0630035434619682c016Dianne Hackbornimport android.util.TimeUtils; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defines a message containing a description and arbitrary data object that can be 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sent to a {@link Handler}. This object contains two extra int fields and an 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * extra object field that allow you to not do allocations in many cases. 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p class="note">While the constructor of Message is public, the best way to get 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * one of these is to call {@link #obtain Message.obtain()} or one of the 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Handler#obtainMessage Handler.obtainMessage()} methods, which will pull 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * them from a pool of recycled objects.</p> 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class Message implements Parcelable { 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * User-defined message code so that the recipient can identify 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * what this message is about. Each {@link Handler} has its own name-space 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for message codes, so you do not need to worry about yours conflicting 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with other handlers. 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int what; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn /** 4275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * arg1 and arg2 are lower-cost alternatives to using 4375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link #setData(Bundle) setData()} if you only need to store a 4475288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * few integer values. 4575288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn */ 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int arg1; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn /** 4975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * arg1 and arg2 are lower-cost alternatives to using 5075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link #setData(Bundle) setData()} if you only need to store a 5175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * few integer values. 5275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn */ 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int arg2; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5575288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn /** 5675288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * An arbitrary object to send to the recipient. When using 5775288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link Messenger} to send the message across processes this can only 5875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * be non-null if it contains a Parcelable of a framework class (not one 5975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * implemented by the application). For other data transfer use 6075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link #setData}. 6175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * 6275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * <p>Note that Parcelable objects here are not supported prior to 6375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * the {@link android.os.Build.VERSION_CODES#FROYO} release. 6475288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn */ 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object obj; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6775288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn /** 6875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * Optional Messenger where replies to this message can be sent. The 6975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * semantics of exactly how this is used are up to the sender and 7075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * receiver. 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Messenger replyTo; 73a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 74a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville /** If set message is in use */ 75e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown /*package*/ static final int FLAG_IN_USE = 1 << 0; 76a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 77e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown /** If set message is asynchronous */ 78e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown /*package*/ static final int FLAG_ASYNCHRONOUS = 1 << 1; 79a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 80a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville /** Flags to clear in the copyFrom method */ 81e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown /*package*/ static final int FLAGS_TO_CLEAR_ON_COPY_FROM = FLAG_IN_USE; 82a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 83a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville /*package*/ int flags; 84a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ long when; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Bundle data; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Handler target; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Runnable callback; 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // sometimes we store linked lists of these things 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Message next; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 962405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick private static final Object sPoolSync = new Object(); 972405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick private static Message sPool; 982405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick private static int sPoolSize = 0; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 100a2ad65692481510496e367b593facf778f49249bRomain Guy private static final int MAX_POOL_SIZE = 50; 101a2ad65692481510496e367b593facf778f49249bRomain Guy 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a new Message instance from the global pool. Allows us to 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * avoid allocating new objects in many cases. 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain() { 1072405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick synchronized (sPoolSync) { 1082405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick if (sPool != null) { 1092405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick Message m = sPool; 1102405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick sPool = m.next; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.next = null; 1122405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick sPoolSize--; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Message(); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but copies the values of an existing 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * message (including its target) into the new one. 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param orig Original message to copy. 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Message orig) { 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = orig.what; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg1 = orig.arg1; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg2 = orig.arg2; 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.obj = orig.obj; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.replyTo = orig.replyTo; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (orig.data != null) { 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.data = new Bundle(orig.data); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = orig.target; 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.callback = orig.callback; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the value for the <em>target</em> member on the Message returned. 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h Handler to assign to the returned Message object's <em>target</em> member. 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h) { 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain(Handler)}, but assigns a callback Runnable on 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Message that is returned. 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h Handler to assign to the returned Message object's <em>target</em> member. 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param callback Runnable that will execute when the message is handled. 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, Runnable callback) { 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.callback = callback; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values for both <em>target</em> and 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <em>what</em> members on the Message. 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h Value to assign to the <em>target</em> member. 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what Value to assign to the <em>what</em> member. 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what) { 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values of the <em>target</em>, <em>what</em>, and <em>obj</em> 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * members. 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h The <em>target</em> value to set. 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what The <em>what</em> value to set. 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param obj The <em>object</em> method to set. 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what, Object obj) { 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.obj = obj; 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values of the <em>target</em>, <em>what</em>, 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <em>arg1</em>, and <em>arg2</em> members. 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h The <em>target</em> value to set. 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what The <em>what</em> value to set. 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg1 The <em>arg1</em> value to set. 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg2 The <em>arg2</em> value to set. 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what, int arg1, int arg2) { 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg1 = arg1; 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg2 = arg2; 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values of the <em>target</em>, <em>what</em>, 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <em>arg1</em>, <em>arg2</em>, and <em>obj</em> members. 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h The <em>target</em> value to set. 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what The <em>what</em> value to set. 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg1 The <em>arg1</em> value to set. 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg2 The <em>arg2</em> value to set. 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param obj The <em>obj</em> value to set. 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what, 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int arg1, int arg2, Object obj) { 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg1 = arg1; 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg2 = arg2; 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.obj = obj; 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a Message instance to the global pool. You MUST NOT touch 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Message after calling this function -- it has effectively been 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * freed. 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void recycle() { 249fc9ff4c834c5b3a3c4b024b89375d6c329092791Jeff Brown clearForRecycle(); 250fc9ff4c834c5b3a3c4b024b89375d6c329092791Jeff Brown 2512405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick synchronized (sPoolSync) { 2522405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick if (sPoolSize < MAX_POOL_SIZE) { 2532405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick next = sPool; 2542405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick sPool = this; 2552405c278ef51ac527bca6d76a0b9d4804f9aab17Brad Fitzpatrick sPoolSize++; 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Make this message like o. Performs a shallow copy of the data field. 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Does not copy the linked list fields, nor the timestamp or 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * target/callback of the original message. 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void copyFrom(Message o) { 266a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville this.flags = o.flags & ~FLAGS_TO_CLEAR_ON_COPY_FROM; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.what = o.what; 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.arg1 = o.arg1; 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.arg2 = o.arg2; 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.obj = o.obj; 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.replyTo = o.replyTo; 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (o.data != null) { 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.data = (Bundle) o.data.clone(); 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.data = null; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the targeted delivery time of this message, in milliseconds. 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getWhen() { 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return when; 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTarget(Handler target) { 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.target = target; 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the a {@link android.os.Handler Handler} implementation that 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will receive this message. The object must implement 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.os.Handler#handleMessage(android.os.Message) 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Handler.handleMessage()}. Each Handler has its own name-space for 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * message codes, so you do not need to 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * worry about yours conflicting with other handlers. 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Handler getTarget() { 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return target; 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve callback object that will execute when this message is handled. 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This object must implement Runnable. This is called by 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the <em>target</em> {@link Handler} that is receiving this Message to 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dispatch it. If 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not set, the message will be dispatched to the receiving Handler's 30975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link Handler#handleMessage(Message Handler.handleMessage())}. 31075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn */ 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Runnable getCallback() { 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return callback; 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Obtains a Bundle of arbitrary data associated with this 31775288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * event, lazily creating it if necessary. Set this value by calling 31875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link #setData(Bundle)}. Note that when transferring data across 31975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * processes via {@link Messenger}, you will need to set your ClassLoader 32075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * on the Bundle via {@link Bundle#setClassLoader(ClassLoader) 32175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * Bundle.setClassLoader()} so that it can instantiate your objects when 32275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * you retrieve them. 32375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #peekData() 32475288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #setData(Bundle) 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Bundle getData() { 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (data == null) { 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = new Bundle(); 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return data; 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Like getData(), but does not lazily create the Bundle. A null 33675288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * is returned if the Bundle does not already exist. See 33775288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * {@link #getData} for further information on this. 33875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #getData() 33975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #setData(Bundle) 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Bundle peekData() { 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return data; 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 34575288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn /** 34675288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * Sets a Bundle of arbitrary data values. Use arg1 and arg1 members 34775288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * as a lower cost way to send a few simple integer values, if you can. 34875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #getData() 34975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn * @see #peekData() 35075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn */ 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setData(Bundle data) { 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.data = data; 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sends this Message to the Handler specified by {@link #getTarget}. 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Throws a null pointer exception if this field has not been set. 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void sendToTarget() { 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project target.sendMessage(this); 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 363e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown /** 364e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * Returns true if the message is asynchronous. 365e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * 366e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * Asynchronous messages represent interrupts or events that do not require global ordering 367e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * with represent to synchronous messages. Asynchronous messages are not subject to 3688f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy * the synchronization barriers introduced by {@link MessageQueue#enqueueSyncBarrier(long)}. 369e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * 370e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * @return True if the message is asynchronous. 371e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * 372e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * @see #setAsynchronous(boolean) 3738f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy * @see MessageQueue#enqueueSyncBarrier(long) 3748f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy * @see MessageQueue#removeSyncBarrier(int) 375e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * 376e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * @hide 377e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown */ 378e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown public boolean isAsynchronous() { 379e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown return (flags & FLAG_ASYNCHRONOUS) != 0; 380e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown } 381e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown 382e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown /** 383e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * Sets whether the message is asynchronous. 384e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * 385e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * Asynchronous messages represent interrupts or events that do not require global ordering 386e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * with represent to synchronous messages. Asynchronous messages are not subject to 3878f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy * the synchronization barriers introduced by {@link MessageQueue#enqueueSyncBarrier(long)}. 388e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * 389e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * @param async True if the message is asynchronous. 390e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * 391e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * @see #isAsynchronous() 3928f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy * @see MessageQueue#enqueueSyncBarrier(long) 3938f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy * @see MessageQueue#removeSyncBarrier(int) 394e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * 395e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown * @hide 396e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown */ 397e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown public void setAsynchronous(boolean async) { 398e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown if (async) { 399e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown flags |= FLAG_ASYNCHRONOUS; 400e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown } else { 401e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown flags &= ~FLAG_ASYNCHRONOUS; 402e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown } 403e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown } 404e799cb78b4be61d3882e71c6812fa62c9a83fd5dJeff Brown 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void clearForRecycle() { 406a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville flags = 0; 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project what = 0; 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg1 = 0; 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg2 = 0; 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj = null; 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project replyTo = null; 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project when = 0; 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project target = null; 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callback = null; 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = null; 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 418a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville /*package*/ boolean isInUse() { 419a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville return ((flags & FLAG_IN_USE) == FLAG_IN_USE); 420a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 421a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 422a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville /*package*/ void markInUse() { 423a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville flags |= FLAG_IN_USE; 424a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 425a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Constructor (but the preferred way to get a Message is to call {@link #obtain() Message.obtain()}). 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message() { 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 4321ebccf531d1049853b3b0630035434619682c016Dianne Hackborn return toString(SystemClock.uptimeMillis()); 4331ebccf531d1049853b3b0630035434619682c016Dianne Hackborn } 4341ebccf531d1049853b3b0630035434619682c016Dianne Hackborn 4351ebccf531d1049853b3b0630035434619682c016Dianne Hackborn String toString(long now) { 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder b = new StringBuilder(); 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append("{ what="); 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(what); 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" when="); 4421ebccf531d1049853b3b0630035434619682c016Dianne Hackborn TimeUtils.formatDuration(when-now, b); 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (arg1 != 0) { 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" arg1="); 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(arg1); 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (arg2 != 0) { 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" arg2="); 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(arg2); 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (obj != null) { 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" obj="); 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(obj); 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" }"); 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return b.toString(); 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<Message> CREATOR 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Parcelable.Creator<Message>() { 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message createFromParcel(Parcel source) { 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message msg = Message.obtain(); 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project msg.readFromParcel(source); 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return msg; 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message[] newArray(int size) { 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Message[size]; 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 48275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn if (callback != null) { 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException( 48475288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn "Can't marshal callbacks across processes."); 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(what); 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(arg1); 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(arg2); 48975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn if (obj != null) { 49075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn try { 49175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn Parcelable p = (Parcelable)obj; 49275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn dest.writeInt(1); 49375288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn dest.writeParcelable(p, flags); 49475288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn } catch (ClassCastException e) { 49575288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn throw new RuntimeException( 49675288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn "Can't marshal non-Parcelable objects across processes."); 49775288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn } 49875288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn } else { 49975288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn dest.writeInt(0); 50075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn } 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeLong(when); 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeBundle(data); 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Messenger.writeMessengerOrNullToParcel(replyTo, dest); 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5068f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy private void readFromParcel(Parcel source) { 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project what = source.readInt(); 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg1 = source.readInt(); 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg2 = source.readInt(); 51075288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn if (source.readInt() != 0) { 51175288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn obj = source.readParcelable(getClass().getClassLoader()); 51275288fa1a4ee4886959af7243995d8afd9c3c905Dianne Hackborn } 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project when = source.readLong(); 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = source.readBundle(); 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project replyTo = Messenger.readMessengerOrNullFromParcel(source); 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 518