blob: f825ec520d4904b21847a74614aeee01c3e7a008 [file] [log] [blame]
hughchen61c1c9f2019-01-17 14:34:51 +08001/*
2 * Copyright 2019 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
17package com.android.settingslib.media;
18
Tim Pengdbdfaef2020-03-11 11:30:01 +080019import static android.media.MediaRoute2ProviderService.REASON_UNKNOWN_ERROR;
20
hughchen61c1c9f2019-01-17 14:34:51 +080021import static com.google.common.truth.Truth.assertThat;
22
23import static org.mockito.ArgumentMatchers.any;
hughchen61c1c9f2019-01-17 14:34:51 +080024import static org.mockito.Mockito.mock;
25import static org.mockito.Mockito.never;
26import static org.mockito.Mockito.verify;
27import static org.mockito.Mockito.when;
28
hughchenb3d68f62020-02-11 14:30:14 +080029import android.bluetooth.BluetoothAdapter;
30import android.bluetooth.BluetoothDevice;
hughchen61c1c9f2019-01-17 14:34:51 +080031import android.content.Context;
Tim Pengdbdfaef2020-03-11 11:30:01 +080032import android.media.MediaRoute2Info;
33import android.media.MediaRouter2Manager;
hughchen61c1c9f2019-01-17 14:34:51 +080034
35import com.android.settingslib.bluetooth.A2dpProfile;
hughchenc0c11632019-03-07 16:21:17 +080036import com.android.settingslib.bluetooth.CachedBluetoothDevice;
hughchenb3d68f62020-02-11 14:30:14 +080037import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
hughchen61c1c9f2019-01-17 14:34:51 +080038import com.android.settingslib.bluetooth.HearingAidProfile;
39import com.android.settingslib.bluetooth.LocalBluetoothManager;
40import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
hughchenb3d68f62020-02-11 14:30:14 +080041import com.android.settingslib.testutils.shadow.ShadowBluetoothAdapter;
hughchen61c1c9f2019-01-17 14:34:51 +080042
43import org.junit.Before;
44import org.junit.Test;
45import org.junit.runner.RunWith;
46import org.mockito.Mock;
47import org.mockito.MockitoAnnotations;
48import org.robolectric.RobolectricTestRunner;
49import org.robolectric.RuntimeEnvironment;
hughchenb3d68f62020-02-11 14:30:14 +080050import org.robolectric.annotation.Config;
51import org.robolectric.shadow.api.Shadow;
hughchen61c1c9f2019-01-17 14:34:51 +080052
53import java.util.ArrayList;
54import java.util.List;
55
56@RunWith(RobolectricTestRunner.class)
hughchenb3d68f62020-02-11 14:30:14 +080057@Config(shadows = {ShadowBluetoothAdapter.class})
hughchen61c1c9f2019-01-17 14:34:51 +080058public class LocalMediaManagerTest {
59
Tim Pengdbdfaef2020-03-11 11:30:01 +080060 private static final String TEST_DEVICE_NAME_1 = "device_name_1";
61 private static final String TEST_DEVICE_NAME_2 = "device_name_2";
hughchen61c1c9f2019-01-17 14:34:51 +080062 private static final String TEST_DEVICE_ID_1 = "device_id_1";
63 private static final String TEST_DEVICE_ID_2 = "device_id_2";
64 private static final String TEST_DEVICE_ID_3 = "device_id_3";
65 private static final String TEST_CURRENT_DEVICE_ID = "currentDevice_id";
Tim Pengdbdfaef2020-03-11 11:30:01 +080066 private static final String TEST_PACKAGE_NAME = "com.test.playmusic";
hughchen61c1c9f2019-01-17 14:34:51 +080067
68 @Mock
69 private BluetoothMediaManager mBluetoothMediaManager;
70 @Mock
71 private InfoMediaManager mInfoMediaManager;
72 @Mock
73 private LocalBluetoothManager mLocalBluetoothManager;
74 @Mock
75 private LocalMediaManager.DeviceCallback mCallback;
76 @Mock
77 private HearingAidProfile mHapProfile;
78 @Mock
79 private A2dpProfile mA2dpProfile;
80 @Mock
81 private LocalBluetoothProfileManager mLocalProfileManager;
Tim Pengdbdfaef2020-03-11 11:30:01 +080082 @Mock
83 private MediaRouter2Manager mMediaRouter2Manager;
84 @Mock
85 private MediaRoute2Info mRouteInfo1;
86 @Mock
87 private MediaRoute2Info mRouteInfo2;
hughchen61c1c9f2019-01-17 14:34:51 +080088
89 private Context mContext;
90 private LocalMediaManager mLocalMediaManager;
hughchenb3d68f62020-02-11 14:30:14 +080091 private ShadowBluetoothAdapter mShadowBluetoothAdapter;
Tim Pengdbdfaef2020-03-11 11:30:01 +080092 private InfoMediaDevice mInfoMediaDevice1;
93 private InfoMediaDevice mInfoMediaDevice2;
hughchen61c1c9f2019-01-17 14:34:51 +080094
95 @Before
96 public void setUp() {
97 MockitoAnnotations.initMocks(this);
98 mContext = RuntimeEnvironment.application;
hughchenb3d68f62020-02-11 14:30:14 +080099 final List<BluetoothDevice> bluetoothDevices = new ArrayList<>();
100 mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
101 mShadowBluetoothAdapter.setMostRecentlyConnectedDevices(bluetoothDevices);
Tim Pengdbdfaef2020-03-11 11:30:01 +0800102 when(mRouteInfo1.getName()).thenReturn(TEST_DEVICE_NAME_1);
103 when(mRouteInfo1.getId()).thenReturn(TEST_DEVICE_ID_1);
104 when(mRouteInfo2.getName()).thenReturn(TEST_DEVICE_NAME_2);
105 when(mRouteInfo2.getId()).thenReturn(TEST_DEVICE_ID_2);
hughchen61c1c9f2019-01-17 14:34:51 +0800106 when(mLocalBluetoothManager.getProfileManager()).thenReturn(mLocalProfileManager);
107 when(mLocalProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile);
108 when(mLocalProfileManager.getHearingAidProfile()).thenReturn(mHapProfile);
109
Tim Pengdbdfaef2020-03-11 11:30:01 +0800110 mInfoMediaDevice1 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo1,
111 TEST_PACKAGE_NAME);
112 mInfoMediaDevice2 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo2,
113 TEST_PACKAGE_NAME);
hughchen61c1c9f2019-01-17 14:34:51 +0800114 mLocalMediaManager = new LocalMediaManager(mContext, mLocalBluetoothManager,
hughchendf7b8382020-02-03 17:48:49 +0800115 mInfoMediaManager, "com.test.packagename");
hughchenb3d68f62020-02-11 14:30:14 +0800116 mLocalMediaManager.mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
hughchen61c1c9f2019-01-17 14:34:51 +0800117 }
118
119 @Test
120 public void startScan_mediaDevicesListShouldBeClear() {
121 final MediaDevice device = mock(MediaDevice.class);
122 mLocalMediaManager.mMediaDevices.add(device);
123
124 assertThat(mLocalMediaManager.mMediaDevices).hasSize(1);
125 mLocalMediaManager.startScan();
126 assertThat(mLocalMediaManager.mMediaDevices).isEmpty();
127 }
128
129 @Test
130 public void connectDevice_deviceNotEqualCurrentConnectedDevice_connectDevice() {
131 final MediaDevice currentDevice = mock(MediaDevice.class);
132 final MediaDevice device = mock(MediaDevice.class);
133 mLocalMediaManager.mMediaDevices.add(currentDevice);
134 mLocalMediaManager.mMediaDevices.add(device);
135 mLocalMediaManager.mCurrentConnectedDevice = currentDevice;
136
137 when(device.getId()).thenReturn(TEST_DEVICE_ID_1);
138 when(currentDevice.getId()).thenReturn(TEST_CURRENT_DEVICE_ID);
139
140 mLocalMediaManager.registerCallback(mCallback);
141 mLocalMediaManager.connectDevice(device);
142
143 verify(currentDevice).disconnect();
144 verify(device).connect();
hughchen61c1c9f2019-01-17 14:34:51 +0800145 }
146
147 @Test
Tim Pengdbdfaef2020-03-11 11:30:01 +0800148 public void connectDevice_deviceNotEqualCurrentConnectedDevice_isConnectingState() {
149 mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice1);
150 mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice2);
151 mLocalMediaManager.mCurrentConnectedDevice = mInfoMediaDevice1;
152
153 mLocalMediaManager.registerCallback(mCallback);
154 mLocalMediaManager.connectDevice(mInfoMediaDevice2);
155
156 assertThat(mInfoMediaDevice2.getState()).isEqualTo(LocalMediaManager.MediaDeviceState
157 .STATE_CONNECTING);
158 }
159
160 @Test
161 public void connectDevice_deviceEqualCurrentConnectedDevice_notConnectingState() {
162 mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice1);
163 mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice2);
164 mLocalMediaManager.mCurrentConnectedDevice = mInfoMediaDevice1;
165
166 mLocalMediaManager.registerCallback(mCallback);
167 mLocalMediaManager.connectDevice(mInfoMediaDevice1);
168
169 assertThat(mInfoMediaDevice1.getState()).isNotEqualTo(LocalMediaManager.MediaDeviceState
170 .STATE_CONNECTING);
171 }
172
173 @Test
hughchenc0c11632019-03-07 16:21:17 +0800174 public void connectDevice_bluetoothDeviceNotConnected_connectBluetoothDevice() {
175 final MediaDevice device = mock(BluetoothMediaDevice.class);
176 final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class);
177 mLocalMediaManager.mMediaDevices.add(device);
178
179 when(device.getId()).thenReturn(TEST_DEVICE_ID_1);
180 when(((BluetoothMediaDevice) device).getCachedDevice()).thenReturn(cachedDevice);
181 when(cachedDevice.isConnected()).thenReturn(false);
182 when(cachedDevice.isBusy()).thenReturn(false);
183
184 mLocalMediaManager.registerCallback(mCallback);
185 mLocalMediaManager.connectDevice(device);
186
hughchen4ae21862020-01-14 15:55:29 +0800187 verify(cachedDevice).connect();
hughchenc0c11632019-03-07 16:21:17 +0800188 }
189
190 @Test
hughchen61c1c9f2019-01-17 14:34:51 +0800191 public void getMediaDeviceById_idExist_shouldReturnMediaDevice() {
192 final MediaDevice device1 = mock(MediaDevice.class);
193 final MediaDevice device2 = mock(MediaDevice.class);
194 mLocalMediaManager.mMediaDevices.add(device1);
195 mLocalMediaManager.mMediaDevices.add(device2);
196
197 when(device1.getId()).thenReturn(TEST_DEVICE_ID_1);
198 when(device2.getId()).thenReturn(TEST_DEVICE_ID_2);
199
200 final MediaDevice device = mLocalMediaManager
201 .getMediaDeviceById(mLocalMediaManager.mMediaDevices, TEST_DEVICE_ID_2);
202
203 assertThat(device.getId()).isEqualTo(TEST_DEVICE_ID_2);
204 }
205
206 @Test
207 public void getMediaDeviceById_idNotExist_shouldReturnNull() {
208 final MediaDevice device1 = mock(MediaDevice.class);
209 final MediaDevice device2 = mock(MediaDevice.class);
210 mLocalMediaManager.mMediaDevices.add(device1);
211 mLocalMediaManager.mMediaDevices.add(device2);
212
213 when(device1.getId()).thenReturn(TEST_DEVICE_ID_1);
214 when(device2.getId()).thenReturn(TEST_DEVICE_ID_2);
215
216 final MediaDevice device = mLocalMediaManager
217 .getMediaDeviceById(mLocalMediaManager.mMediaDevices, TEST_CURRENT_DEVICE_ID);
218
219 assertThat(device).isNull();
220 }
221
222 @Test
hughchendf7b8382020-02-03 17:48:49 +0800223 public void onDeviceAdded_addDevice() {
hughchen61c1c9f2019-01-17 14:34:51 +0800224 final MediaDevice device = mock(MediaDevice.class);
225
226 assertThat(mLocalMediaManager.mMediaDevices).isEmpty();
227 mLocalMediaManager.registerCallback(mCallback);
228 mLocalMediaManager.mMediaDeviceCallback.onDeviceAdded(device);
229
hughchendf7b8382020-02-03 17:48:49 +0800230 assertThat(mLocalMediaManager.mMediaDevices).hasSize(1);
hughchen61c1c9f2019-01-17 14:34:51 +0800231 verify(mCallback).onDeviceListUpdate(any());
232 }
233
234 @Test
235 public void onDeviceAdded_mediaDeviceNotExistAndPhoneDeviceExistInList_addMediaDevice() {
236 final MediaDevice device1 = mock(MediaDevice.class);
237 final MediaDevice device2 = mock(MediaDevice.class);
238 mLocalMediaManager.mPhoneDevice = mock(PhoneMediaDevice.class);
239 mLocalMediaManager.mMediaDevices.add(device1);
240 mLocalMediaManager.mMediaDevices.add(mLocalMediaManager.mPhoneDevice);
241
242 assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
243 mLocalMediaManager.registerCallback(mCallback);
244 mLocalMediaManager.mMediaDeviceCallback.onDeviceAdded(device2);
245
246 assertThat(mLocalMediaManager.mMediaDevices).hasSize(3);
247 verify(mCallback).onDeviceListUpdate(any());
248 }
249
250 @Test
251 public void onDeviceAdded_mediaDeviceAndPhoneDeviceExistInList_doNothing() {
252 final MediaDevice device1 = mock(MediaDevice.class);
253 mLocalMediaManager.mPhoneDevice = mock(PhoneMediaDevice.class);
254 mLocalMediaManager.mMediaDevices.add(device1);
255 mLocalMediaManager.mMediaDevices.add(mLocalMediaManager.mPhoneDevice);
256
257 assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
258 mLocalMediaManager.registerCallback(mCallback);
259 mLocalMediaManager.mMediaDeviceCallback.onDeviceAdded(device1);
260
261 assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
262 verify(mCallback, never()).onDeviceListUpdate(any());
263 }
264
265 @Test
hughchendf7b8382020-02-03 17:48:49 +0800266 public void onDeviceListAdded_addDevicesList() {
hughchen61c1c9f2019-01-17 14:34:51 +0800267 final List<MediaDevice> devices = new ArrayList<>();
268 final MediaDevice device1 = mock(MediaDevice.class);
269 final MediaDevice device2 = mock(MediaDevice.class);
270 devices.add(device1);
271 devices.add(device2);
272
273 when(device1.getId()).thenReturn(TEST_DEVICE_ID_1);
274 when(device2.getId()).thenReturn(TEST_DEVICE_ID_2);
275
276 assertThat(mLocalMediaManager.mMediaDevices).isEmpty();
277 mLocalMediaManager.registerCallback(mCallback);
278 mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);
279
hughchendf7b8382020-02-03 17:48:49 +0800280 assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
hughchen61c1c9f2019-01-17 14:34:51 +0800281 verify(mCallback).onDeviceListUpdate(any());
282 }
283
284 @Test
hughchendf7b8382020-02-03 17:48:49 +0800285 public void onDeviceListAdded_addDeviceList() {
hughchen61c1c9f2019-01-17 14:34:51 +0800286 final List<MediaDevice> devices = new ArrayList<>();
287 final MediaDevice device1 = mock(MediaDevice.class);
288 final MediaDevice device2 = mock(MediaDevice.class);
289 final MediaDevice device3 = mock(MediaDevice.class);
290 mLocalMediaManager.mPhoneDevice = mock(PhoneMediaDevice.class);
291 devices.add(device1);
292 devices.add(device2);
293 mLocalMediaManager.mMediaDevices.add(device3);
294 mLocalMediaManager.mMediaDevices.add(mLocalMediaManager.mPhoneDevice);
295
296 when(device1.getId()).thenReturn(TEST_DEVICE_ID_1);
297 when(device2.getId()).thenReturn(TEST_DEVICE_ID_2);
298 when(device3.getId()).thenReturn(TEST_DEVICE_ID_3);
299 when(mLocalMediaManager.mPhoneDevice.getId()).thenReturn("test_phone_id");
300
301 assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
302 mLocalMediaManager.registerCallback(mCallback);
303 mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);
304
hughchendf7b8382020-02-03 17:48:49 +0800305 assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
hughchen61c1c9f2019-01-17 14:34:51 +0800306 verify(mCallback).onDeviceListUpdate(any());
307 }
308
309 @Test
hughchendf7b8382020-02-03 17:48:49 +0800310 public void onDeviceRemoved_removeDevice() {
hughchen61c1c9f2019-01-17 14:34:51 +0800311 final MediaDevice device1 = mock(MediaDevice.class);
312 mLocalMediaManager.mPhoneDevice = mock(PhoneMediaDevice.class);
313 mLocalMediaManager.mMediaDevices.add(device1);
314 mLocalMediaManager.mMediaDevices.add(mLocalMediaManager.mPhoneDevice);
315
316 assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
317 mLocalMediaManager.registerCallback(mCallback);
318 mLocalMediaManager.mMediaDeviceCallback.onDeviceRemoved(device1);
319
hughchendf7b8382020-02-03 17:48:49 +0800320 assertThat(mLocalMediaManager.mMediaDevices).hasSize(1);
hughchen61c1c9f2019-01-17 14:34:51 +0800321 verify(mCallback).onDeviceListUpdate(any());
322 }
323
324 @Test
325 public void onDeviceRemoved_phoneDeviceNotLastDeviceAfterRemoveMediaDevice_removeMediaDevice() {
326 final MediaDevice device1 = mock(MediaDevice.class);
327 final MediaDevice device2 = mock(MediaDevice.class);
328 mLocalMediaManager.mPhoneDevice = mock(PhoneMediaDevice.class);
329 mLocalMediaManager.mMediaDevices.add(device1);
330 mLocalMediaManager.mMediaDevices.add(device2);
331 mLocalMediaManager.mMediaDevices.add(mLocalMediaManager.mPhoneDevice);
332
333 assertThat(mLocalMediaManager.mMediaDevices).hasSize(3);
334 mLocalMediaManager.registerCallback(mCallback);
335 mLocalMediaManager.mMediaDeviceCallback.onDeviceRemoved(device2);
336
337 assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
338 verify(mCallback).onDeviceListUpdate(any());
339 }
340
341 @Test
342 public void onDeviceRemoved_removeMediaDeviceNotInList_doNothing() {
343 final MediaDevice device1 = mock(MediaDevice.class);
344 final MediaDevice device2 = mock(MediaDevice.class);
345 mLocalMediaManager.mPhoneDevice = mock(PhoneMediaDevice.class);
346 mLocalMediaManager.mMediaDevices.add(device2);
347 mLocalMediaManager.mMediaDevices.add(mLocalMediaManager.mPhoneDevice);
348
349 assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
350 mLocalMediaManager.registerCallback(mCallback);
351 mLocalMediaManager.mMediaDeviceCallback.onDeviceRemoved(device1);
352
353 assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
354 verify(mCallback, never()).onDeviceListUpdate(any());
355 }
356
357 @Test
hughchendf7b8382020-02-03 17:48:49 +0800358 public void onDeviceListRemoved_removeAll() {
hughchen61c1c9f2019-01-17 14:34:51 +0800359 final List<MediaDevice> devices = new ArrayList<>();
360 final MediaDevice device1 = mock(MediaDevice.class);
361 final MediaDevice device2 = mock(MediaDevice.class);
362 mLocalMediaManager.mPhoneDevice = mock(PhoneMediaDevice.class);
363 devices.add(device1);
364 devices.add(device2);
365 mLocalMediaManager.mMediaDevices.add(device1);
366 mLocalMediaManager.mMediaDevices.add(device2);
367 mLocalMediaManager.mMediaDevices.add(mLocalMediaManager.mPhoneDevice);
368
369 assertThat(mLocalMediaManager.mMediaDevices).hasSize(3);
370 mLocalMediaManager.registerCallback(mCallback);
hughchendf7b8382020-02-03 17:48:49 +0800371 mLocalMediaManager.mMediaDeviceCallback
372 .onDeviceListRemoved(mLocalMediaManager.mMediaDevices);
hughchen61c1c9f2019-01-17 14:34:51 +0800373
374 assertThat(mLocalMediaManager.mMediaDevices).isEmpty();
375 verify(mCallback).onDeviceListUpdate(any());
376 }
377
378 @Test
379 public void onDeviceListRemoved_phoneDeviceNotLastDeviceAfterRemoveDeviceList_removeList() {
380 final List<MediaDevice> devices = new ArrayList<>();
381 final MediaDevice device1 = mock(MediaDevice.class);
382 final MediaDevice device2 = mock(MediaDevice.class);
383 final MediaDevice device3 = mock(MediaDevice.class);
384 mLocalMediaManager.mPhoneDevice = mock(PhoneMediaDevice.class);
385 devices.add(device1);
386 devices.add(device3);
387 mLocalMediaManager.mMediaDevices.add(device1);
388 mLocalMediaManager.mMediaDevices.add(device2);
389 mLocalMediaManager.mMediaDevices.add(device3);
390 mLocalMediaManager.mMediaDevices.add(mLocalMediaManager.mPhoneDevice);
391
392 assertThat(mLocalMediaManager.mMediaDevices).hasSize(4);
393 mLocalMediaManager.registerCallback(mCallback);
394 mLocalMediaManager.mMediaDeviceCallback.onDeviceListRemoved(devices);
395
396 assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
397 verify(mCallback).onDeviceListUpdate(any());
398 }
399
400 @Test
hughchen61c1c9f2019-01-17 14:34:51 +0800401 public void onConnectedDeviceChanged_connectedAndCurrentDeviceAreDifferent_notifyThemChanged() {
402 final MediaDevice device1 = mock(MediaDevice.class);
403 final MediaDevice device2 = mock(MediaDevice.class);
404
405 mLocalMediaManager.mMediaDevices.add(device1);
406 mLocalMediaManager.mMediaDevices.add(device2);
407 mLocalMediaManager.mCurrentConnectedDevice = device1;
408
409 when(device1.getId()).thenReturn(TEST_DEVICE_ID_1);
410 when(device2.getId()).thenReturn(TEST_DEVICE_ID_2);
411
412 mLocalMediaManager.registerCallback(mCallback);
413 mLocalMediaManager.mMediaDeviceCallback.onConnectedDeviceChanged(TEST_DEVICE_ID_2);
414
415 assertThat(mLocalMediaManager.getCurrentConnectedDevice()).isEqualTo(device2);
hughchen29a8a182020-03-11 11:28:49 +0800416 verify(mCallback).onSelectedDeviceStateChanged(device2,
417 LocalMediaManager.MediaDeviceState.STATE_CONNECTED);
hughchen61c1c9f2019-01-17 14:34:51 +0800418 }
419
420 @Test
421 public void onConnectedDeviceChanged_connectedAndCurrentDeviceAreSame_doNothing() {
422 final MediaDevice device1 = mock(MediaDevice.class);
423 final MediaDevice device2 = mock(MediaDevice.class);
424
425 mLocalMediaManager.mMediaDevices.add(device1);
426 mLocalMediaManager.mMediaDevices.add(device2);
427 mLocalMediaManager.mCurrentConnectedDevice = device1;
428
429 when(device1.getId()).thenReturn(TEST_DEVICE_ID_1);
430 when(device2.getId()).thenReturn(TEST_DEVICE_ID_2);
431
432 mLocalMediaManager.registerCallback(mCallback);
433 mLocalMediaManager.mMediaDeviceCallback.onConnectedDeviceChanged(TEST_DEVICE_ID_1);
434
hughchene572b832020-01-08 18:07:18 +0800435 verify(mCallback, never()).onDeviceAttributesChanged();
hughchen61c1c9f2019-01-17 14:34:51 +0800436 }
hughchenc0c11632019-03-07 16:21:17 +0800437
438 @Test
Tim Pengdbdfaef2020-03-11 11:30:01 +0800439 public void onConnectedDeviceChanged_isConnectedState() {
440 mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice1);
441 mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice2);
442 mInfoMediaDevice1.setState(LocalMediaManager.MediaDeviceState.STATE_DISCONNECTED);
443
444 assertThat(mInfoMediaDevice1.getState()).isEqualTo(LocalMediaManager.MediaDeviceState
445 .STATE_DISCONNECTED);
446 mLocalMediaManager.registerCallback(mCallback);
447 mLocalMediaManager.mMediaDeviceCallback.onConnectedDeviceChanged(TEST_DEVICE_ID_1);
448
449 assertThat(mInfoMediaDevice1.getState()).isEqualTo(LocalMediaManager.MediaDeviceState
450 .STATE_CONNECTED);
451 }
452
453 @Test
hughchenc0c11632019-03-07 16:21:17 +0800454 public void onDeviceAttributesChanged_shouldDispatchDeviceListUpdate() {
455 mLocalMediaManager.registerCallback(mCallback);
456
457 mLocalMediaManager.mMediaDeviceCallback.onDeviceAttributesChanged();
458
hughchene572b832020-01-08 18:07:18 +0800459 verify(mCallback).onDeviceAttributesChanged();
hughchenc0c11632019-03-07 16:21:17 +0800460 }
timhypenga812e882020-02-04 17:15:48 +0800461
462 @Test
Tim Pengdbdfaef2020-03-11 11:30:01 +0800463 public void onRequestFailed_checkDevicesState() {
464 mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice1);
465 mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice2);
466 mInfoMediaDevice1.setState(LocalMediaManager.MediaDeviceState.STATE_CONNECTING);
467 mInfoMediaDevice2.setState(LocalMediaManager.MediaDeviceState.STATE_CONNECTED);
468
469 assertThat(mInfoMediaDevice1.getState()).isEqualTo(LocalMediaManager.MediaDeviceState
470 .STATE_CONNECTING);
471 assertThat(mInfoMediaDevice2.getState()).isEqualTo(LocalMediaManager.MediaDeviceState
472 .STATE_CONNECTED);
473 mLocalMediaManager.registerCallback(mCallback);
474 mLocalMediaManager.mMediaDeviceCallback.onRequestFailed(REASON_UNKNOWN_ERROR);
475
476 assertThat(mInfoMediaDevice1.getState()).isEqualTo(LocalMediaManager.MediaDeviceState
477 .STATE_CONNECTING_FAILED);
478 assertThat(mInfoMediaDevice2.getState()).isEqualTo(LocalMediaManager.MediaDeviceState
479 .STATE_CONNECTED);
480 }
481
482 @Test
timhypenga812e882020-02-04 17:15:48 +0800483 public void getActiveMediaDevice_checkList() {
484 final List<MediaDevice> devices = new ArrayList<>();
485 final MediaDevice device1 = mock(MediaDevice.class);
486 final MediaDevice device2 = mock(MediaDevice.class);
487 final MediaDevice device3 = mock(MediaDevice.class);
488 device1.mType = MediaDevice.MediaDeviceType.TYPE_PHONE_DEVICE;
489 device2.mType = MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE;
490 device3.mType = MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE;
491 when(device1.getClientPackageName()).thenReturn(TEST_DEVICE_ID_1);
492 when(device2.getClientPackageName()).thenReturn(TEST_DEVICE_ID_2);
493 when(device3.getClientPackageName()).thenReturn(TEST_DEVICE_ID_3);
494 when(device1.getId()).thenReturn(TEST_DEVICE_ID_1);
495 when(device2.getId()).thenReturn(TEST_DEVICE_ID_2);
496 when(device3.getId()).thenReturn(TEST_DEVICE_ID_3);
497 devices.add(device1);
498 devices.add(device2);
499 devices.add(device3);
500 mLocalMediaManager.registerCallback(mCallback);
501 mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);
502
503 List<MediaDevice> activeDevices = mLocalMediaManager.getActiveMediaDevice(
504 MediaDevice.MediaDeviceType.TYPE_PHONE_DEVICE);
505 assertThat(activeDevices).containsExactly(device1);
506
507 activeDevices = mLocalMediaManager.getActiveMediaDevice(
508 MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
509 assertThat(activeDevices).containsExactly(device2);
510
511 activeDevices = mLocalMediaManager.getActiveMediaDevice(
512 MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE);
513 assertThat(activeDevices).containsExactly(device3);
514 }
hughchenb3d68f62020-02-11 14:30:14 +0800515
516 @Test
517 public void onDeviceAttributesChanged_shouldBeCalled() {
518 mLocalMediaManager.registerCallback(mCallback);
519
520 mLocalMediaManager.mDeviceAttributeChangeCallback.onDeviceAttributesChanged();
521
522 verify(mCallback).onDeviceAttributesChanged();
523 }
524
525 @Test
526 public void onDeviceListAdded_haveDisconnectedDevice_addDisconnectedDevice() {
527 final List<MediaDevice> devices = new ArrayList<>();
528 final MediaDevice device1 = mock(MediaDevice.class);
529 final MediaDevice device2 = mock(MediaDevice.class);
530 final MediaDevice device3 = mock(MediaDevice.class);
531 mLocalMediaManager.mPhoneDevice = mock(PhoneMediaDevice.class);
532 devices.add(device1);
533 devices.add(device2);
534 mLocalMediaManager.mMediaDevices.add(device3);
535 mLocalMediaManager.mMediaDevices.add(mLocalMediaManager.mPhoneDevice);
536
537 final List<BluetoothDevice> bluetoothDevices = new ArrayList<>();
538 final BluetoothDevice bluetoothDevice = mock(BluetoothDevice.class);
539 final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class);
540 final CachedBluetoothDeviceManager cachedManager = mock(CachedBluetoothDeviceManager.class);
541 bluetoothDevices.add(bluetoothDevice);
542 mShadowBluetoothAdapter.setMostRecentlyConnectedDevices(bluetoothDevices);
543
544 when(mLocalBluetoothManager.getCachedDeviceManager()).thenReturn(cachedManager);
545 when(cachedManager.findDevice(bluetoothDevice)).thenReturn(cachedDevice);
546 when(cachedDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
547 when(cachedDevice.isConnected()).thenReturn(false);
548
549 when(device1.getId()).thenReturn(TEST_DEVICE_ID_1);
550 when(device2.getId()).thenReturn(TEST_DEVICE_ID_2);
551 when(device3.getId()).thenReturn(TEST_DEVICE_ID_3);
552 when(mLocalMediaManager.mPhoneDevice.getId()).thenReturn("test_phone_id");
553
554 assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
555 mLocalMediaManager.registerCallback(mCallback);
556 mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);
557
558 assertThat(mLocalMediaManager.mMediaDevices).hasSize(3);
559 verify(mCallback).onDeviceListUpdate(any());
560 }
hughchen063a35a2020-03-04 17:51:57 +0800561
562 @Test
563 public void onRequestFailed_shouldDispatchOnRequestFailed() {
564 mLocalMediaManager.registerCallback(mCallback);
565
566 mLocalMediaManager.mMediaDeviceCallback.onRequestFailed(1);
567
568 verify(mCallback).onRequestFailed(1);
569 }
hughchen61c1c9f2019-01-17 14:34:51 +0800570}