115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root/* 215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Copyright (C) 2008 The Android Open Source Project 315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * you may not use this file except in compliance with the License. 615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * You may obtain a copy of the License at 715a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 815a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * http://www.apache.org/licenses/LICENSE-2.0 915a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 1015a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Unless required by applicable law or agreed to in writing, software 1115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 1215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * See the License for the specific language governing permissions and 1415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * limitations under the License. 1515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root */ 1615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.internal.os; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Looper; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Message; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class HandlerCaller { 25758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final Context mContext; 27ed218c706d9e91e75b94c448cee2e6150aaee57fMita Yun 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Looper mMainLooper; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Handler mH; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Callback mCallback; 32758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class MyHandler extends Handler { 34ed218c706d9e91e75b94c448cee2e6150aaee57fMita Yun MyHandler(Looper looper, boolean async) { 35ed218c706d9e91e75b94c448cee2e6150aaee57fMita Yun super(looper, null, async); 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37ed218c706d9e91e75b94c448cee2e6150aaee57fMita Yun 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void handleMessage(Message msg) { 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCallback.executeMessage(msg); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43ed218c706d9e91e75b94c448cee2e6150aaee57fMita Yun 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface Callback { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void executeMessage(Message msg); 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 48ed218c706d9e91e75b94c448cee2e6150aaee57fMita Yun public HandlerCaller(Context context, Looper looper, Callback callback, 49ed218c706d9e91e75b94c448cee2e6150aaee57fMita Yun boolean asyncHandler) { 5019382ac1a4e4e7c23a1346d299368763f149de9cDianne Hackborn mContext = context; 51ed218c706d9e91e75b94c448cee2e6150aaee57fMita Yun mMainLooper = looper != null ? looper : context.getMainLooper(); 52ed218c706d9e91e75b94c448cee2e6150aaee57fMita Yun mH = new MyHandler(mMainLooper, asyncHandler); 5319382ac1a4e4e7c23a1346d299368763f149de9cDianne Hackborn mCallback = callback; 5419382ac1a4e4e7c23a1346d299368763f149de9cDianne Hackborn } 5519382ac1a4e4e7c23a1346d299368763f149de9cDianne Hackborn 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void executeOrSendMessage(Message msg) { 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If we are calling this from the main thread, then we can call 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // right through. Otherwise, we need to send the message to the 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // main thread. 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (Looper.myLooper() == mMainLooper) { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCallback.executeMessage(msg); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project msg.recycle(); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mH.sendMessage(msg); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 68269403b032f965ff3847eb982c2f697229dc5a92Svetoslav 69269403b032f965ff3847eb982c2f697229dc5a92Svetoslav public void sendMessageDelayed(Message msg, long delayMillis) { 70269403b032f965ff3847eb982c2f697229dc5a92Svetoslav mH.sendMessageDelayed(msg, delayMillis); 71269403b032f965ff3847eb982c2f697229dc5a92Svetoslav } 72269403b032f965ff3847eb982c2f697229dc5a92Svetoslav 7372c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn public boolean hasMessages(int what) { 7472c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn return mH.hasMessages(what); 7572c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn } 7672c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn 778df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn public void removeMessages(int what) { 788df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn mH.removeMessages(what); 798df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 808df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 818df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn public void removeMessages(int what, Object obj) { 828df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn mH.removeMessages(what, obj); 838df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 848df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void sendMessage(Message msg) { 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mH.sendMessage(msg); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message obtainMessage(int what) { 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message obtainMessageBO(int what, boolean arg1, Object arg2) { 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1 ? 1 : 0, 0, arg2); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message obtainMessageBOO(int what, boolean arg1, Object arg2, Object arg3) { 98758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov SomeArgs args = SomeArgs.obtain(); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg1 = arg2; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg2 = arg3; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1 ? 1 : 0, 0, args); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message obtainMessageO(int what, Object arg1) { 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, 0, 0, arg1); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message obtainMessageI(int what, int arg1) { 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1, 0); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1124df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public Message obtainMessageII(int what, int arg1, int arg2) { 1134df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project return mH.obtainMessage(what, arg1, arg2); 1144df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 1154df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message obtainMessageIO(int what, int arg1, Object arg2) { 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1, 0, arg2); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message obtainMessageIIO(int what, int arg1, int arg2, Object arg3) { 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1, arg2, arg3); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1244c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn public Message obtainMessageIIOO(int what, int arg1, int arg2, 1254c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn Object arg3, Object arg4) { 126758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov SomeArgs args = SomeArgs.obtain(); 1274c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn args.arg1 = arg3; 1284c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn args.arg2 = arg4; 1294c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn return mH.obtainMessage(what, arg1, arg2, args); 1304c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn } 1314c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message obtainMessageIOO(int what, int arg1, Object arg2, Object arg3) { 133758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov SomeArgs args = SomeArgs.obtain(); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg1 = arg2; 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg2 = arg3; 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1, 0, args); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message obtainMessageOO(int what, Object arg1, Object arg2) { 140758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov SomeArgs args = SomeArgs.obtain(); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg1 = arg1; 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg2 = arg2; 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, 0, 0, args); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message obtainMessageOOO(int what, Object arg1, Object arg2, Object arg3) { 147758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov SomeArgs args = SomeArgs.obtain(); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg1 = arg1; 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg2 = arg2; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg3 = arg3; 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, 0, 0, args); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message obtainMessageOOOO(int what, Object arg1, Object arg2, 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Object arg3, Object arg4) { 156758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov SomeArgs args = SomeArgs.obtain(); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg1 = arg1; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg2 = arg2; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg3 = arg3; 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg4 = arg4; 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, 0, 0, args); 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message obtainMessageIIII(int what, int arg1, int arg2, 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int arg3, int arg4) { 166758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov SomeArgs args = SomeArgs.obtain(); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.argi1 = arg1; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.argi2 = arg2; 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.argi3 = arg3; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.argi4 = arg4; 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, 0, 0, args); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message obtainMessageIIIIII(int what, int arg1, int arg2, 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int arg3, int arg4, int arg5, int arg6) { 176758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov SomeArgs args = SomeArgs.obtain(); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.argi1 = arg1; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.argi2 = arg2; 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.argi3 = arg3; 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.argi4 = arg4; 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.argi5 = arg5; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.argi6 = arg6; 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, 0, 0, args); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message obtainMessageIIIIO(int what, int arg1, int arg2, 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int arg3, int arg4, Object arg5) { 188758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov SomeArgs args = SomeArgs.obtain(); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg1 = arg5; 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.argi1 = arg1; 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.argi2 = arg2; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.argi3 = arg3; 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.argi4 = arg4; 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, 0, 0, args); 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 197