DO NOT MERGE. Port "respond via SMS message" feature to new Telecomm. (2/4)

Bug: 15275904
Bug: 15196474
Change-Id: I3e2ee62b3e32ad5715457fee1b0e714f88ecea8e
diff --git a/src/com/android/telecomm/InCallAdapter.java b/src/com/android/telecomm/InCallAdapter.java
index 7ae12ab..7937e95 100644
--- a/src/com/android/telecomm/InCallAdapter.java
+++ b/src/com/android/telecomm/InCallAdapter.java
@@ -45,54 +45,111 @@
     private final class InCallAdapterHandler extends Handler {
         @Override
         public void handleMessage(Message msg) {
-            Call call = null;
-            if (msg.obj != null) {
-                call = mCallIdMapper.getCall(msg.obj);
-                if (call == null) {
-                    Log.w(this, "Unknown call id: %s, msg: %d", msg.obj, msg.what);
-                    return;
-                }
-            }
-
+            Call call;
             switch (msg.what) {
                 case MSG_ANSWER_CALL:
-                    mCallsManager.answerCall(call);
+                    call = mCallIdMapper.getCall(msg.obj);
+                    if (call != null) {
+                        mCallsManager.answerCall(call);
+                    } else {
+                        Log.w(this, "answerCall, unknown call id: %s", msg.obj);
+                    }
                     break;
                 case MSG_REJECT_CALL:
-                    mCallsManager.rejectCall(call);
+                    SomeArgs args = (SomeArgs) msg.obj;
+                    try {
+                        call = mCallIdMapper.getCall(args.arg1);
+                        boolean rejectWithMessage = args.argi1 == 1;
+                        String textMessage = (String) args.arg2;
+                        if (call != null) {
+                            mCallsManager.rejectCall(call, rejectWithMessage, textMessage);
+                        } else {
+                            Log.w(this, "setRingback, unknown call id: %s", args.arg1);
+                        }
+                    } finally {
+                        args.recycle();
+                    }
                     break;
                 case MSG_PLAY_DTMF_TONE:
-                    mCallsManager.playDtmfTone(call, (char) msg.arg1);
+                    call = mCallIdMapper.getCall(msg.obj);
+                    if (call != null) {
+                        mCallsManager.playDtmfTone(call, (char) msg.arg1);
+                    } else {
+                        Log.w(this, "playDtmfTone, unknown call id: %s", msg.obj);
+                    }
                     break;
                 case MSG_STOP_DTMF_TONE:
-                    mCallsManager.stopDtmfTone(call);
+                    call = mCallIdMapper.getCall(msg.obj);
+                    if (call != null) {
+                        mCallsManager.stopDtmfTone(call);
+                    } else {
+                        Log.w(this, "stopDtmfTone, unknown call id: %s", msg.obj);
+                    }
                     break;
                 case MSG_POST_DIAL_CONTINUE:
+                    call = mCallIdMapper.getCall(msg.obj);
                     mCallsManager.postDialContinue(call, msg.arg1 == 1);
+                    call = mCallIdMapper.getCall(msg.obj);
+                    if (call != null) {
+                        mCallsManager.postDialContinue(call, msg.arg1 == 1);
+                    } else {
+                        Log.w(this, "postDialContinue, unknown call id: %s", msg.obj);
+                    }
                     break;
                 case MSG_DISCONNECT_CALL:
-                    mCallsManager.disconnectCall(call);
+                    call = mCallIdMapper.getCall(msg.obj);
+                    if (call != null) {
+                        mCallsManager.disconnectCall(call);
+                    } else {
+                        Log.w(this, "disconnectCall, unknown call id: %s", msg.obj);
+                    }
                     break;
                 case MSG_HOLD_CALL:
-                    mCallsManager.holdCall(call);
+                    call = mCallIdMapper.getCall(msg.obj);
+                    if (call != null) {
+                        mCallsManager.holdCall(call);
+                    } else {
+                        Log.w(this, "holdCall, unknown call id: %s", msg.obj);
+                    }
                     break;
                 case MSG_UNHOLD_CALL:
-                    mCallsManager.unholdCall(call);
+                    call = mCallIdMapper.getCall(msg.obj);
+                    if (call != null) {
+                        mCallsManager.unholdCall(call);
+                    } else {
+                        Log.w(this, "unholdCall, unknown call id: %s", msg.obj);
+                    }
                     break;
                 case MSG_HANDOFF_CALL:
-                    mCallsManager.startHandoffForCall(call);
+                    call = mCallIdMapper.getCall(msg.obj);
+                    if (call != null) {
+                        mCallsManager.startHandoffForCall(call);
+                    } else {
+                        Log.w(this, "startHandoffForCall, unknown call id: %s", msg.obj);
+                    }
                     break;
                 case MSG_MUTE:
-                    mCallsManager.mute(msg.arg1 == 1 ? true : false);
+                    mCallsManager.mute(msg.arg1 == 1);
                     break;
                 case MSG_SET_AUDIO_ROUTE:
                     mCallsManager.setAudioRoute(msg.arg1);
                     break;
                 case MSG_CONFERENCE:
-                    mCallsManager.conference(call);
+                    call = mCallIdMapper.getCall(msg.obj);
+                    if (call != null) {
+                        mCallsManager.conference(call);
+                    } else {
+                        Log.w(this, "conference, unknown call id: %s", msg.obj);
+                    }
+
                     break;
                 case MSG_SPLIT_FROM_CONFERENCE:
-                    call.splitFromConference();
+                    call = mCallIdMapper.getCall(msg.obj);
+                    if (call != null) {
+                        call.splitFromConference();
+                    } else {
+                        Log.w(this, "splitFromConference, unknown call id: %s", msg.obj);
+                    }
                     break;
             }
         }
@@ -119,10 +176,14 @@
 
     /** {@inheritDoc} */
     @Override
-    public void rejectCall(String callId) {
-        Log.d(this, "rejectCall(%s)", callId);
+    public void rejectCall(String callId, boolean rejectWithMessage, String textMessage) {
+        Log.d(this, "rejectCall(%s,%b,%s)", callId, rejectWithMessage, textMessage);
         mCallIdMapper.checkValidCallId(callId);
-        mHandler.obtainMessage(MSG_REJECT_CALL, callId).sendToTarget();
+        SomeArgs args = SomeArgs.obtain();
+        args.arg1 = callId;
+        args.argi1 = rejectWithMessage ? 1 : 0;
+        args.arg2 = textMessage;
+        mHandler.obtainMessage(MSG_REJECT_CALL, args).sendToTarget();
     }
 
     /** {@inheritDoc} */