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