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; 196258aae54824a7c3cd3974822b0b6835ab8a45deJack He 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; 276258aae54824a7c3cd3974822b0b6835ab8a45deJack He 286258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport android.bluetooth.BluetoothAdapter; 296258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport android.bluetooth.BluetoothDevice; 306258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport android.bluetooth.BluetoothProfile; 316258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport android.content.Context; 326258aae54824a7c3cd3974822b0b6835ab8a45deJack He 336258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport com.android.settingslib.R; 346258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport com.android.settingslib.TestConfig; 356258aae54824a7c3cd3974822b0b6835ab8a45deJack He 366258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.junit.Before; 376258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.junit.Test; 386258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.junit.runner.RunWith; 396258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.mockito.Mock; 406258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.mockito.MockitoAnnotations; 416258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.robolectric.RobolectricTestRunner; 426258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.robolectric.RuntimeEnvironment; 436258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.robolectric.annotation.Config; 446258aae54824a7c3cd3974822b0b6835ab8a45deJack He 456258aae54824a7c3cd3974822b0b6835ab8a45deJack He@RunWith(RobolectricTestRunner.class) 466258aae54824a7c3cd3974822b0b6835ab8a45deJack He@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, resourceDir = 476258aae54824a7c3cd3974822b0b6835ab8a45deJack He "../../res") 486258aae54824a7c3cd3974822b0b6835ab8a45deJack Hepublic class CachedBluetoothDeviceTest { 49c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He private final static String DEVICE_NAME = "TestName"; 50c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He private final static String DEVICE_ALIAS = "TestAlias"; 51c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He private final static String DEVICE_ADDRESS = "AA:BB:CC:DD:EE:FF"; 52c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He private final static String DEVICE_ALIAS_NEW = "TestAliasNew"; 536258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 546258aae54824a7c3cd3974822b0b6835ab8a45deJack He private LocalBluetoothAdapter mAdapter; 556258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 566258aae54824a7c3cd3974822b0b6835ab8a45deJack He private LocalBluetoothProfileManager mProfileManager; 576258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 586258aae54824a7c3cd3974822b0b6835ab8a45deJack He private HeadsetProfile mHfpProfile; 596258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 606258aae54824a7c3cd3974822b0b6835ab8a45deJack He private A2dpProfile mA2dpProfile; 616258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 626258aae54824a7c3cd3974822b0b6835ab8a45deJack He private HidProfile mHidProfile; 636258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 646258aae54824a7c3cd3974822b0b6835ab8a45deJack He private BluetoothDevice mDevice; 656258aae54824a7c3cd3974822b0b6835ab8a45deJack He private CachedBluetoothDevice mCachedDevice; 666258aae54824a7c3cd3974822b0b6835ab8a45deJack He private Context mContext; 676258aae54824a7c3cd3974822b0b6835ab8a45deJack He private int mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN; 686258aae54824a7c3cd3974822b0b6835ab8a45deJack He 696258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Before 706258aae54824a7c3cd3974822b0b6835ab8a45deJack He public void setUp() { 716258aae54824a7c3cd3974822b0b6835ab8a45deJack He MockitoAnnotations.initMocks(this); 726258aae54824a7c3cd3974822b0b6835ab8a45deJack He mContext = RuntimeEnvironment.application; 73c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He when(mDevice.getAddress()).thenReturn(DEVICE_ADDRESS); 746258aae54824a7c3cd3974822b0b6835ab8a45deJack He when(mAdapter.getBluetoothState()).thenReturn(BluetoothAdapter.STATE_ON); 756258aae54824a7c3cd3974822b0b6835ab8a45deJack He when(mHfpProfile.isProfileReady()).thenReturn(true); 766258aae54824a7c3cd3974822b0b6835ab8a45deJack He when(mA2dpProfile.isProfileReady()).thenReturn(true); 776258aae54824a7c3cd3974822b0b6835ab8a45deJack He when(mHidProfile.isProfileReady()).thenReturn(true); 786258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice = spy( 796258aae54824a7c3cd3974822b0b6835ab8a45deJack He new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice)); 806258aae54824a7c3cd3974822b0b6835ab8a45deJack He doAnswer((invocation) -> mBatteryLevel).when(mCachedDevice).getBatteryLevel(); 816258aae54824a7c3cd3974822b0b6835ab8a45deJack He } 826258aae54824a7c3cd3974822b0b6835ab8a45deJack He 836258aae54824a7c3cd3974822b0b6835ab8a45deJack He /** 846258aae54824a7c3cd3974822b0b6835ab8a45deJack He * Test to verify the current test context object works so that we are not checking null 856258aae54824a7c3cd3974822b0b6835ab8a45deJack He * against null 866258aae54824a7c3cd3974822b0b6835ab8a45deJack He */ 876258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Test 886258aae54824a7c3cd3974822b0b6835ab8a45deJack He public void testContextMock() { 896258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mContext.getString(R.string.bluetooth_connected)).isEqualTo("Connected"); 906258aae54824a7c3cd3974822b0b6835ab8a45deJack He } 916258aae54824a7c3cd3974822b0b6835ab8a45deJack He 926258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Test 936258aae54824a7c3cd3974822b0b6835ab8a45deJack He public void testGetConnectionSummary_testSingleProfileConnectDisconnect() { 946258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Test without battery level 956258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Set HID profile to be connected and test connection state summary 966258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_CONNECTED); 976258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(mContext.getString( 986258aae54824a7c3cd3974822b0b6835ab8a45deJack He R.string.bluetooth_connected)); 996258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1006258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Set HID profile to be disconnected and test connection state summary 1016258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_DISCONNECTED); 1026258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isNull(); 1036258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1046258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Test with battery level 1056258aae54824a7c3cd3974822b0b6835ab8a45deJack He mBatteryLevel = 10; 1066258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Set HID profile to be connected and test connection state summary 1076258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_CONNECTED); 1086258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(mContext.getString( 1096258aae54824a7c3cd3974822b0b6835ab8a45deJack He R.string.bluetooth_connected_battery_level, 1106258aae54824a7c3cd3974822b0b6835ab8a45deJack He com.android.settingslib.Utils.formatPercentage(mBatteryLevel))); 1116258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1126258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Set HID profile to be disconnected and test connection state summary 1136258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_DISCONNECTED); 1146258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isNull(); 1156258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1166258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Test with BluetoothDevice.BATTERY_LEVEL_UNKNOWN battery level 1176258aae54824a7c3cd3974822b0b6835ab8a45deJack He mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN; 1186258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1196258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Set HID profile to be connected and test connection state summary 1206258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_CONNECTED); 1216258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(mContext.getString( 1226258aae54824a7c3cd3974822b0b6835ab8a45deJack He R.string.bluetooth_connected)); 1236258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1246258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Set HID profile to be disconnected and test connection state summary 1256258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_DISCONNECTED); 1266258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isNull(); 1276258aae54824a7c3cd3974822b0b6835ab8a45deJack He } 1286258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1296258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Test 1306258aae54824a7c3cd3974822b0b6835ab8a45deJack He public void testGetConnectionSummary_testMultipleProfileConnectDisconnect() { 1316258aae54824a7c3cd3974822b0b6835ab8a45deJack He mBatteryLevel = 10; 1326258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1336258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Set HFP, A2DP and HID profile to be connected and test connection state summary 1346258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 1356258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); 1366258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_CONNECTED); 1376258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(mContext.getString( 1386258aae54824a7c3cd3974822b0b6835ab8a45deJack He R.string.bluetooth_connected_battery_level, 1396258aae54824a7c3cd3974822b0b6835ab8a45deJack He com.android.settingslib.Utils.formatPercentage(mBatteryLevel))); 1406258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1416258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Disconnect HFP only and test connection state summary 1426258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 1436258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(mContext.getString( 1446258aae54824a7c3cd3974822b0b6835ab8a45deJack He R.string.bluetooth_connected_no_headset_battery_level, 1456258aae54824a7c3cd3974822b0b6835ab8a45deJack He com.android.settingslib.Utils.formatPercentage(mBatteryLevel))); 1466258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1476258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Disconnect A2DP only and test connection state summary 1486258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 1496258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED); 1506258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(mContext.getString( 1516258aae54824a7c3cd3974822b0b6835ab8a45deJack He R.string.bluetooth_connected_no_a2dp_battery_level, 1526258aae54824a7c3cd3974822b0b6835ab8a45deJack He com.android.settingslib.Utils.formatPercentage(mBatteryLevel))); 1536258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1546258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Disconnect both HFP and A2DP and test connection state summary 1556258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 1566258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(mContext.getString( 1576258aae54824a7c3cd3974822b0b6835ab8a45deJack He R.string.bluetooth_connected_no_headset_no_a2dp_battery_level, 1586258aae54824a7c3cd3974822b0b6835ab8a45deJack He com.android.settingslib.Utils.formatPercentage(mBatteryLevel))); 1596258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1606258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Disconnect all profiles and test connection state summary 1616258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_DISCONNECTED); 1626258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isNull(); 1636258aae54824a7c3cd3974822b0b6835ab8a45deJack He } 164c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He 165c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He @Test 166c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He public void testDeviceName_testAliasNameAvailable() { 167c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He when(mDevice.getAliasName()).thenReturn(DEVICE_ALIAS); 168c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He when(mDevice.getName()).thenReturn(DEVICE_NAME); 169c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He CachedBluetoothDevice cachedBluetoothDevice = 170c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice); 171c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify alias is returned on getName 172c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ALIAS); 173c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify device is visible 174c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He assertThat(cachedBluetoothDevice.hasHumanReadableName()).isTrue(); 175c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He } 176c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He 177c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He @Test 178c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He public void testDeviceName_testNameNotAvailable() { 179c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He CachedBluetoothDevice cachedBluetoothDevice = 180c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice); 181c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify device address is returned on getName 182c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ADDRESS); 183c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify device is not visible 184c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He assertThat(cachedBluetoothDevice.hasHumanReadableName()).isFalse(); 185c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He } 186c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He 187c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He @Test 188c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He public void testDeviceName_testRenameDevice() { 189c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He final String[] alias = {DEVICE_ALIAS}; 190c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He doAnswer(invocation -> alias[0]).when(mDevice).getAliasName(); 191c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He doAnswer(invocation -> { 192c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He alias[0] = (String) invocation.getArguments()[0]; 193c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He return true; 194c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He }).when(mDevice).setAlias(anyString()); 195c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He when(mDevice.getName()).thenReturn(DEVICE_NAME); 196c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He CachedBluetoothDevice cachedBluetoothDevice = 197c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice); 198c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify alias is returned on getName 199c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ALIAS); 200c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify null name does not get set 201c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He cachedBluetoothDevice.setName(null); 202c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He verify(mDevice, never()).setAlias(any()); 203c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify new name is set properly 204c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He cachedBluetoothDevice.setName(DEVICE_ALIAS_NEW); 205c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He verify(mDevice).setAlias(DEVICE_ALIAS_NEW); 206c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He // Verify new alias is returned on getName 207c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ALIAS_NEW); 208c219bc9b884f70b087b2d55412b128846a5d0ce1Jack He } 2096258aae54824a7c3cd3974822b0b6835ab8a45deJack He} 210