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