16258aae54824a7c3cd3974822b0b6835ab8a45deJack He/* 26258aae54824a7c3cd3974822b0b6835ab8a45deJack He * Copyright (C) 2017 The Android Open Source Project 36258aae54824a7c3cd3974822b0b6835ab8a45deJack He * 46258aae54824a7c3cd3974822b0b6835ab8a45deJack He * Licensed under the Apache License, Version 2.0 (the "License"); 56258aae54824a7c3cd3974822b0b6835ab8a45deJack He * you may not use this file except in compliance with the License. 66258aae54824a7c3cd3974822b0b6835ab8a45deJack He * You may obtain a copy of the License at 76258aae54824a7c3cd3974822b0b6835ab8a45deJack He * 86258aae54824a7c3cd3974822b0b6835ab8a45deJack He * http://www.apache.org/licenses/LICENSE-2.0 96258aae54824a7c3cd3974822b0b6835ab8a45deJack He * 106258aae54824a7c3cd3974822b0b6835ab8a45deJack He * Unless required by applicable law or agreed to in writing, software 116258aae54824a7c3cd3974822b0b6835ab8a45deJack He * distributed under the License is distributed on an "AS IS" BASIS, 126258aae54824a7c3cd3974822b0b6835ab8a45deJack He * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136258aae54824a7c3cd3974822b0b6835ab8a45deJack He * See the License for the specific language governing permissions and 146258aae54824a7c3cd3974822b0b6835ab8a45deJack He * limitations under the License. 156258aae54824a7c3cd3974822b0b6835ab8a45deJack He */ 166258aae54824a7c3cd3974822b0b6835ab8a45deJack Hepackage com.android.settingslib.bluetooth; 176258aae54824a7c3cd3974822b0b6835ab8a45deJack He 186258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport static com.google.common.truth.Truth.assertThat; 19e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 20c219bc9b884f70b087b2d55412b128846a5d0ce1Jack Heimport static org.mockito.Matchers.any; 21c219bc9b884f70b087b2d55412b128846a5d0ce1Jack Heimport static org.mockito.Matchers.anyString; 226258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport static org.mockito.Mockito.doAnswer; 23c219bc9b884f70b087b2d55412b128846a5d0ce1Jack Heimport static org.mockito.Mockito.never; 246258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport static org.mockito.Mockito.spy; 25c219bc9b884f70b087b2d55412b128846a5d0ce1Jack Heimport static org.mockito.Mockito.verify; 266258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport static org.mockito.Mockito.when; 27f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypengimport static org.robolectric.Shadows.shadowOf; 286258aae54824a7c3cd3974822b0b6835ab8a45deJack He 296258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport android.bluetooth.BluetoothAdapter; 306258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport android.bluetooth.BluetoothDevice; 316258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport android.bluetooth.BluetoothProfile; 326258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport android.content.Context; 33f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypengimport android.media.AudioManager; 34f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng 35f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypengimport com.android.settingslib.SettingsLibRobolectricTestRunner; 366258aae54824a7c3cd3974822b0b6835ab8a45deJack He 376258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.junit.Before; 386258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.junit.Test; 396258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.junit.runner.RunWith; 406258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.mockito.Mock; 416258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.mockito.MockitoAnnotations; 426258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.robolectric.RuntimeEnvironment; 43f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypengimport org.robolectric.shadows.ShadowAudioManager; 446258aae54824a7c3cd3974822b0b6835ab8a45deJack He 45f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng@RunWith(SettingsLibRobolectricTestRunner.class) 466258aae54824a7c3cd3974822b0b6835ab8a45deJack Hepublic class CachedBluetoothDeviceTest { 47c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He private final static String DEVICE_NAME = "TestName"; 48c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He private final static String DEVICE_ALIAS = "TestAlias"; 49c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He private final static String DEVICE_ADDRESS = "AA:BB:CC:DD:EE:FF"; 50c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He private final static String DEVICE_ALIAS_NEW = "TestAliasNew"; 516258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 526258aae54824a7c3cd3974822b0b6835ab8a45deJack He private LocalBluetoothAdapter mAdapter; 536258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 546258aae54824a7c3cd3974822b0b6835ab8a45deJack He private LocalBluetoothProfileManager mProfileManager; 556258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 566258aae54824a7c3cd3974822b0b6835ab8a45deJack He private HeadsetProfile mHfpProfile; 576258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 586258aae54824a7c3cd3974822b0b6835ab8a45deJack He private A2dpProfile mA2dpProfile; 596258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 601c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang private PanProfile mPanProfile; 616258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 62d7b359165968199e034bd46ca97526dbf719602dHansong Zhang private HearingAidProfile mHearingAidProfile; 63d7b359165968199e034bd46ca97526dbf719602dHansong Zhang @Mock 646258aae54824a7c3cd3974822b0b6835ab8a45deJack He private BluetoothDevice mDevice; 656258aae54824a7c3cd3974822b0b6835ab8a45deJack He private CachedBluetoothDevice mCachedDevice; 66f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng private ShadowAudioManager mShadowAudioManager; 676258aae54824a7c3cd3974822b0b6835ab8a45deJack He private Context mContext; 686258aae54824a7c3cd3974822b0b6835ab8a45deJack He private int mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN; 696258aae54824a7c3cd3974822b0b6835ab8a45deJack He 706258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Before 716258aae54824a7c3cd3974822b0b6835ab8a45deJack He public void setUp() { 726258aae54824a7c3cd3974822b0b6835ab8a45deJack He MockitoAnnotations.initMocks(this); 736258aae54824a7c3cd3974822b0b6835ab8a45deJack He mContext = RuntimeEnvironment.application; 74f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng mShadowAudioManager = shadowOf(mContext.getSystemService(AudioManager.class)); 75c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He when(mDevice.getAddress()).thenReturn(DEVICE_ADDRESS); 766258aae54824a7c3cd3974822b0b6835ab8a45deJack He when(mAdapter.getBluetoothState()).thenReturn(BluetoothAdapter.STATE_ON); 776258aae54824a7c3cd3974822b0b6835ab8a45deJack He when(mHfpProfile.isProfileReady()).thenReturn(true); 786258aae54824a7c3cd3974822b0b6835ab8a45deJack He when(mA2dpProfile.isProfileReady()).thenReturn(true); 791c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang when(mPanProfile.isProfileReady()).thenReturn(true); 80d7b359165968199e034bd46ca97526dbf719602dHansong Zhang when(mHearingAidProfile.isProfileReady()).thenReturn(true); 816258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice = spy( 826258aae54824a7c3cd3974822b0b6835ab8a45deJack He new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice)); 836258aae54824a7c3cd3974822b0b6835ab8a45deJack He doAnswer((invocation) -> mBatteryLevel).when(mCachedDevice).getBatteryLevel(); 846258aae54824a7c3cd3974822b0b6835ab8a45deJack He } 856258aae54824a7c3cd3974822b0b6835ab8a45deJack He 866258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Test 876258aae54824a7c3cd3974822b0b6835ab8a45deJack He public void testGetConnectionSummary_testSingleProfileConnectDisconnect() { 886258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Test without battery level 891c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang // Set PAN profile to be connected and test connection state summary 901c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_CONNECTED); 91f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng assertThat(mCachedDevice.getConnectionSummary()).isNull(); 926258aae54824a7c3cd3974822b0b6835ab8a45deJack He 931c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang // Set PAN profile to be disconnected and test connection state summary 941c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_DISCONNECTED); 956258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isNull(); 966258aae54824a7c3cd3974822b0b6835ab8a45deJack He 976258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Test with battery level 986258aae54824a7c3cd3974822b0b6835ab8a45deJack He mBatteryLevel = 10; 991c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang // Set PAN profile to be connected and test connection state summary 1001c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_CONNECTED); 101f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("10% battery"); 1026258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1031c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang // Set PAN profile to be disconnected and test connection state summary 1041c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_DISCONNECTED); 1056258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isNull(); 1066258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1076258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Test with BluetoothDevice.BATTERY_LEVEL_UNKNOWN battery level 1086258aae54824a7c3cd3974822b0b6835ab8a45deJack He mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN; 1096258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1101c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang // Set PAN profile to be connected and test connection state summary 1111c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_CONNECTED); 112f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng assertThat(mCachedDevice.getConnectionSummary()).isNull(); 1136258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1141c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang // Set PAN profile to be disconnected and test connection state summary 1151c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_DISCONNECTED); 1166258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isNull(); 1176258aae54824a7c3cd3974822b0b6835ab8a45deJack He } 1186258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1196258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Test 1206258aae54824a7c3cd3974822b0b6835ab8a45deJack He public void testGetConnectionSummary_testMultipleProfileConnectDisconnect() { 1216258aae54824a7c3cd3974822b0b6835ab8a45deJack He mBatteryLevel = 10; 1226258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1231c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang // Set HFP, A2DP and PAN profile to be connected and test connection state summary 1246258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 1256258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); 1261c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_CONNECTED); 127f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("10% battery"); 1286258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1296258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Disconnect HFP only and test connection state summary 1306258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 131e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov assertThat(mCachedDevice.getConnectionSummary()).isEqualTo( 132f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng "10% battery"); 1336258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1346258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Disconnect A2DP only and test connection state summary 1356258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 1366258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED); 137e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov assertThat(mCachedDevice.getConnectionSummary()).isEqualTo( 138f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng "10% battery"); 1396258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1406258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Disconnect both HFP and A2DP and test connection state summary 1416258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 142e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov assertThat(mCachedDevice.getConnectionSummary()).isEqualTo( 143f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng "10% battery"); 1446258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1456258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Disconnect all profiles and test connection state summary 1461c1bc25dfc1c68fb7c8955ac5767136272dd2aafHansong Zhang mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_DISCONNECTED); 1476258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isNull(); 1486258aae54824a7c3cd3974822b0b6835ab8a45deJack He } 149c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He 150c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He @Test 151e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov public void testGetConnectionSummary_testSingleProfileActiveDeviceA2dp() { 152e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Test without battery level 153e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Set A2DP profile to be connected and test connection state summary 154e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); 155f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng assertThat(mCachedDevice.getConnectionSummary()).isNull(); 156e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 157e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Set device as Active for A2DP and test connection state summary 158c285d559fa8f0d597e8d5f1c8176dbb187e2d6acPavlin Radoslavov mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP); 159f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active"); 160e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 161e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Test with battery level 162e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mBatteryLevel = 10; 163e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getConnectionSummary()).isEqualTo( 164f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng "Active, 10% battery"); 165e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 166e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Set A2DP profile to be disconnected and test connection state summary 167e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED); 168e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov assertThat(mCachedDevice.getConnectionSummary()).isNull(); 169e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 170e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Test with BluetoothDevice.BATTERY_LEVEL_UNKNOWN battery level 171e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN; 172e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Set A2DP profile to be connected, Active and test connection state summary 173e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); 174c285d559fa8f0d597e8d5f1c8176dbb187e2d6acPavlin Radoslavov mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP); 175f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active"); 176e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 177e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Set A2DP profile to be disconnected and test connection state summary 178e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED); 179e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov assertThat(mCachedDevice.getConnectionSummary()).isNull(); 180e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov } 181e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 182e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov @Test 183e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov public void testGetConnectionSummary_testSingleProfileActiveDeviceHfp() { 184e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Test without battery level 185e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Set HFP profile to be connected and test connection state summary 186e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 187f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng assertThat(mCachedDevice.getConnectionSummary()).isNull(); 188e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 189e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Set device as Active for HFP and test connection state summary 190f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng mCachedDevice.onAudioModeChanged(); 191f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng mShadowAudioManager.setMode(AudioManager.MODE_IN_CALL); 192c285d559fa8f0d597e8d5f1c8176dbb187e2d6acPavlin Radoslavov mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET); 193f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active"); 194e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 195e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Test with battery level 196e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mBatteryLevel = 10; 197e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getConnectionSummary()).isEqualTo( 198f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng "Active, 10% battery"); 199e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 200e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Set HFP profile to be disconnected and test connection state summary 201e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 202e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov assertThat(mCachedDevice.getConnectionSummary()).isNull(); 203e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 204e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Test with BluetoothDevice.BATTERY_LEVEL_UNKNOWN battery level 205e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN; 206e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Set HFP profile to be connected, Active and test connection state summary 207e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 208c285d559fa8f0d597e8d5f1c8176dbb187e2d6acPavlin Radoslavov mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET); 209f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active"); 210e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 211e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Set HFP profile to be disconnected and test connection state summary 212e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 213d7b359165968199e034bd46ca97526dbf719602dHansong Zhang assertThat(mCachedDevice.getConnectionSummary()).isNull(); 214d7b359165968199e034bd46ca97526dbf719602dHansong Zhang } 215d7b359165968199e034bd46ca97526dbf719602dHansong Zhang 216d7b359165968199e034bd46ca97526dbf719602dHansong Zhang @Test 217d7b359165968199e034bd46ca97526dbf719602dHansong Zhang public void testGetConnectionSummary_testSingleProfileActiveDeviceHearingAid() { 218d7b359165968199e034bd46ca97526dbf719602dHansong Zhang // Test without battery level 219d7b359165968199e034bd46ca97526dbf719602dHansong Zhang // Set Hearing Aid profile to be connected and test connection state summary 220d7b359165968199e034bd46ca97526dbf719602dHansong Zhang mCachedDevice.onProfileStateChanged(mHearingAidProfile, BluetoothProfile.STATE_CONNECTED); 221f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng assertThat(mCachedDevice.getConnectionSummary()).isNull(); 222d7b359165968199e034bd46ca97526dbf719602dHansong Zhang 223d7b359165968199e034bd46ca97526dbf719602dHansong Zhang // Set device as Active for Hearing Aid and test connection state summary 224d7b359165968199e034bd46ca97526dbf719602dHansong Zhang mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEARING_AID); 225f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active"); 226d7b359165968199e034bd46ca97526dbf719602dHansong Zhang 227d7b359165968199e034bd46ca97526dbf719602dHansong Zhang // Set Hearing Aid profile to be disconnected and test connection state summary 228d7b359165968199e034bd46ca97526dbf719602dHansong Zhang mCachedDevice.onActiveDeviceChanged(false, BluetoothProfile.HEARING_AID); 229f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng mCachedDevice. 230f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng onProfileStateChanged(mHearingAidProfile, BluetoothProfile.STATE_DISCONNECTED); 231e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov assertThat(mCachedDevice.getConnectionSummary()).isNull(); 232e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov } 233e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 234e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov @Test 235e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov public void testGetConnectionSummary_testMultipleProfilesActiveDevice() { 236e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Test without battery level 237e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Set A2DP and HFP profiles to be connected and test connection state summary 238e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); 239e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 240f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng assertThat(mCachedDevice.getConnectionSummary()).isNull(); 241e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 242e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Set device as Active for A2DP and HFP and test connection state summary 243c285d559fa8f0d597e8d5f1c8176dbb187e2d6acPavlin Radoslavov mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP); 244c285d559fa8f0d597e8d5f1c8176dbb187e2d6acPavlin Radoslavov mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET); 245f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active"); 246e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 247e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Test with battery level 248e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mBatteryLevel = 10; 249e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov assertThat(mCachedDevice.getConnectionSummary()).isEqualTo( 250f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng "Active, 10% battery"); 251e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 252e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Disconnect A2DP only and test connection state summary 253c285d559fa8f0d597e8d5f1c8176dbb187e2d6acPavlin Radoslavov mCachedDevice.onActiveDeviceChanged(false, BluetoothProfile.A2DP); 254e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED); 255e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov assertThat(mCachedDevice.getConnectionSummary()).isEqualTo( 256f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng "10% battery"); 257e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 258e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Disconnect HFP only and test connection state summary 259c285d559fa8f0d597e8d5f1c8176dbb187e2d6acPavlin Radoslavov mCachedDevice.onActiveDeviceChanged(false, BluetoothProfile.HEADSET); 260e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 261e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); 262c285d559fa8f0d597e8d5f1c8176dbb187e2d6acPavlin Radoslavov mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP); 263e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov assertThat(mCachedDevice.getConnectionSummary()).isEqualTo( 264f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng "Active, 10% battery"); 265e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 266e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Test with BluetoothDevice.BATTERY_LEVEL_UNKNOWN battery level 267e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN; 268e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Set A2DP and HFP profiles to be connected, Active and test connection state summary 269e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); 270e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 271c285d559fa8f0d597e8d5f1c8176dbb187e2d6acPavlin Radoslavov mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP); 272c285d559fa8f0d597e8d5f1c8176dbb187e2d6acPavlin Radoslavov mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET); 273f050932e2a7a35f9d64a77fcdaff475bdab8f749timhypeng assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active"); 274e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 275e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov // Set A2DP and HFP profiles to be disconnected and test connection state summary 276e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED); 277e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 278e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov assertThat(mCachedDevice.getConnectionSummary()).isNull(); 279e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov } 280e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov 281e6e080ff5cb9c7c56003695c1b787981e0114599Pavlin Radoslavov @Test 282e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin public void getCarConnectionSummary_singleProfileConnectDisconnect() { 283e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Test without battery level 284e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set PAN profile to be connected and test connection state summary 285e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_CONNECTED); 286e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected"); 287e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 288e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set PAN profile to be disconnected and test connection state summary 289e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_DISCONNECTED); 290e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isNull(); 291e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 292e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Test with battery level 293e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mBatteryLevel = 10; 294e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set PAN profile to be connected and test connection state summary 295e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_CONNECTED); 296e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected, battery 10%"); 297e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 298e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set PAN profile to be disconnected and test connection state summary 299e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_DISCONNECTED); 300e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isNull(); 301e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 302e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Test with BluetoothDevice.BATTERY_LEVEL_UNKNOWN battery level 303e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN; 304e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 305e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set PAN profile to be connected and test connection state summary 306e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_CONNECTED); 307e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected"); 308e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 309e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set PAN profile to be disconnected and test connection state summary 310e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_DISCONNECTED); 311e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isNull(); 312e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin } 313e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 314e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin @Test 315e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin public void getCarConnectionSummary_multipleProfileConnectDisconnect() { 316e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mBatteryLevel = 10; 317e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 318e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set HFP, A2DP and PAN profile to be connected and test connection state summary 319e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 320e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); 321e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_CONNECTED); 322e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected, battery 10%"); 323e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 324e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Disconnect HFP only and test connection state summary 325e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 326e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo( 327e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin "Connected (no phone), battery 10%"); 328e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 329e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Disconnect A2DP only and test connection state summary 330e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 331e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED); 332e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo( 333e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin "Connected (no media), battery 10%"); 334e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 335e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Disconnect both HFP and A2DP and test connection state summary 336e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 337e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo( 338e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin "Connected (no phone or media), battery 10%"); 339e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 340e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Disconnect all profiles and test connection state summary 341e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mPanProfile, BluetoothProfile.STATE_DISCONNECTED); 342e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isNull(); 343e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin } 344e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 345e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin @Test 346e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin public void getCarConnectionSummary_singleProfileActiveDeviceA2dp() { 347e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Test without battery level 348e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set A2DP profile to be connected and test connection state summary 349e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); 350e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected"); 351e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 352e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set device as Active for A2DP and test connection state summary 353e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP); 354e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected, active (media)"); 355e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 356e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Test with battery level 357e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mBatteryLevel = 10; 358e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo( 359e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin "Connected, battery 10%, active (media)"); 360e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 361e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set A2DP profile to be disconnected and test connection state summary 362e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED); 363e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isNull(); 364e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 365e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Test with BluetoothDevice.BATTERY_LEVEL_UNKNOWN battery level 366e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN; 367e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set A2DP profile to be connected, Active and test connection state summary 368e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); 369e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP); 370e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected, active (media)"); 371e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 372e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set A2DP profile to be disconnected and test connection state summary 373e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED); 374e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isNull(); 375e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin } 376e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 377e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin @Test 378e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin public void getCarConnectionSummary_singleProfileActiveDeviceHfp() { 379e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Test without battery level 380e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set HFP profile to be connected and test connection state summary 381e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 382e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected"); 383e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 384e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set device as Active for HFP and test connection state summary 385e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET); 386e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected, active (phone)"); 387e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 388e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Test with battery level 389e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mBatteryLevel = 10; 390e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo( 391e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin "Connected, battery 10%, active (phone)"); 392e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 393e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set HFP profile to be disconnected and test connection state summary 394e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 395e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isNull(); 396e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 397e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Test with BluetoothDevice.BATTERY_LEVEL_UNKNOWN battery level 398e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN; 399e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set HFP profile to be connected, Active and test connection state summary 400e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 401e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET); 402e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected, active (phone)"); 403e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 404e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set HFP profile to be disconnected and test connection state summary 405e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 406e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isNull(); 407e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin } 408e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 409e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin @Test 410e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin public void getCarConnectionSummary_singleProfileActiveDeviceHearingAid() { 411e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Test without battery level 412e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set Hearing Aid profile to be connected and test connection state summary 413e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mHearingAidProfile, BluetoothProfile.STATE_CONNECTED); 414e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected"); 415e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 416e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set device as Active for Hearing Aid and test connection state summary 417e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEARING_AID); 418e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected, active"); 419e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 420e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set Hearing Aid profile to be disconnected and test connection state summary 421e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onActiveDeviceChanged(false, BluetoothProfile.HEARING_AID); 422e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mHearingAidProfile, 423e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin BluetoothProfile.STATE_DISCONNECTED); 424e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isNull(); 425e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin } 426e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 427e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin @Test 428e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin public void getCarConnectionSummary_multipleProfilesActiveDevice() { 429e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Test without battery level 430e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set A2DP and HFP profiles to be connected and test connection state summary 431e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); 432e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 433e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected"); 434e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 435e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set device as Active for A2DP and HFP and test connection state summary 436e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP); 437e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET); 438e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected, active"); 439e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 440e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Test with battery level 441e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mBatteryLevel = 10; 442e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo( 443e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin "Connected, battery 10%, active"); 444e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 445e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Disconnect A2DP only and test connection state summary 446e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onActiveDeviceChanged(false, BluetoothProfile.A2DP); 447e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED); 448e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo( 449e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin "Connected (no media), battery 10%, active (phone)"); 450e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 451e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Disconnect HFP only and test connection state summary 452e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onActiveDeviceChanged(false, BluetoothProfile.HEADSET); 453e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 454e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); 455e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP); 456e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo( 457e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin "Connected (no phone), battery 10%, active (media)"); 458e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 459e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Test with BluetoothDevice.BATTERY_LEVEL_UNKNOWN battery level 460e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN; 461e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set A2DP and HFP profiles to be connected, Active and test connection state summary 462e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); 463e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 464e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP); 465e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET); 466e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected, active"); 467e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 468e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin // Set A2DP and HFP profiles to be disconnected and test connection state summary 469e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED); 470e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 471e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin assertThat(mCachedDevice.getCarConnectionSummary()).isNull(); 472e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin } 473e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 474e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin 475e26aecd57bc6b65534606183d0310702e1f072a5ryanywlin @Test 476c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He public void testDeviceName_testAliasNameAvailable() { 477c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He when(mDevice.getAliasName()).thenReturn(DEVICE_ALIAS); 478c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He when(mDevice.getName()).thenReturn(DEVICE_NAME); 479c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He CachedBluetoothDevice cachedBluetoothDevice = 480c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice); 481c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify alias is returned on getName 482c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ALIAS); 483c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify device is visible 484c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He assertThat(cachedBluetoothDevice.hasHumanReadableName()).isTrue(); 485c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He } 486c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He 487c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He @Test 488c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He public void testDeviceName_testNameNotAvailable() { 489c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He CachedBluetoothDevice cachedBluetoothDevice = 490c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice); 491c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify device address is returned on getName 492c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ADDRESS); 493c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify device is not visible 494c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He assertThat(cachedBluetoothDevice.hasHumanReadableName()).isFalse(); 495c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He } 496c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He 497c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He @Test 498c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He public void testDeviceName_testRenameDevice() { 499c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He final String[] alias = {DEVICE_ALIAS}; 500c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He doAnswer(invocation -> alias[0]).when(mDevice).getAliasName(); 501c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He doAnswer(invocation -> { 502c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He alias[0] = (String) invocation.getArguments()[0]; 503c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He return true; 504c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He }).when(mDevice).setAlias(anyString()); 505c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He when(mDevice.getName()).thenReturn(DEVICE_NAME); 506c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He CachedBluetoothDevice cachedBluetoothDevice = 507c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice); 508c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify alias is returned on getName 509c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ALIAS); 510c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify null name does not get set 511c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He cachedBluetoothDevice.setName(null); 512c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He verify(mDevice, never()).setAlias(any()); 513c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify new name is set properly 514c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He cachedBluetoothDevice.setName(DEVICE_ALIAS_NEW); 515c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He verify(mDevice).setAlias(DEVICE_ALIAS_NEW); 516c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify new alias is returned on getName 517c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ALIAS_NEW); 518c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He } 5196a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang 5206a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang @Test 5216a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang public void testSetActive() { 5226a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang when(mProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile); 5236a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang when(mProfileManager.getHeadsetProfile()).thenReturn(mHfpProfile); 5246a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang when(mA2dpProfile.setActiveDevice(any(BluetoothDevice.class))).thenReturn(true); 5256a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang when(mHfpProfile.setActiveDevice(any(BluetoothDevice.class))).thenReturn(true); 5266a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang 5276a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang assertThat(mCachedDevice.setActive()).isFalse(); 5286a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang 5296a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); 5306a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang assertThat(mCachedDevice.setActive()).isTrue(); 5316a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang 5326a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED); 5336a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 5346a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang assertThat(mCachedDevice.setActive()).isTrue(); 5356a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang 5366a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 5376a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang assertThat(mCachedDevice.setActive()).isFalse(); 5386a416327e5b52d6bb78202bd05a86ab84cf2304eHansong Zhang } 53923b947e2458b3968f3ae611fe5aa73198921fe6ahughchen 54023b947e2458b3968f3ae611fe5aa73198921fe6ahughchen @Test 54123b947e2458b3968f3ae611fe5aa73198921fe6ahughchen public void testIsA2dpDevice_isA2dpDevice() { 54223b947e2458b3968f3ae611fe5aa73198921fe6ahughchen when(mProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile); 54323b947e2458b3968f3ae611fe5aa73198921fe6ahughchen when(mA2dpProfile.getConnectionStatus(mDevice)). 54423b947e2458b3968f3ae611fe5aa73198921fe6ahughchen thenReturn(BluetoothProfile.STATE_CONNECTED); 54523b947e2458b3968f3ae611fe5aa73198921fe6ahughchen 54623b947e2458b3968f3ae611fe5aa73198921fe6ahughchen assertThat(mCachedDevice.isA2dpDevice()).isTrue(); 54723b947e2458b3968f3ae611fe5aa73198921fe6ahughchen } 54823b947e2458b3968f3ae611fe5aa73198921fe6ahughchen 54923b947e2458b3968f3ae611fe5aa73198921fe6ahughchen @Test 55023b947e2458b3968f3ae611fe5aa73198921fe6ahughchen public void testIsA2dpDevice_isNotA2dpDevice() { 55123b947e2458b3968f3ae611fe5aa73198921fe6ahughchen when(mProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile); 55223b947e2458b3968f3ae611fe5aa73198921fe6ahughchen when(mA2dpProfile.getConnectionStatus(mDevice)). 55323b947e2458b3968f3ae611fe5aa73198921fe6ahughchen thenReturn(BluetoothProfile.STATE_DISCONNECTING); 55423b947e2458b3968f3ae611fe5aa73198921fe6ahughchen 55523b947e2458b3968f3ae611fe5aa73198921fe6ahughchen assertThat(mCachedDevice.isA2dpDevice()).isFalse(); 55623b947e2458b3968f3ae611fe5aa73198921fe6ahughchen } 55723b947e2458b3968f3ae611fe5aa73198921fe6ahughchen 55823b947e2458b3968f3ae611fe5aa73198921fe6ahughchen @Test 55923b947e2458b3968f3ae611fe5aa73198921fe6ahughchen public void testIsHfpDevice_isHfpDevice() { 56023b947e2458b3968f3ae611fe5aa73198921fe6ahughchen when(mProfileManager.getHeadsetProfile()).thenReturn(mHfpProfile); 56123b947e2458b3968f3ae611fe5aa73198921fe6ahughchen when(mHfpProfile.getConnectionStatus(mDevice)). 56223b947e2458b3968f3ae611fe5aa73198921fe6ahughchen thenReturn(BluetoothProfile.STATE_CONNECTED); 56323b947e2458b3968f3ae611fe5aa73198921fe6ahughchen 56423b947e2458b3968f3ae611fe5aa73198921fe6ahughchen assertThat(mCachedDevice.isHfpDevice()).isTrue(); 56523b947e2458b3968f3ae611fe5aa73198921fe6ahughchen } 56623b947e2458b3968f3ae611fe5aa73198921fe6ahughchen 56723b947e2458b3968f3ae611fe5aa73198921fe6ahughchen @Test 56823b947e2458b3968f3ae611fe5aa73198921fe6ahughchen public void testIsHfpDevice_isNotHfpDevice() { 56923b947e2458b3968f3ae611fe5aa73198921fe6ahughchen when(mProfileManager.getHeadsetProfile()).thenReturn(mHfpProfile); 57023b947e2458b3968f3ae611fe5aa73198921fe6ahughchen when(mHfpProfile.getConnectionStatus(mDevice)). 57123b947e2458b3968f3ae611fe5aa73198921fe6ahughchen thenReturn(BluetoothProfile.STATE_DISCONNECTING); 57223b947e2458b3968f3ae611fe5aa73198921fe6ahughchen 57323b947e2458b3968f3ae611fe5aa73198921fe6ahughchen assertThat(mCachedDevice.isHfpDevice()).isFalse(); 57423b947e2458b3968f3ae611fe5aa73198921fe6ahughchen } 5756258aae54824a7c3cd3974822b0b6835ab8a45deJack He} 576