Use messages instead of runnables

Change-Id: If76cf2abbea7c07621ff0c181cd30e68043a681d
diff --git a/src/com/android/telecomm/InCallAdapter.java b/src/com/android/telecomm/InCallAdapter.java
index fec3080..c0dbb7b 100644
--- a/src/com/android/telecomm/InCallAdapter.java
+++ b/src/com/android/telecomm/InCallAdapter.java
@@ -17,7 +17,7 @@
 package com.android.telecomm;
 
 import android.os.Handler;
-import android.os.Looper;
+import android.os.Message;
 
 import com.android.internal.telecomm.IInCallAdapter;
 
@@ -27,115 +27,126 @@
  * binding to it. This adapter can receive commands and updates until the in-call app is unbound.
  */
 class InCallAdapter extends IInCallAdapter.Stub {
+    private static final int MSG_ANSWER_CALL = 0;
+    private static final int MSG_REJECT_CALL = 1;
+    private static final int MSG_PLAY_DTMF_TONE = 2;
+    private static final int MSG_STOP_DTMF_TONE = 3;
+    private static final int MSG_POST_DIAL_CONTINUE = 4;
+    private static final int MSG_DISCONNECT_CALL = 5;
+    private static final int MSG_HOLD_CALL = 6;
+    private static final int MSG_UNHOLD_CALL = 7;
+    private static final int MSG_MUTE = 8;
+    private static final int MSG_SET_AUDIO_ROUTE = 9;
+
+    private final class InCallAdapterHandler extends Handler {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_ANSWER_CALL:
+                    mCallsManager.answerCall((String) msg.obj);
+                    break;
+                case MSG_REJECT_CALL:
+                    mCallsManager.rejectCall((String) msg.obj);
+                    break;
+                case MSG_PLAY_DTMF_TONE:
+                    mCallsManager.playDtmfTone((String) msg.obj, (char) msg.arg1);
+                    break;
+                case MSG_STOP_DTMF_TONE:
+                    mCallsManager.stopDtmfTone((String) msg.obj);
+                    break;
+                case MSG_POST_DIAL_CONTINUE:
+                    mCallsManager.postDialContinue((String) msg.obj);
+                    break;
+                case MSG_DISCONNECT_CALL:
+                    mCallsManager.disconnectCall((String) msg.obj);
+                    break;
+                case MSG_HOLD_CALL:
+                    mCallsManager.holdCall((String) msg.obj);
+                    break;
+                case MSG_UNHOLD_CALL:
+                    mCallsManager.unholdCall((String) msg.obj);
+                    break;
+                case MSG_MUTE:
+                    mCallsManager.mute(msg.arg1 == 1 ? true : false);
+                    break;
+                case MSG_SET_AUDIO_ROUTE:
+                    mCallsManager.setAudioRoute(msg.arg1);
+                    break;
+            }
+        }
+    }
 
     private final CallsManager mCallsManager;
-
-    private final Handler mHandler = new Handler(Looper.getMainLooper());
+    private final Handler mHandler = new InCallAdapterHandler();
 
     /** Persists the specified parameters. */
     public InCallAdapter(CallsManager callsManager) {
+        ThreadUtil.checkOnMainThread();
         mCallsManager = callsManager;
     }
 
     /** {@inheritDoc} */
     @Override
-    public void answerCall(final String callId) {
+    public void answerCall(String callId) {
         Log.d(this, "answerCall(%s)", callId);
-        mHandler.post(new Runnable() {
-            @Override public void run() {
-                mCallsManager.answerCall(callId);
-            }
-        });
+        mHandler.obtainMessage(MSG_ANSWER_CALL, callId).sendToTarget();
     }
 
     /** {@inheritDoc} */
     @Override
-    public void rejectCall(final String callId) {
+    public void rejectCall(String callId) {
         Log.d(this, "rejectCall(%s)", callId);
-        mHandler.post(new Runnable() {
-            @Override public void run() {
-                mCallsManager.rejectCall(callId);
-            }
-        });
+        mHandler.obtainMessage(MSG_REJECT_CALL, callId).sendToTarget();
     }
 
     /** {@inheritDoc} */
-    public void playDtmfTone(final String callId, final char digit) {
+    @Override
+    public void playDtmfTone(String callId, char digit) {
         Log.d(this, "playDtmfTone(%s,%c)", callId, digit);
-        mHandler.post(new Runnable() {
-            @Override public void run() {
-                mCallsManager.playDtmfTone(callId, digit);
-            }
-        });
+        mHandler.obtainMessage(MSG_PLAY_DTMF_TONE, (int) digit, 0, callId).sendToTarget();
     }
 
     /** {@inheritDoc} */
-    public void stopDtmfTone(final String callId) {
+    @Override
+    public void stopDtmfTone(String callId) {
         Log.d(this, "stopDtmfTone(%s)", callId);
-        mHandler.post(new Runnable() {
-            @Override public void run() {
-                mCallsManager.stopDtmfTone(callId);
-            }
-        });
+        mHandler.obtainMessage(MSG_STOP_DTMF_TONE, callId).sendToTarget();
     }
 
     /** {@inheritDoc} */
-    public void postDialContinue(final String callId) {
+    @Override
+    public void postDialContinue(String callId) {
         Log.d(this, "postDialContinue(%s)", callId);
-        mHandler.post(new Runnable() {
-            @Override public void run() {
-                mCallsManager.postDialContinue(callId);
-            }
-        });
+        mHandler.obtainMessage(MSG_POST_DIAL_CONTINUE, callId).sendToTarget();
     }
 
     /** {@inheritDoc} */
     @Override
-    public void disconnectCall(final String callId) {
-        mHandler.post(new Runnable() {
-            @Override public void run() {
-                mCallsManager.disconnectCall(callId);
-            }
-        });
+    public void disconnectCall(String callId) {
+        mHandler.obtainMessage(MSG_DISCONNECT_CALL, callId).sendToTarget();
     }
 
     /** {@inheritDoc} */
     @Override
-    public void holdCall(final String callId) {
-        mHandler.post(new Runnable() {
-            @Override public void run() {
-                mCallsManager.holdCall(callId);
-            }
-        });
+    public void holdCall(String callId) {
+        mHandler.obtainMessage(MSG_HOLD_CALL, callId).sendToTarget();
     }
 
     /** {@inheritDoc} */
     @Override
-    public void unholdCall(final String callId) {
-        mHandler.post(new Runnable() {
-            @Override public void run() {
-                mCallsManager.unholdCall(callId);
-            }
-        });
+    public void unholdCall(String callId) {
+        mHandler.obtainMessage(MSG_UNHOLD_CALL, callId).sendToTarget();
     }
 
     /** {@inheritDoc} */
     @Override
-    public void mute(final boolean shouldMute) {
-        mHandler.post(new Runnable() {
-            @Override public void run() {
-                mCallsManager.mute(shouldMute);
-            }
-        });
+    public void mute(boolean shouldMute) {
+        mHandler.obtainMessage(MSG_MUTE, shouldMute ? 1 : 0, 0).sendToTarget();
     }
 
     /** {@inheritDoc} */
     @Override
-    public void setAudioRoute(final int route) {
-        mHandler.post(new Runnable() {
-            @Override public void run() {
-                mCallsManager.setAudioRoute(route);
-            }
-        });
+    public void setAudioRoute(int route) {
+        mHandler.obtainMessage(MSG_SET_AUDIO_ROUTE, route, 0).sendToTarget();
     }
 }