Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb87b750 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Change to use API AudioManager.setCommunicationDevice to toggle speaker...

Merge "Change to use API AudioManager.setCommunicationDevice to toggle speaker on/off." into tm-dev am: 4eb53455 am: 546a4a06

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/services/Telecomm/+/17412728



Change-Id: If5871c512315d30b162c65a9ab679a19b1add9c6
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 6f50480d 546a4a06
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -1640,8 +1640,23 @@ public class CallAudioRouteStateMachine extends StateMachine {

    private void setSpeakerphoneOn(boolean on) {
        Log.i(this, "turning speaker phone %s", on);
        mAudioManager.setSpeakerphoneOn(on);
        mStatusBarNotifier.notifySpeakerphone(on);
        AudioDeviceInfo speakerDevice = null;
        for (AudioDeviceInfo info : mAudioManager.getAvailableCommunicationDevices()) {
            if (info.getType() == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) {
                speakerDevice = info;
                break;
            }
        }
        boolean speakerOn = false;
        if (speakerDevice != null && on) {
            boolean result = mAudioManager.setCommunicationDevice(speakerDevice);
            if (result) {
                speakerOn = true;
            }
        } else {
            mAudioManager.clearCommunicationDevice();
        }
        mStatusBarNotifier.notifySpeakerphone(speakerOn);
    }

    private void setBluetoothOn(String address) {
+7 −3
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.IContentProvider;
import android.content.pm.PackageManager;
import android.media.AudioDeviceInfo;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Binder;
@@ -637,14 +638,17 @@ public class BasicCallTests extends TelecomSystemTest {
        mInCallServiceFixtureX.mInCallAdapter.setAudioRoute(CallAudioState.ROUTE_SPEAKER, null);
        waitForHandlerAction(mTelecomSystem.getCallsManager().getCallAudioManager()
                .getCallAudioRouteStateMachine().getHandler(), TEST_TIMEOUT);
        verify(audioManager, timeout(TEST_TIMEOUT))
                .setSpeakerphoneOn(true);
        ArgumentCaptor<AudioDeviceInfo> infoArgumentCaptor =
                ArgumentCaptor.forClass(AudioDeviceInfo.class);
        verify(audioManager, timeout(TEST_TIMEOUT)).setCommunicationDevice(
                infoArgumentCaptor.capture());
        assertEquals(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, infoArgumentCaptor.getValue().getType());
        mInCallServiceFixtureX.mInCallAdapter.setAudioRoute(CallAudioState.ROUTE_EARPIECE, null);
        waitForHandlerAction(mTelecomSystem.getCallsManager().getCallAudioManager()
                .getCallAudioRouteStateMachine().getHandler(), TEST_TIMEOUT);
        // setSpeakerPhoneOn(false) gets called once during the call initiation phase
        verify(audioManager, timeout(TEST_TIMEOUT).atLeast(1))
                .setSpeakerphoneOn(false);
                .clearCommunicationDevice();

        mConnectionServiceFixtureA.
                sendSetDisconnected(outgoing.mConnectionId, DisconnectCause.REMOTE);
+5 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioDeviceInfo;
import android.media.AudioManager;
import android.media.IAudioService;
import android.os.HandlerThread;
@@ -562,7 +563,10 @@ public class CallAudioRouteStateMachineTest extends TelecomTestCase {
        // Make sure that we've successfully switched to the active speaker route and that we've
        // called setSpeakerOn
        assertTrue(stateMachine.isInActiveState());
        verify(mockAudioManager).setSpeakerphoneOn(true);
        ArgumentCaptor<AudioDeviceInfo> infoArgumentCaptor = ArgumentCaptor.forClass(
                AudioDeviceInfo.class);
        verify(mockAudioManager).setCommunicationDevice(infoArgumentCaptor.capture());
        assertEquals(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, infoArgumentCaptor.getValue().getType());
    }

    @SmallTest
+12 −3
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static org.mockito.ArgumentMatchers.same;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.verify;
@@ -30,6 +31,7 @@ import static org.mockito.Mockito.when;

import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.media.AudioDeviceInfo;
import android.media.AudioManager;
import android.media.IAudioService;
import android.os.Handler;
@@ -325,11 +327,18 @@ public class CallAudioRouteTransitionTests extends TelecomTestCase {

        switch (mParams.speakerInteraction) {
            case NONE:
                verify(mockAudioManager, never()).setSpeakerphoneOn(any(Boolean.class));
                verify(mockAudioManager, never()).setCommunicationDevice(
                        any(AudioDeviceInfo.class));
                break;
            case ON:
                ArgumentCaptor<AudioDeviceInfo> infoArgumentCaptor = ArgumentCaptor.forClass(
                        AudioDeviceInfo.class);
                verify(mockAudioManager).setCommunicationDevice(infoArgumentCaptor.capture());
                assertEquals(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER,
                        infoArgumentCaptor.getValue().getType());
                break;
            case ON: // fall through
            case OFF:
                verify(mockAudioManager).setSpeakerphoneOn(mParams.speakerInteraction == ON);
                verify(mockAudioManager).clearCommunicationDevice();
                break;
            case OPTIONAL:
                // optional, don't test