diff options
| author | 2020-02-27 11:32:39 +0800 | |
|---|---|---|
| committer | 2020-02-27 15:55:43 +0800 | |
| commit | 531382fec35ce08d1a21494034d46bf1c8a393a4 (patch) | |
| tree | ea2746aa98aa991170649034b9a622bb76d98fab | |
| parent | 227ae85ddf99b7a28baff2166a5492c453e719f6 (diff) | |
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
7 files changed, 125 insertions, 3 deletions
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<BluetoothDevice> 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<BluetoothDevice> 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; + } } |