From 531382fec35ce08d1a21494034d46bf1c8a393a4 Mon Sep 17 00:00:00 2001 From: hughchen Date: Thu, 27 Feb 2020 11:32:39 +0800 Subject: Use removeActiveDevice() when set phone as active device - Use removeActiveDevice() to set phone as active device instead of use setActiveDevice(). - Add test case Bug: 150111193 Test: manually Change-Id: Icfe6a50ba3fc807daf3445cfdd852787dc26e3c1 --- .../android/settingslib/bluetooth/A2dpProfile.java | 4 +- .../settingslib/bluetooth/HeadsetProfile.java | 5 +- .../settingslib/bluetooth/HearingAidProfile.java | 4 +- .../settingslib/bluetooth/A2dpProfileTest.java | 6 ++ .../settingslib/bluetooth/HeadsetProfileTest.java | 6 ++ .../bluetooth/HearingAidProfileTest.java | 77 ++++++++++++++++++++++ .../testutils/shadow/ShadowBluetoothAdapter.java | 26 ++++++++ 7 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HearingAidProfileTest.java diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java index 1ebe91736ba1..c9c847ff7194 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java @@ -164,7 +164,9 @@ public class A2dpProfile implements LocalBluetoothProfile { if (mBluetoothAdapter == null) { return false; } - return mBluetoothAdapter.setActiveDevice(device, ACTIVE_DEVICE_AUDIO); + return device == null + ? mBluetoothAdapter.removeActiveDevice(ACTIVE_DEVICE_AUDIO) + : mBluetoothAdapter.setActiveDevice(device, ACTIVE_DEVICE_AUDIO); } public BluetoothDevice getActiveDevice() { diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java index 9dfc4d986745..9dd329ed7cd7 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java @@ -125,7 +125,10 @@ public class HeadsetProfile implements LocalBluetoothProfile { if (mBluetoothAdapter == null) { return false; } - return mBluetoothAdapter.setActiveDevice(device, ACTIVE_DEVICE_PHONE_CALL); + + return device == null + ? mBluetoothAdapter.removeActiveDevice(ACTIVE_DEVICE_PHONE_CALL) + : mBluetoothAdapter.setActiveDevice(device, ACTIVE_DEVICE_PHONE_CALL); } public BluetoothDevice getActiveDevice() { diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java index a3b68b4b90b3..d17f242d5d63 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java @@ -162,7 +162,9 @@ public class HearingAidProfile implements LocalBluetoothProfile { if (mBluetoothAdapter == null) { return false; } - return mBluetoothAdapter.setActiveDevice(device, ACTIVE_DEVICE_ALL); + return device == null + ? mBluetoothAdapter.removeActiveDevice(ACTIVE_DEVICE_ALL) + : mBluetoothAdapter.setActiveDevice(device, ACTIVE_DEVICE_ALL); } public List getActiveDevices() { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java index c555cbec4bab..414c39bc0ce9 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java @@ -203,4 +203,10 @@ public class A2dpProfileTest { assertThat(mProfile.getHighQualityAudioOptionLabel(mDevice)).isEqualTo( String.format(KNOWN_CODEC_LABEL, config.getCodecName())); } + + @Test + public void setActiveDevice_returnTrue() { + assertThat(mProfile.setActiveDevice(null)).isTrue(); + assertThat(mProfile.setActiveDevice(mDevice)).isTrue(); + } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HeadsetProfileTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HeadsetProfileTest.java index 9adef8287355..30182c476855 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HeadsetProfileTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HeadsetProfileTest.java @@ -75,4 +75,10 @@ public class HeadsetProfileTest { assertThat(mProfile.getAudioState(mBluetoothDevice)). isEqualTo(BluetoothHeadset.STATE_AUDIO_CONNECTED); } + + @Test + public void setActiveDevice_returnTrue() { + assertThat(mProfile.setActiveDevice(null)).isTrue(); + assertThat(mProfile.setActiveDevice(mBluetoothDevice)).isTrue(); + } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HearingAidProfileTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HearingAidProfileTest.java new file mode 100644 index 000000000000..be3a51788d24 --- /dev/null +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HearingAidProfileTest.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.settingslib.bluetooth; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothHearingAid; +import android.bluetooth.BluetoothProfile; +import android.content.Context; + +import com.android.settingslib.testutils.shadow.ShadowBluetoothAdapter; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.shadow.api.Shadow; + +@RunWith(RobolectricTestRunner.class) +@Config(shadows = {ShadowBluetoothAdapter.class}) +public class HearingAidProfileTest { + @Mock + private CachedBluetoothDeviceManager mDeviceManager; + @Mock + private LocalBluetoothProfileManager mProfileManager; + @Mock + private BluetoothHearingAid mService; + @Mock + private CachedBluetoothDevice mCachedBluetoothDevice; + @Mock + private BluetoothDevice mBluetoothDevice; + + private BluetoothProfile.ServiceListener mServiceListener; + private HearingAidProfile mProfile; + private ShadowBluetoothAdapter mShadowBluetoothAdapter; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + Context context = spy(RuntimeEnvironment.application); + mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter()); + + when(mCachedBluetoothDevice.getDevice()).thenReturn(mBluetoothDevice); + + mProfile = new HearingAidProfile(context, mDeviceManager, mProfileManager); + mServiceListener = mShadowBluetoothAdapter.getServiceListener(); + mServiceListener.onServiceConnected(BluetoothProfile.HEADSET, mService); + } + + @Test + public void setActiveDevice_returnTrue() { + assertThat(mProfile.setActiveDevice(null)).isTrue(); + assertThat(mProfile.setActiveDevice(mBluetoothDevice)).isTrue(); + } +} diff --git a/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowBluetoothAdapter.java b/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowBluetoothAdapter.java index 015ce149a9c4..b265d46058be 100644 --- a/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowBluetoothAdapter.java +++ b/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowBluetoothAdapter.java @@ -16,6 +16,10 @@ package com.android.settingslib.testutils.shadow; +import static android.bluetooth.BluetoothAdapter.ACTIVE_DEVICE_ALL; +import static android.bluetooth.BluetoothAdapter.ACTIVE_DEVICE_AUDIO; +import static android.bluetooth.BluetoothAdapter.ACTIVE_DEVICE_PHONE_CALL; + import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; @@ -61,4 +65,26 @@ public class ShadowBluetoothAdapter extends org.robolectric.shadows.ShadowBlueto public void setMostRecentlyConnectedDevices(List list) { mMostRecentlyConnectedDevices = list; } + + @Implementation + protected boolean removeActiveDevice(@BluetoothAdapter.ActiveDeviceUse int profiles) { + if (profiles != ACTIVE_DEVICE_AUDIO && profiles != ACTIVE_DEVICE_PHONE_CALL + && profiles != ACTIVE_DEVICE_ALL) { + return false; + } + return true; + } + + @Implementation + protected boolean setActiveDevice(BluetoothDevice device, + @BluetoothAdapter.ActiveDeviceUse int profiles) { + if (device == null) { + return false; + } + if (profiles != ACTIVE_DEVICE_AUDIO && profiles != ACTIVE_DEVICE_PHONE_CALL + && profiles != ACTIVE_DEVICE_ALL) { + return false; + } + return true; + } } -- cgit v1.2.3-59-g8ed1b