Implement Connection.startActivityFromInCall in Telecomm

This CL adds plumbing to send the startActivityFromInCall
request from Connection to InCallUI.

Change-Id: I65119a89c925a93467d1b27304ffec9b088b172f
diff --git a/src/com/android/telecomm/ConnectionServiceWrapper.java b/src/com/android/telecomm/ConnectionServiceWrapper.java
index fb9d34c..eb2e0ac 100644
--- a/src/com/android/telecomm/ConnectionServiceWrapper.java
+++ b/src/com/android/telecomm/ConnectionServiceWrapper.java
@@ -16,6 +16,7 @@
 
 package com.android.telecomm;
 
+import android.app.PendingIntent;
 import android.content.ComponentName;
 import android.net.Uri;
 import android.os.Bundle;
@@ -77,6 +78,7 @@
     private static final int MSG_SET_HANDLE = 19;
     private static final int MSG_SET_CALLER_DISPLAY_NAME = 20;
     private static final int MSG_SET_VIDEO_STATE = 21;
+    private static final int MSG_START_ACTIVITY_FROM_IN_CALL = 22;
 
     private final Handler mHandler = new Handler() {
         @Override
@@ -171,17 +173,11 @@
                     }
                     break;
                 case MSG_SET_REQUESTING_RINGBACK: {
-                    SomeArgs args = (SomeArgs) msg.obj;
-                    try {
-                        call = mCallIdMapper.getCall(args.arg1);
-                        boolean ringback = (boolean) args.arg2;
-                        if (call != null) {
-                            call.setRequestingRingback(ringback);
-                        } else {
-                            //Log.w(this, "setRingback, unknown call id: %s", args.arg1);
-                        }
-                    } finally {
-                        args.recycle();
+                    call = mCallIdMapper.getCall(msg.obj);
+                    if (call != null) {
+                        call.setRequestingRingback(msg.arg1 == 1);
+                    } else {
+                        //Log.w(this, "setRingback, unknown call id: %s", args.arg1);
                     }
                     break;
                 }
@@ -315,6 +311,18 @@
                         call.setVideoState(msg.arg1);
                     }
                 }
+                case MSG_START_ACTIVITY_FROM_IN_CALL: {
+                    SomeArgs args = (SomeArgs) msg.obj;
+                    try {
+                        call = mCallIdMapper.getCall(args.arg1);
+                        if (call != null) {
+                            call.startActivityFromInCall((PendingIntent) args.arg2);
+                        }
+                    } finally {
+                        args.recycle();
+                    }
+                    break;
+                }
             }
         }
     };
@@ -400,10 +408,8 @@
         public void setRequestingRingback(String callId, boolean ringback) {
             logIncoming("setRequestingRingback %s %b", callId, ringback);
             mCallIdMapper.checkValidCallId(callId);
-            SomeArgs args = SomeArgs.obtain();
-            args.arg1 = callId;
-            args.arg2 = ringback;
-            mHandler.obtainMessage(MSG_SET_REQUESTING_RINGBACK, args).sendToTarget();
+            mHandler.obtainMessage(MSG_SET_REQUESTING_RINGBACK, ringback ? 1 : 0, 0, callId)
+                    .sendToTarget();
         }
 
         @Override
@@ -497,6 +503,16 @@
             args.argi1 = presentation;
             mHandler.obtainMessage(MSG_SET_CALLER_DISPLAY_NAME, args).sendToTarget();
         }
+
+        @Override
+        public void startActivityFromInCall(String callId, PendingIntent intent) {
+            logIncoming("startActivityFromInCall %s %s", callId, intent);
+            mCallIdMapper.checkValidCallId(callId);
+            SomeArgs args = SomeArgs.obtain();
+            args.arg1 = callId;
+            args.arg2 = intent;
+            mHandler.obtainMessage(MSG_START_ACTIVITY_FROM_IN_CALL, args).sendToTarget();
+        }
     }
 
     private final Adapter mAdapter = new Adapter();