Merge "Stay in MODE_CALL_SCREENING during SIMULATED_RINGING" into rvc-dev
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 8381107..6f1d572 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -20,7 +20,7 @@
     <string name="userCallActivityLabel" product="default" msgid="3605391260292846248">"Telefon"</string>
     <string name="unknown" msgid="6993977514360123431">"Nepoznato"</string>
     <string name="notification_missedCallTitle" msgid="5060387047205532974">"Propušten poziv"</string>
-    <string name="notification_missedWorkCallTitle" msgid="6965463282259034953">"Propušten poziv za Work"</string>
+    <string name="notification_missedWorkCallTitle" msgid="6965463282259034953">"Propušten poslovni poziv"</string>
     <string name="notification_missedCallsTitle" msgid="3910479625507893809">"Propušteni pozivi"</string>
     <string name="notification_missedCallsMsg" msgid="5055782736170916682">"Broj propuštenih poziva: <xliff:g id="NUM_MISSED_CALLS">%s</xliff:g>"</string>
     <string name="notification_missedCallTicker" msgid="6731461957487087769">"Propušten poziv od: <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index bcbbf9a..3750830 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -81,13 +81,13 @@
     <string name="blocked_numbers_number_already_blocked_message" msgid="2301270825735665458">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> قبلاً مسدود شده است."</string>
     <string name="toast_personal_call_msg" msgid="5817631570381795610">"استفاده از شماره‌گیر شخصی برای گرفتن تماس"</string>
     <string name="notification_incoming_call" msgid="1233481138362230894">"<xliff:g id="CALL_VIA">%1$s</xliff:g> تماس از <xliff:g id="CALL_FROM">%2$s</xliff:g>"</string>
-    <string name="notification_incoming_video_call" msgid="5795968314037063900">"<xliff:g id="CALL_VIA">%1$s</xliff:g> تماس ویدیویی از <xliff:g id="CALL_FROM">%2$s</xliff:g>"</string>
+    <string name="notification_incoming_video_call" msgid="5795968314037063900">"<xliff:g id="CALL_VIA">%1$s</xliff:g> تماس تصویری از <xliff:g id="CALL_FROM">%2$s</xliff:g>"</string>
     <string name="answering_ends_other_call" msgid="8653544281903986641">"پاسخ‌گویی به تماس <xliff:g id="CALL_VIA">%1$s</xliff:g> پایان می‌دهد"</string>
     <string name="answering_ends_other_calls" msgid="3702302838456922535">"پاسخ‌گویی به تماس‌های <xliff:g id="CALL_VIA">%1$s</xliff:g> شما پاسخ می‌دهد"</string>
-    <string name="answering_ends_other_video_call" msgid="8572022039304239958">"پاسخ‌گویی به تماس ویدیویی <xliff:g id="CALL_VIA">%1$s</xliff:g> شما پایان می‌دهد"</string>
+    <string name="answering_ends_other_video_call" msgid="8572022039304239958">"پاسخ‌گویی به تماس تصویری <xliff:g id="CALL_VIA">%1$s</xliff:g> شما پایان می‌دهد"</string>
     <string name="answering_ends_other_managed_call" msgid="4031778317409881805">"پاسخ‌گویی به تماس درحال انجامتان پایان می‌دهد"</string>
     <string name="answering_ends_other_managed_calls" msgid="3974069768615307659">"پاسخ‌گویی به تماس‌های درحال انجامتان پایان می‌دهد"</string>
-    <string name="answering_ends_other_managed_video_call" msgid="1988508241432031327">"پاسخ‌گویی به تماس ویدیویی درحال انجامتان پایان می‌دهد"</string>
+    <string name="answering_ends_other_managed_video_call" msgid="1988508241432031327">"پاسخ‌گویی به تماس تصویری درحال انجامتان پایان می‌دهد"</string>
     <string name="answer_incoming_call" msgid="2045888814782215326">"پاسخ‌گویی"</string>
     <string name="decline_incoming_call" msgid="922147089348451310">"نپذیرفتن"</string>
     <string name="cant_call_due_to_no_supported_service" msgid="1635626384149947077">"به‌دلیل اینکه هیچ حساب تماسی وجود ندارد که از این نوع تماس پشتیبانی کند، تماس برقرار نشد."</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 5611d3c..e8e0141 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -30,9 +30,9 @@
     <string name="notification_disconnectedCall_body" msgid="600491714584417536">"A chamada para <xliff:g id="CALLER">%s</xliff:g> foi desligada porque foi efetuada uma chamada de emergência."</string>
     <string name="notification_disconnectedCall_generic_body" msgid="5282765206349184853">"A chamada foi desligada porque foi efetuada uma chamada de emergência."</string>
     <string name="notification_audioProcessing_title" msgid="1619035039880584575">"Cham. segundo plano"</string>
-    <string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> colocou uma chamada em segundo plano. Esta aplicação pode estar a aceder e a reproduzir áudio sobre a chamada."</string>
-    <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"Aplicação Telefone com falha"</string>
-    <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Ocorreu uma falha na sua aplicação telefone <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>. A sua chamada foi continuada através da aplicação telefone incluída com o dispositivo."</string>
+    <string name="notification_audioProcessing_body" msgid="6397005913770420388">"<xliff:g id="AUDIO_PROCESSING_APP_NAME">%s</xliff:g> colocou uma chamada em segundo plano. Esta app pode estar a aceder e a reproduzir áudio sobre a chamada."</string>
+    <string name="notification_crashedInCallService_title" msgid="7440244344965656743">"app Telefone com falha"</string>
+    <string name="notification_crashedInCallService_body" msgid="7821729360036047995">"Ocorreu uma falha na sua app telefone <xliff:g id="IN_CALL_SERVICE_APP_NAME">%s</xliff:g>. A sua chamada foi continuada através da app telefone incluída com o dispositivo."</string>
     <string name="accessibility_call_muted" msgid="2968461092554300779">"Chamada sem som."</string>
     <string name="accessibility_speakerphone_enabled" msgid="555386652061614267">"Alta voz ativada."</string>
     <string name="respond_via_sms_canned_response_1" msgid="6332561460870382561">"Não posso falar agora. Que se passa?"</string>
@@ -47,19 +47,19 @@
     <string name="respond_via_sms_failure_format" msgid="5198680980054596391">"Falha ao enviar a mensagem para <xliff:g id="PHONE_NUMBER">%s</xliff:g>."</string>
     <string name="enable_account_preference_title" msgid="6949224486748457976">"Contas de chamadas"</string>
     <string name="outgoing_call_not_allowed_user_restriction" msgid="3424338207838851646">"Apenas são permitidas chamadas de emergência."</string>
-    <string name="outgoing_call_not_allowed_no_permission" msgid="8590468836581488679">"Esta aplicação não pode fazer chamadas sem a autorização do telefone."</string>
+    <string name="outgoing_call_not_allowed_no_permission" msgid="8590468836581488679">"Esta app não pode fazer chamadas sem a autorização do telefone."</string>
     <string name="outgoing_call_error_no_phone_number_supplied" msgid="7665135102566099778">"Para telefonar, introduza um número válido."</string>
     <string name="duplicate_video_call_not_allowed" msgid="5754746140185781159">"Não é possível adicionar a chamada neste momento."</string>
     <string name="no_vm_number" msgid="2179959110602180844">"Número do correio de voz em falta"</string>
     <string name="no_vm_number_msg" msgid="1339245731058529388">"Não existe um número de correio de voz armazenado no cartão SIM."</string>
     <string name="add_vm_number_str" msgid="5179510133063168998">"Adicionar número"</string>
-    <string name="change_default_dialer_dialog_title" msgid="5861469279421508060">"Predefinir <xliff:g id="NEW_APP">%s</xliff:g> como a sua aplicação Telefone?"</string>
+    <string name="change_default_dialer_dialog_title" msgid="5861469279421508060">"Predefinir <xliff:g id="NEW_APP">%s</xliff:g> como a sua app Telefone?"</string>
     <string name="change_default_dialer_dialog_affirmative" msgid="8604665314757739550">"Predefinir"</string>
     <string name="change_default_dialer_dialog_negative" msgid="8648669840052697821">"Cancelar"</string>
-    <string name="change_default_dialer_warning_message" msgid="8461963987376916114">"A aplicação <xliff:g id="NEW_APP">%s</xliff:g> poderá efetuar chamadas e controlar todos os aspetos das mesmas. Apenas as aplicações em que confia devem ser escolhidas como a aplicação de telefone predefinida."</string>
-    <string name="change_default_call_screening_dialog_title" msgid="5365787219927262408">"Predefinir <xliff:g id="NEW_APP">%s</xliff:g> como a sua aplicação Telefone?"</string>
+    <string name="change_default_dialer_warning_message" msgid="8461963987376916114">"A app <xliff:g id="NEW_APP">%s</xliff:g> poderá efetuar chamadas e controlar todos os aspetos das mesmas. Apenas as aplicações em que confia devem ser escolhidas como a app de telefone predefinida."</string>
+    <string name="change_default_call_screening_dialog_title" msgid="5365787219927262408">"Predefinir <xliff:g id="NEW_APP">%s</xliff:g> como a sua app Telefone?"</string>
     <string name="change_default_call_screening_warning_message_for_disable_old_app" msgid="2039830033533243164">"<xliff:g id="OLD_APP">%s</xliff:g> deixará de poder filtrar as chamadas."</string>
-    <string name="change_default_call_screening_warning_message" msgid="9020537562292754269">"<xliff:g id="NEW_APP">%s</xliff:g> poderá ver informações sobre os autores das chamadas que não se encontrem nos seus contactos e poderá bloquear estas chamadas. Apenas deve predefinir como aplicação de filtro de chamadas as aplicações nas quais confia."</string>
+    <string name="change_default_call_screening_warning_message" msgid="9020537562292754269">"<xliff:g id="NEW_APP">%s</xliff:g> poderá ver informações sobre os autores das chamadas que não se encontrem nos seus contactos e poderá bloquear estas chamadas. Apenas deve predefinir como app de filtro de chamadas as aplicações nas quais confia."</string>
     <string name="change_default_call_screening_dialog_affirmative" msgid="7162433828280058647">"Predefinir"</string>
     <string name="change_default_call_screening_dialog_negative" msgid="1839266125623106342">"Cancelar"</string>
     <string name="blocked_numbers" msgid="8322134197039865180">"Números bloqueados"</string>
@@ -93,18 +93,18 @@
     <string name="cant_call_due_to_no_supported_service" msgid="1635626384149947077">"Não é possível efetuar a chamada porque não existem contas de chamadas que suportem chamadas deste tipo."</string>
     <string name="cant_call_due_to_ongoing_call" msgid="8004235328451385493">"Não é possível efetuar a chamada devido à sua chamada do <xliff:g id="OTHER_CALL">%1$s</xliff:g>."</string>
     <string name="cant_call_due_to_ongoing_calls" msgid="6379163795277824868">"Não é possível efetuar a chamada devido às suas chamadas do <xliff:g id="OTHER_CALL">%1$s</xliff:g>."</string>
-    <string name="cant_call_due_to_ongoing_unknown_call" msgid="8243532328969433172">"Não é possível efetuar a chamada devido a uma chamada noutra aplicação."</string>
+    <string name="cant_call_due_to_ongoing_unknown_call" msgid="8243532328969433172">"Não é possível efetuar a chamada devido a uma chamada noutra app."</string>
     <string name="notification_channel_incoming_call" msgid="5245550964701715662">"Chamadas recebidas"</string>
     <string name="notification_channel_missed_call" msgid="7168893015283909012">"Chamadas não atendidas"</string>
     <string name="notification_channel_call_blocking" msgid="2028807677868598710">"Bloqueio de chamadas"</string>
     <string name="notification_channel_background_calls" msgid="7785659903711350506">"Chamadas em segundo plano"</string>
     <string name="notification_channel_disconnected_calls" msgid="8228636543997645757">"Chamadas desligadas"</string>
     <string name="notification_channel_in_call_service_crash" msgid="7313237519166984267">"Apps Telefone com falhas"</string>
-    <string name="alert_outgoing_call" msgid="5319895109298927431">"Ao efetuar esta chamada, irá terminar a chamada na aplicação <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
+    <string name="alert_outgoing_call" msgid="5319895109298927431">"Ao efetuar esta chamada, irá terminar a chamada na app <xliff:g id="OTHER_APP">%1$s</xliff:g>."</string>
     <string name="alert_redirect_outgoing_call_or_not" msgid="665409645789521636">"Escolha como pretende efetuar esta chamada"</string>
     <string name="alert_place_outgoing_call_with_redirection" msgid="5221065030959024121">"Redirecionar chamada através de <xliff:g id="OTHER_APP">%1$s</xliff:g>"</string>
     <string name="alert_place_unredirect_outgoing_call" msgid="2467608535225764006">"Ligar com o meu número de telefone"</string>
-    <string name="alert_redirect_outgoing_call_timeout" msgid="5568101425637373060">"Não é possível efetuar uma chamada através da aplicação <xliff:g id="OTHER_APP">%1$s</xliff:g>. Experimente utilizar uma aplicação de redirecionamento de chamadas diferente ou contactar o programador para obter ajuda."</string>
+    <string name="alert_redirect_outgoing_call_timeout" msgid="5568101425637373060">"Não é possível efetuar uma chamada através da app <xliff:g id="OTHER_APP">%1$s</xliff:g>. Experimente utilizar uma app de redirecionamento de chamadas diferente ou contactar o programador para obter ajuda."</string>
     <string name="phone_settings_call_blocking_txt" msgid="7311523114822507178">"Bloqueio de chamadas"</string>
     <string name="phone_settings_number_not_in_contact_txt" msgid="2602249106007265757">"Números não incluídos nos Contactos"</string>
     <string name="phone_settings_number_not_in_contact_summary_txt" msgid="963327038085718969">"Bloquear números que não estejam na sua lista de Contactos"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 5291202..613cd2b 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -20,7 +20,7 @@
     <string name="userCallActivityLabel" product="default" msgid="3605391260292846248">"Телефон"</string>
     <string name="unknown" msgid="6993977514360123431">"Непознато"</string>
     <string name="notification_missedCallTitle" msgid="5060387047205532974">"Пропуштен позив"</string>
-    <string name="notification_missedWorkCallTitle" msgid="6965463282259034953">"Пропуштен позив за Work"</string>
+    <string name="notification_missedWorkCallTitle" msgid="6965463282259034953">"Пропуштен пословни позив"</string>
     <string name="notification_missedCallsTitle" msgid="3910479625507893809">"Пропуштени позиви"</string>
     <string name="notification_missedCallsMsg" msgid="5055782736170916682">"Број пропуштених позива: <xliff:g id="NUM_MISSED_CALLS">%s</xliff:g>"</string>
     <string name="notification_missedCallTicker" msgid="6731461957487087769">"Пропуштен позив од: <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 0119405..8168437 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -112,7 +112,7 @@
     <string name="phone_settings_private_num_summary_txt" msgid="6755758240544021037">"บล็อกผู้โทรที่ไม่เปิดเผยหมายเลขโทรศัพท์"</string>
     <string name="phone_settings_payphone_txt" msgid="5003987966052543965">"โทรศัพท์สาธารณะ"</string>
     <string name="phone_settings_payphone_summary_txt" msgid="3936631076065563665">"บล็อกสายจากโทรศัพท์สาธารณะ"</string>
-    <string name="phone_settings_unknown_txt" msgid="3577926178354772728">"ไม่ทราบ"</string>
+    <string name="phone_settings_unknown_txt" msgid="3577926178354772728">"ไม่รู้จัก"</string>
     <string name="phone_settings_unknown_summary_txt" msgid="5446657192535779645">"บล็อกสายจากผู้โทรที่ไม่สามารถระบุได้"</string>
     <string name="phone_strings_call_blocking_turned_off_notification_title_txt" msgid="2895809176537908791">"การบล็อกสาย"</string>
     <string name="phone_strings_call_blocking_turned_off_notification_text_txt" msgid="1713632946174016619">"ปิดใช้การบล็อกสาย"</string>
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index c170599..491aed3 100755
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -821,7 +821,7 @@
         return String.format(Locale.US, "[Call id=%s, state=%s, tpac=%s, cmgr=%s, handle=%s, "
                         + "vidst=%s, childs(%d), has_parent(%b), cap=%s, prop=%s]",
                 mId,
-                CallState.toString(mState),
+                CallState.toString(getParcelableCallState()),
                 getTargetPhoneAccount(),
                 getConnectionManagerPhoneAccount(),
                 Log.piiHandle(mHandle),
@@ -964,6 +964,20 @@
     }
 
     /**
+     * Similar to {@link #getState()}, except will return {@link CallState#DISCONNECTING} if the
+     * call is locally disconnecting.  This is the call state which is reported to the
+     * {@link android.telecom.InCallService}s when a call is parcelled.
+     * @return The parcelable call state.
+     */
+    public int getParcelableCallState() {
+        if (isLocallyDisconnecting() &&
+                (mState != android.telecom.Call.STATE_DISCONNECTED)) {
+            return CallState.DISCONNECTING;
+        }
+        return mState;
+    }
+
+    /**
      * Determines if this {@link Call} can receive call focus via the
      * {@link ConnectionServiceFocusManager}.
      * Only top-level calls and non-external calls are eligible.
diff --git a/src/com/android/server/telecom/CallAudioManager.java b/src/com/android/server/telecom/CallAudioManager.java
index b370815..dac5b4e 100644
--- a/src/com/android/server/telecom/CallAudioManager.java
+++ b/src/com/android/server/telecom/CallAudioManager.java
@@ -423,7 +423,7 @@
                         CallAudioRouteStateMachine.NO_INCLUDE_BLUETOOTH_IN_BASELINE);
                 return;
             default:
-                Log.wtf(this, "Invalid route specified: %d", route);
+                Log.w(this, "InCallService requested an invalid audio route: %d", route);
         }
     }
 
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index f2e8bc3..8fac4db 100755
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -2549,7 +2549,11 @@
             Log.w(this, "Unknown call (%s) asked to disconnect", call);
         } else {
             mLocallyDisconnectingCalls.add(call);
+            int previousState = call.getState();
             call.disconnect();
+            for (CallsManagerListener listener : mListeners) {
+                listener.onCallStateChanged(call, previousState, call.getState());
+            }
             // Cancel any of the outgoing call futures if they're still around.
             if (mPendingCallConfirm != null && !mPendingCallConfirm.isDone()) {
                 mPendingCallConfirm.complete(null);
@@ -3524,7 +3528,8 @@
             return;
         }
         int oldState = call.getState();
-        Log.i(this, "setCallState %s -> %s, call: %s", CallState.toString(oldState),
+        Log.i(this, "setCallState %s -> %s, call: %s",
+                CallState.toString(call.getParcelableCallState()),
                 CallState.toString(newState), call);
         if (newState != oldState) {
             // If the call switches to held state while a DTMF tone is playing, stop the tone to
diff --git a/src/com/android/server/telecom/ParcelableCallUtils.java b/src/com/android/server/telecom/ParcelableCallUtils.java
index 9638fee..5c821a4 100644
--- a/src/com/android/server/telecom/ParcelableCallUtils.java
+++ b/src/com/android/server/telecom/ParcelableCallUtils.java
@@ -381,7 +381,7 @@
 
     private static int getParcelableState(Call call, boolean supportsExternalCalls) {
         int state = CallState.NEW;
-        switch (call.getState()) {
+        switch (call.getParcelableCallState()) {
             case CallState.ABORTED:
             case CallState.DISCONNECTED:
                 state = android.telecom.Call.STATE_DISCONNECTED;
@@ -433,12 +433,6 @@
                 break;
         }
 
-        // If we are marked as 'locally disconnecting' then mark ourselves as disconnecting instead.
-        // Unless we're disconnect*ED*, in which case leave it at that.
-        if (call.isLocallyDisconnecting() &&
-                (state != android.telecom.Call.STATE_DISCONNECTED)) {
-            state = android.telecom.Call.STATE_DISCONNECTING;
-        }
         return state;
     }
 
diff --git a/tests/src/com/android/server/telecom/tests/BasicCallTests.java b/tests/src/com/android/server/telecom/tests/BasicCallTests.java
index 8364869..6fd53eb 100644
--- a/tests/src/com/android/server/telecom/tests/BasicCallTests.java
+++ b/tests/src/com/android/server/telecom/tests/BasicCallTests.java
@@ -103,8 +103,10 @@
                 mPhoneAccountA0.getAccountHandle(), mConnectionServiceFixtureA);
 
         mInCallServiceFixtureX.mInCallAdapter.disconnectCall(ids.mCallId);
-        assertEquals(Call.STATE_ACTIVE, mInCallServiceFixtureX.getCall(ids.mCallId).getState());
-        assertEquals(Call.STATE_ACTIVE, mInCallServiceFixtureY.getCall(ids.mCallId).getState());
+        assertEquals(Call.STATE_DISCONNECTING,
+                mInCallServiceFixtureX.getCall(ids.mCallId).getState());
+        assertEquals(Call.STATE_DISCONNECTING,
+                mInCallServiceFixtureY.getCall(ids.mCallId).getState());
 
         when(mClockProxy.currentTimeMillis()).thenReturn(TEST_DISCONNECT_TIME);
         when(mClockProxy.elapsedRealtime()).thenReturn(TEST_DISCONNECT_ELAPSED_TIME);
@@ -259,12 +261,15 @@
         IdPair ids = startAndMakeActiveIncomingCall("650-555-1212",
                 mPhoneAccountA0.getAccountHandle(), mConnectionServiceFixtureA);
         mInCallServiceFixtureX.mInCallAdapter.disconnectCall(ids.mCallId);
-        assertEquals(Call.STATE_ACTIVE, mInCallServiceFixtureX.getCall(ids.mCallId).getState());
-        assertEquals(Call.STATE_ACTIVE, mInCallServiceFixtureY.getCall(ids.mCallId).getState());
+        assertEquals(Call.STATE_DISCONNECTING,
+                mInCallServiceFixtureX.getCall(ids.mCallId).getState());
+        assertEquals(Call.STATE_DISCONNECTING,
+                mInCallServiceFixtureY.getCall(ids.mCallId).getState());
 
         when(mClockProxy.currentTimeMillis()).thenReturn(TEST_DISCONNECT_TIME);
         when(mClockProxy.elapsedRealtime()).thenReturn(TEST_DISCONNECT_ELAPSED_TIME);
         mConnectionServiceFixtureA.sendSetDisconnected(ids.mConnectionId, DisconnectCause.LOCAL);
+
         assertEquals(Call.STATE_DISCONNECTED,
                 mInCallServiceFixtureX.getCall(ids.mCallId).getState());
         assertEquals(Call.STATE_DISCONNECTED,
diff --git a/tests/src/com/android/server/telecom/tests/CallsManagerTest.java b/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
index e9794e3..9e7680a 100644
--- a/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallsManagerTest.java
@@ -66,6 +66,7 @@
 import com.android.server.telecom.CallState;
 import com.android.server.telecom.CallerInfoLookupHelper;
 import com.android.server.telecom.CallsManager;
+import com.android.server.telecom.CallsManagerListenerBase;
 import com.android.server.telecom.ClockProxy;
 import com.android.server.telecom.ConnectionServiceFocusManager;
 import com.android.server.telecom.ConnectionServiceFocusManager.ConnectionServiceFocusManagerFactory;
@@ -1390,6 +1391,26 @@
         verify(heldCall).unhold(any());
     }
 
+    /**
+     * Verifies we inform the InCallService on local disconnect.
+     * @throws Exception
+     */
+    @SmallTest
+    @Test
+    public void testRequestDisconnect() throws Exception {
+        CallsManager.CallsManagerListener listener = mock(CallsManager.CallsManagerListener.class);
+        mCallsManager.addListener(listener);
+
+        Call ongoingCall = addSpyCall(CallState.ACTIVE);
+        mCallsManager.addCall(ongoingCall);
+
+        mCallsManager.disconnectCall(ongoingCall);
+        // Seems odd, but ultimately the call state is still active even though it is locally
+        // disconnecting.
+        verify(listener).onCallStateChanged(eq(ongoingCall), eq(CallState.ACTIVE),
+                eq(CallState.ACTIVE));
+    }
+
     private Call addSpyCall() {
         return addSpyCall(SIM_2_HANDLE, CallState.ACTIVE);
     }