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;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
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 {
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MyHandler(Looper looper) {
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            super(looper);
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
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    }
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
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
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public HandlerCaller(Context context, Callback callback) {
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mContext = context;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMainLooper = context.getMainLooper();
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mH = new MyHandler(mMainLooper);
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mCallback = callback;
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5519382ac1a4e4e7c23a1346d299368763f149de9cDianne Hackborn    public HandlerCaller(Context context, Looper looper, Callback callback) {
5619382ac1a4e4e7c23a1346d299368763f149de9cDianne Hackborn        mContext = context;
5719382ac1a4e4e7c23a1346d299368763f149de9cDianne Hackborn        mMainLooper = looper;
5819382ac1a4e4e7c23a1346d299368763f149de9cDianne Hackborn        mH = new MyHandler(mMainLooper);
5919382ac1a4e4e7c23a1346d299368763f149de9cDianne Hackborn        mCallback = callback;
6019382ac1a4e4e7c23a1346d299368763f149de9cDianne Hackborn    }
6119382ac1a4e4e7c23a1346d299368763f149de9cDianne Hackborn
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void executeOrSendMessage(Message msg) {
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // If we are calling this from the main thread, then we can call
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // right through.  Otherwise, we need to send the message to the
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // main thread.
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (Looper.myLooper() == mMainLooper) {
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mCallback.executeMessage(msg);
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            msg.recycle();
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mH.sendMessage(msg);
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7572c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn    public boolean hasMessages(int what) {
7672c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn        return mH.hasMessages(what);
7772c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn    }
7872c82ab9923025a91bbabb32e56bfea27bfd083bDianne Hackborn
798df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn    public void removeMessages(int what) {
808df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn        mH.removeMessages(what);
818df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn    }
828df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn
838df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn    public void removeMessages(int what, Object obj) {
848df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn        mH.removeMessages(what, obj);
858df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn    }
868df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void sendMessage(Message msg) {
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mH.sendMessage(msg);
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Message obtainMessage(int what) {
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mH.obtainMessage(what);
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Message obtainMessageBO(int what, boolean arg1, Object arg2) {
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mH.obtainMessage(what, arg1 ? 1 : 0, 0, arg2);
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Message obtainMessageBOO(int what, boolean arg1, Object arg2, Object arg3) {
100758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov        SomeArgs args = SomeArgs.obtain();
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.arg1 = arg2;
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.arg2 = arg3;
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mH.obtainMessage(what, arg1 ? 1 : 0, 0, args);
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Message obtainMessageO(int what, Object arg1) {
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mH.obtainMessage(what, 0, 0, arg1);
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Message obtainMessageI(int what, int arg1) {
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mH.obtainMessage(what, arg1, 0);
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1144df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project    public Message obtainMessageII(int what, int arg1, int arg2) {
1154df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project        return mH.obtainMessage(what, arg1, arg2);
1164df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project    }
1174df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Message obtainMessageIO(int what, int arg1, Object arg2) {
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mH.obtainMessage(what, arg1, 0, arg2);
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Message obtainMessageIIO(int what, int arg1, int arg2, Object arg3) {
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mH.obtainMessage(what, arg1, arg2, arg3);
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1264c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn    public Message obtainMessageIIOO(int what, int arg1, int arg2,
1274c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn            Object arg3, Object arg4) {
128758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov        SomeArgs args = SomeArgs.obtain();
1294c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn        args.arg1 = arg3;
1304c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn        args.arg2 = arg4;
1314c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn        return mH.obtainMessage(what, arg1, arg2, args);
1324c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn    }
1334c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Message obtainMessageIOO(int what, int arg1, Object arg2, Object arg3) {
135758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov        SomeArgs args = SomeArgs.obtain();
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.arg1 = arg2;
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.arg2 = arg3;
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mH.obtainMessage(what, arg1, 0, args);
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Message obtainMessageOO(int what, Object arg1, Object arg2) {
142758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov        SomeArgs args = SomeArgs.obtain();
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.arg1 = arg1;
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.arg2 = arg2;
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mH.obtainMessage(what, 0, 0, args);
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Message obtainMessageOOO(int what, Object arg1, Object arg2, Object arg3) {
149758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov        SomeArgs args = SomeArgs.obtain();
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.arg1 = arg1;
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.arg2 = arg2;
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.arg3 = arg3;
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mH.obtainMessage(what, 0, 0, args);
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Message obtainMessageOOOO(int what, Object arg1, Object arg2,
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Object arg3, Object arg4) {
158758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov        SomeArgs args = SomeArgs.obtain();
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.arg1 = arg1;
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.arg2 = arg2;
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.arg3 = arg3;
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.arg4 = arg4;
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mH.obtainMessage(what, 0, 0, args);
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Message obtainMessageIIII(int what, int arg1, int arg2,
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int arg3, int arg4) {
168758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov        SomeArgs args = SomeArgs.obtain();
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.argi1 = arg1;
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.argi2 = arg2;
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.argi3 = arg3;
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.argi4 = arg4;
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mH.obtainMessage(what, 0, 0, args);
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Message obtainMessageIIIIII(int what, int arg1, int arg2,
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int arg3, int arg4, int arg5, int arg6) {
178758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov        SomeArgs args = SomeArgs.obtain();
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.argi1 = arg1;
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.argi2 = arg2;
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.argi3 = arg3;
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.argi4 = arg4;
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.argi5 = arg5;
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.argi6 = arg6;
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mH.obtainMessage(what, 0, 0, args);
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Message obtainMessageIIIIO(int what, int arg1, int arg2,
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int arg3, int arg4, Object arg5) {
190758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov        SomeArgs args = SomeArgs.obtain();
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.arg1 = arg5;
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.argi1 = arg1;
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.argi2 = arg2;
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.argi3 = arg3;
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.argi4 = arg4;
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mH.obtainMessage(what, 0, 0, args);
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
199