diff --git a/src/com/android/telecomm/CallServiceAdapter.java b/src/com/android/telecomm/CallServiceAdapter.java
index 6308567..9a9d0db 100644
--- a/src/com/android/telecomm/CallServiceAdapter.java
+++ b/src/com/android/telecomm/CallServiceAdapter.java
@@ -20,9 +20,13 @@
 import android.os.Looper;
 import android.telecomm.CallInfo;
 import android.telecomm.ICallServiceAdapter;
+import android.util.Log;
 
+import com.google.android.collect.Sets;
 import com.google.common.base.Strings;
 
+import java.util.Set;
+
 /**
  * Used by call services in order to update state and control calls while the call service is bound
  * to Telecomm. Each call service is given its own instance for the lifetime of the binding between
@@ -34,6 +38,7 @@
  * TODO(santoscordon): Do we need Binder.clear/restoreCallingIdentity() in the service methods?
  */
 public final class CallServiceAdapter extends ICallServiceAdapter.Stub {
+    private static final String TAG = CallServiceAdapter.class.getSimpleName();
 
     private final CallsManager mCallsManager;
 
@@ -42,6 +47,14 @@
     /** Used to run code (e.g. messages, Runnables) on the main (UI) thread. */
     private final Handler mHandler = new Handler(Looper.getMainLooper());
 
+    /** The list of unconfirmed incoming call IDs. Contains only IDs for incoming calls which are
+     * pending confirmation from the call service. Entries are added by the call service when a
+     * confirmation request is sent and removed when the confirmation is received or it times out.
+     * See {@link IncomingCallsManager} for more information about the incoming sequence and its
+     * timeouts.
+     */
+    private final Set<String> mUnconfirmedIncomingCallIds = Sets.newHashSet();
+
     /**
      * Persists the specified parameters.
      */
@@ -51,20 +64,23 @@
     }
 
     /** {@inheritDoc} */
-    @Override public void getNextCallId() {
-        // TODO(santoscordon): needs response object.
-    }
-
-    /** {@inheritDoc} */
     @Override public void setCompatibleWith(String callId, boolean isCompatible) {
         // TODO(santoscordon): fill in.
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override public void handleIncomingCall(CallInfo callInfo) {
-        // TODO(santoscordon): fill in.
+    /** {@inheritDoc} */
+    @Override public void handleConfirmedIncomingCall(final CallInfo callInfo) {
+        checkValidCallId(callInfo.getId());
+        mHandler.post(new Runnable() {
+            @Override public void run() {
+                if (mUnconfirmedIncomingCallIds.remove(callInfo.getId())) {
+                    // TODO(santoscordon): Uncomment when ready.
+                    // mIncomingCallsManager.handleSuccessfulIncomingCall(callInfo);
+                } else {
+                    Log.wtf(TAG, "Call service confirming unknown incoming call " + callInfo);
+                }
+            }
+        });
     }
 
     /** {@inheritDoc} */
@@ -128,13 +144,32 @@
     }
 
     /**
+     * Adds a call ID to the list of unconfirmed incoming call IDs. Only calls with call IDs in the
+     * list will be handled by {@link #handleConfirmedIncomingCall}.
+     *
+     * @param callId The ID of the call.
+     */
+    void addUnconfirmedIncomingCallId(String callId) {
+        mUnconfirmedIncomingCallIds.add(callId);
+    }
+
+    /**
+     * Removed a call ID from the list of unconfirmed incoming call IDs.
+     *
+     * @param callId The ID of the call.
+     */
+    void removeUnconfirmedIncomingCallId(String callId) {
+        mUnconfirmedIncomingCallIds.remove(callId);
+    }
+
+    /**
      * Throws an IllegalArgumentException if the specified call ID is invalid.
      *
      * @param callId The call ID to check.
      */
     private void checkValidCallId(String callId) {
         if (Strings.isNullOrEmpty(callId)) {
-            throw new IllegalArgumentException();
+            throw new IllegalArgumentException("Invalid call ID.");
         }
     }
 }
diff --git a/src/com/android/telecomm/CallServiceWrapper.java b/src/com/android/telecomm/CallServiceWrapper.java
index 74277c4..2ff1cfc 100644
--- a/src/com/android/telecomm/CallServiceWrapper.java
+++ b/src/com/android/telecomm/CallServiceWrapper.java
@@ -121,6 +121,32 @@
         }
     }
 
+    /** See {@link ICallService#confirmIncomingCall}. */
+    public void confirmIncomingCall(String callId, String callToken) {
+        try {
+            if (mServiceInterface == null) {
+                Log.wtf(TAG, "confirmIncomingCall() invoked while service in unbound.");
+            } else {
+                mAdapter.addUnconfirmedIncomingCallId(callId);
+                mServiceInterface.confirmIncomingCall(callId, callToken);
+            }
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to confirmIncomingCall for call " + callId, e);
+            mAdapter.removeUnconfirmedIncomingCallId(callId);
+        }
+    }
+
+    /**
+     * Cancels the an incoming call confirmation for the specified call ID.
+     * TODO(santoscordon): This method should be called by IncomingCallManager when the incoming
+     * call confirmation has failed.
+     *
+     * @param callId The ID of the call.
+     */
+    void cancelIncomingCall(String callId) {
+        mAdapter.removeUnconfirmedIncomingCallId(callId);
+    }
+
     /** {@inheritDoc} */
     @Override protected void setServiceInterface(IBinder binder) {
         mServiceInterface = ICallService.Stub.asInterface(binder);
diff --git a/tests/src/com/android/telecomm/testcallservice/TestCallService.java b/tests/src/com/android/telecomm/testcallservice/TestCallService.java
index a72997e..d392a79 100644
--- a/tests/src/com/android/telecomm/testcallservice/TestCallService.java
+++ b/tests/src/com/android/telecomm/testcallservice/TestCallService.java
@@ -31,6 +31,7 @@
 import android.os.RemoteException;
 import android.telecomm.CallInfo;
 import android.telecomm.CallService;
+import android.telecomm.CallState;
 import android.telecomm.ICallServiceAdapter;
 import android.text.TextUtils;
 import android.util.Log;
@@ -143,6 +144,22 @@
 
     /** {@inheritDoc} */
     @Override
+    public void confirmIncomingCall(String callId, String callToken) {
+        Log.i(TAG, "confirmIncomingCall(" + callId + ", " + callToken + ")");
+
+        // Use dummy number for testing incoming calls.
+        String handle = "5551234";
+
+        CallInfo callInfo = new CallInfo(callId, CallState.RINGING, handle);
+        try {
+            mCallsManagerAdapter.handleConfirmedIncomingCall(callInfo);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to handleConfirmedIncomingCall().", e);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
     public boolean onUnbind(Intent intent) {
         mMediaPlayer = null;
 
