1/* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.internal.os; 18 19import android.content.Context; 20import android.os.Handler; 21import android.os.Looper; 22import android.os.Message; 23 24public class HandlerCaller { 25 26 public final Context mContext; 27 28 final Looper mMainLooper; 29 final Handler mH; 30 31 final Callback mCallback; 32 33 class MyHandler extends Handler { 34 MyHandler(Looper looper) { 35 super(looper); 36 } 37 38 @Override 39 public void handleMessage(Message msg) { 40 mCallback.executeMessage(msg); 41 } 42 } 43 44 public interface Callback { 45 public void executeMessage(Message msg); 46 } 47 48 public HandlerCaller(Context context, Callback callback) { 49 mContext = context; 50 mMainLooper = context.getMainLooper(); 51 mH = new MyHandler(mMainLooper); 52 mCallback = callback; 53 } 54 55 public HandlerCaller(Context context, Looper looper, Callback callback) { 56 mContext = context; 57 mMainLooper = looper; 58 mH = new MyHandler(mMainLooper); 59 mCallback = callback; 60 } 61 62 public void executeOrSendMessage(Message msg) { 63 // If we are calling this from the main thread, then we can call 64 // right through. Otherwise, we need to send the message to the 65 // main thread. 66 if (Looper.myLooper() == mMainLooper) { 67 mCallback.executeMessage(msg); 68 msg.recycle(); 69 return; 70 } 71 72 mH.sendMessage(msg); 73 } 74 75 public boolean hasMessages(int what) { 76 return mH.hasMessages(what); 77 } 78 79 public void removeMessages(int what) { 80 mH.removeMessages(what); 81 } 82 83 public void removeMessages(int what, Object obj) { 84 mH.removeMessages(what, obj); 85 } 86 87 public void sendMessage(Message msg) { 88 mH.sendMessage(msg); 89 } 90 91 public Message obtainMessage(int what) { 92 return mH.obtainMessage(what); 93 } 94 95 public Message obtainMessageBO(int what, boolean arg1, Object arg2) { 96 return mH.obtainMessage(what, arg1 ? 1 : 0, 0, arg2); 97 } 98 99 public Message obtainMessageBOO(int what, boolean arg1, Object arg2, Object arg3) { 100 SomeArgs args = SomeArgs.obtain(); 101 args.arg1 = arg2; 102 args.arg2 = arg3; 103 return mH.obtainMessage(what, arg1 ? 1 : 0, 0, args); 104 } 105 106 public Message obtainMessageO(int what, Object arg1) { 107 return mH.obtainMessage(what, 0, 0, arg1); 108 } 109 110 public Message obtainMessageI(int what, int arg1) { 111 return mH.obtainMessage(what, arg1, 0); 112 } 113 114 public Message obtainMessageII(int what, int arg1, int arg2) { 115 return mH.obtainMessage(what, arg1, arg2); 116 } 117 118 public Message obtainMessageIO(int what, int arg1, Object arg2) { 119 return mH.obtainMessage(what, arg1, 0, arg2); 120 } 121 122 public Message obtainMessageIIO(int what, int arg1, int arg2, Object arg3) { 123 return mH.obtainMessage(what, arg1, arg2, arg3); 124 } 125 126 public Message obtainMessageIIOO(int what, int arg1, int arg2, 127 Object arg3, Object arg4) { 128 SomeArgs args = SomeArgs.obtain(); 129 args.arg1 = arg3; 130 args.arg2 = arg4; 131 return mH.obtainMessage(what, arg1, arg2, args); 132 } 133 134 public Message obtainMessageIOO(int what, int arg1, Object arg2, Object arg3) { 135 SomeArgs args = SomeArgs.obtain(); 136 args.arg1 = arg2; 137 args.arg2 = arg3; 138 return mH.obtainMessage(what, arg1, 0, args); 139 } 140 141 public Message obtainMessageOO(int what, Object arg1, Object arg2) { 142 SomeArgs args = SomeArgs.obtain(); 143 args.arg1 = arg1; 144 args.arg2 = arg2; 145 return mH.obtainMessage(what, 0, 0, args); 146 } 147 148 public Message obtainMessageOOO(int what, Object arg1, Object arg2, Object arg3) { 149 SomeArgs args = SomeArgs.obtain(); 150 args.arg1 = arg1; 151 args.arg2 = arg2; 152 args.arg3 = arg3; 153 return mH.obtainMessage(what, 0, 0, args); 154 } 155 156 public Message obtainMessageOOOO(int what, Object arg1, Object arg2, 157 Object arg3, Object arg4) { 158 SomeArgs args = SomeArgs.obtain(); 159 args.arg1 = arg1; 160 args.arg2 = arg2; 161 args.arg3 = arg3; 162 args.arg4 = arg4; 163 return mH.obtainMessage(what, 0, 0, args); 164 } 165 166 public Message obtainMessageIIII(int what, int arg1, int arg2, 167 int arg3, int arg4) { 168 SomeArgs args = SomeArgs.obtain(); 169 args.argi1 = arg1; 170 args.argi2 = arg2; 171 args.argi3 = arg3; 172 args.argi4 = arg4; 173 return mH.obtainMessage(what, 0, 0, args); 174 } 175 176 public Message obtainMessageIIIIII(int what, int arg1, int arg2, 177 int arg3, int arg4, int arg5, int arg6) { 178 SomeArgs args = SomeArgs.obtain(); 179 args.argi1 = arg1; 180 args.argi2 = arg2; 181 args.argi3 = arg3; 182 args.argi4 = arg4; 183 args.argi5 = arg5; 184 args.argi6 = arg6; 185 return mH.obtainMessage(what, 0, 0, args); 186 } 187 188 public Message obtainMessageIIIIO(int what, int arg1, int arg2, 189 int arg3, int arg4, Object arg5) { 190 SomeArgs args = SomeArgs.obtain(); 191 args.arg1 = arg5; 192 args.argi1 = arg1; 193 args.argi2 = arg2; 194 args.argi3 = arg3; 195 args.argi4 = arg4; 196 return mH.obtainMessage(what, 0, 0, args); 197 } 198} 199