1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.server.telecom.tests; 18 19 import static org.junit.Assert.assertFalse; 20 import static org.junit.Assert.assertTrue; 21 import static org.mockito.ArgumentMatchers.any; 22 import static org.mockito.ArgumentMatchers.anyInt; 23 import static org.mockito.Mockito.never; 24 import static org.mockito.Mockito.verify; 25 import static org.mockito.Mockito.when; 26 27 import android.test.suitebuilder.annotation.SmallTest; 28 29 import com.android.server.telecom.AsyncRingtonePlayer; 30 import com.android.server.telecom.CallAudioRoutePeripheralAdapter; 31 import com.android.server.telecom.CallAudioRouteStateMachine; 32 import com.android.server.telecom.DockManager; 33 import com.android.server.telecom.WiredHeadsetManager; 34 import com.android.server.telecom.bluetooth.BluetoothRouteManager; 35 36 import org.junit.After; 37 import org.junit.Before; 38 import org.junit.Test; 39 import org.junit.runner.RunWith; 40 import org.junit.runners.JUnit4; 41 import org.mockito.Mock; 42 43 @RunWith(JUnit4.class) 44 public class CallAudioRoutePeripheralAdapterTest extends TelecomTestCase { 45 CallAudioRoutePeripheralAdapter mAdapter; 46 47 @Mock private CallAudioRouteStateMachine mCallAudioRouteStateMachine; 48 @Mock private BluetoothRouteManager mBluetoothRouteManager; 49 @Mock private WiredHeadsetManager mWiredHeadsetManager; 50 @Mock private DockManager mDockManager; 51 @Mock private AsyncRingtonePlayer mRingtonePlayer; 52 53 @Override 54 @Before setUp()55 public void setUp() throws Exception { 56 super.setUp(); 57 58 mAdapter = new CallAudioRoutePeripheralAdapter( 59 mCallAudioRouteStateMachine, 60 mBluetoothRouteManager, 61 mWiredHeadsetManager, 62 mDockManager, 63 mRingtonePlayer); 64 } 65 66 @Override 67 @After tearDown()68 public void tearDown() throws Exception { 69 super.tearDown(); 70 } 71 72 @SmallTest 73 @Test testIsBluetoothAudioOn()74 public void testIsBluetoothAudioOn() { 75 when(mBluetoothRouteManager.isBluetoothAudioConnectedOrPending()).thenReturn(false); 76 assertFalse(mAdapter.isBluetoothAudioOn()); 77 78 when(mBluetoothRouteManager.isBluetoothAudioConnectedOrPending()).thenReturn(true); 79 assertTrue(mAdapter.isBluetoothAudioOn()); 80 } 81 82 @SmallTest 83 @Test testIsHearingAidDeviceOn()84 public void testIsHearingAidDeviceOn() { 85 when(mBluetoothRouteManager.isCachedHearingAidDevice(any())).thenReturn(false); 86 assertFalse(mAdapter.isHearingAidDeviceOn()); 87 88 when(mBluetoothRouteManager.isCachedHearingAidDevice(any())).thenReturn(true); 89 assertTrue(mAdapter.isHearingAidDeviceOn()); 90 } 91 92 @SmallTest 93 @Test testIsLeAudioDeviceOn()94 public void testIsLeAudioDeviceOn() { 95 when(mBluetoothRouteManager.isCachedLeAudioDevice(any())).thenReturn(false); 96 assertFalse(mAdapter.isLeAudioDeviceOn()); 97 98 when(mBluetoothRouteManager.isCachedLeAudioDevice(any())).thenReturn(true); 99 assertTrue(mAdapter.isLeAudioDeviceOn()); 100 } 101 102 @SmallTest 103 @Test testOnBluetoothDeviceListChanged()104 public void testOnBluetoothDeviceListChanged() { 105 mAdapter.onBluetoothDeviceListChanged(); 106 verify(mCallAudioRouteStateMachine).sendMessageWithSessionInfo( 107 CallAudioRouteStateMachine.BLUETOOTH_DEVICE_LIST_CHANGED); 108 } 109 110 @SmallTest 111 @Test testOnBluetoothActiveDevicePresent()112 public void testOnBluetoothActiveDevicePresent() { 113 mAdapter.onBluetoothActiveDevicePresent(); 114 verify(mCallAudioRouteStateMachine).sendMessageWithSessionInfo( 115 CallAudioRouteStateMachine.BT_ACTIVE_DEVICE_PRESENT); 116 } 117 118 @SmallTest 119 @Test testOnBluetoothActiveDeviceGone()120 public void testOnBluetoothActiveDeviceGone() { 121 mAdapter.onBluetoothActiveDeviceGone(); 122 verify(mCallAudioRouteStateMachine).sendMessageWithSessionInfo( 123 CallAudioRouteStateMachine.BT_ACTIVE_DEVICE_GONE); 124 } 125 126 @SmallTest 127 @Test testOnBluetoothAudioConnected()128 public void testOnBluetoothAudioConnected() { 129 mAdapter.onBluetoothAudioConnected(); 130 verify(mCallAudioRouteStateMachine).sendMessageWithSessionInfo( 131 CallAudioRouteStateMachine.BT_AUDIO_CONNECTED); 132 verify(mRingtonePlayer).updateBtActiveState(true); 133 } 134 135 @SmallTest 136 @Test testOnBluetoothAudioConnecting()137 public void testOnBluetoothAudioConnecting() { 138 mAdapter.onBluetoothAudioConnecting(); 139 verify(mCallAudioRouteStateMachine).sendMessageWithSessionInfo( 140 CallAudioRouteStateMachine.BT_AUDIO_CONNECTED); 141 verify(mRingtonePlayer).updateBtActiveState(false); 142 } 143 144 @SmallTest 145 @Test testOnBluetoothAudioDisconnected()146 public void testOnBluetoothAudioDisconnected() { 147 mAdapter.onBluetoothAudioDisconnected(); 148 verify(mCallAudioRouteStateMachine).sendMessageWithSessionInfo( 149 CallAudioRouteStateMachine.BT_AUDIO_DISCONNECTED); 150 verify(mRingtonePlayer).updateBtActiveState(false); 151 } 152 153 @SmallTest 154 @Test testOnUnexpectedBluetoothStateChange()155 public void testOnUnexpectedBluetoothStateChange() { 156 mAdapter.onUnexpectedBluetoothStateChange(); 157 verify(mCallAudioRouteStateMachine).sendMessageWithSessionInfo( 158 CallAudioRouteStateMachine.UPDATE_SYSTEM_AUDIO_ROUTE); 159 } 160 161 @SmallTest 162 @Test testOnWiredHeadsetPluggedInChangedNoChange()163 public void testOnWiredHeadsetPluggedInChangedNoChange() { 164 mAdapter.onWiredHeadsetPluggedInChanged(false, false); 165 mAdapter.onWiredHeadsetPluggedInChanged(true, true); 166 verify(mCallAudioRouteStateMachine, never()).sendMessageWithSessionInfo(anyInt()); 167 } 168 169 @SmallTest 170 @Test testOnWiredHeadsetPluggedInChangedPlugged()171 public void testOnWiredHeadsetPluggedInChangedPlugged() { 172 mAdapter.onWiredHeadsetPluggedInChanged(false, true); 173 verify(mCallAudioRouteStateMachine).sendMessageWithSessionInfo( 174 CallAudioRouteStateMachine.CONNECT_WIRED_HEADSET); 175 } 176 177 @SmallTest 178 @Test testOnWiredHeadsetPluggedInChangedUnplugged()179 public void testOnWiredHeadsetPluggedInChangedUnplugged() { 180 mAdapter.onWiredHeadsetPluggedInChanged(true, false); 181 verify(mCallAudioRouteStateMachine).sendMessageWithSessionInfo( 182 CallAudioRouteStateMachine.DISCONNECT_WIRED_HEADSET); 183 } 184 185 @SmallTest 186 @Test testOnDockChangedConnected()187 public void testOnDockChangedConnected() { 188 mAdapter.onDockChanged(true); 189 verify(mCallAudioRouteStateMachine).sendMessageWithSessionInfo( 190 CallAudioRouteStateMachine.CONNECT_DOCK); 191 } 192 193 @SmallTest 194 @Test testOnDockChangedDisconnected()195 public void testOnDockChangedDisconnected() { 196 mAdapter.onDockChanged(false); 197 verify(mCallAudioRouteStateMachine).sendMessageWithSessionInfo( 198 CallAudioRouteStateMachine.DISCONNECT_DOCK); 199 } 200 } 201