Move the setActiveDevice logic from Settings to SettingsLib (1/2)

Currently the Settings app handles the logic of setting active device;
however, this should be handled by SettingsLib so the logic can be shared.

Bug: 75984255
Test: robolectric test
Change-Id: Ia44e16c550d5b57c985e29e46e17044a895b495a
Merged-In: Ia44e16c550d5b57c985e29e46e17044a895b495a
(cherry picked from commit 6a416327e5)
This commit is contained in:
Hansong Zhang
2018-03-19 18:20:38 -07:00
parent 8085d6f247
commit d2cf3c39fe
2 changed files with 43 additions and 0 deletions

View File

@@ -416,6 +416,29 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
}
}
/**
* Set this device as active device
* @return true if at least one profile on this device is set to active, false otherwise
*/
public boolean setActive() {
boolean result = false;
A2dpProfile a2dpProfile = mProfileManager.getA2dpProfile();
if (a2dpProfile != null && isConnectedProfile(a2dpProfile)) {
if (a2dpProfile.setActiveDevice(getDevice())) {
Log.i(TAG, "OnPreferenceClickListener: A2DP active device=" + this);
result = true;
}
}
HeadsetProfile headsetProfile = mProfileManager.getHeadsetProfile();
if ((headsetProfile != null) && isConnectedProfile(headsetProfile)) {
if (headsetProfile.setActiveDevice(getDevice())) {
Log.i(TAG, "OnPreferenceClickListener: Headset active device=" + this);
result = true;
}
}
return result;
}
void refreshName() {
fetchName();
dispatchAttributesChanged();

View File

@@ -299,4 +299,24 @@ public class CachedBluetoothDeviceTest {
// Verify new alias is returned on getName
assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ALIAS_NEW);
}
@Test
public void testSetActive() {
when(mProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile);
when(mProfileManager.getHeadsetProfile()).thenReturn(mHfpProfile);
when(mA2dpProfile.setActiveDevice(any(BluetoothDevice.class))).thenReturn(true);
when(mHfpProfile.setActiveDevice(any(BluetoothDevice.class))).thenReturn(true);
assertThat(mCachedDevice.setActive()).isFalse();
mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
assertThat(mCachedDevice.setActive()).isTrue();
mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED);
mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED);
assertThat(mCachedDevice.setActive()).isTrue();
mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED);
assertThat(mCachedDevice.setActive()).isFalse();
}
}