Remove the local cached name

1. Use BluetoothDevice.getAliasName() to get the cached name instead of
   use mName that is local cached.
2. Add test to verify following situations:
   1. Verify when alias name is not null return alias name otherwise return
   address.
   2. Verify the BluetoothDevice.setAlias() will be called when set
   name is not null.

Bug: 112517004
Test: make -j42 RunSettingsLibRoboTests ROBOTEST_FILTER=CachedBluetoothDeviceTest
Change-Id: Ib4f002da6ceac8e8e562bf17a167a0c9ae6a3953
This commit is contained in:
hughchen
2018-08-15 16:13:21 +08:00
parent 7dd9fce652
commit cb6e197e29
3 changed files with 45 additions and 34 deletions

View File

@@ -288,7 +288,6 @@ public class BluetoothEventManager {
}
cachedDevice.setRssi(rssi);
cachedDevice.setBtClass(btClass);
cachedDevice.setNewName(name);
cachedDevice.setJustDiscovered(true);
}
}

View File

@@ -51,8 +51,6 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
private final BluetoothAdapter mLocalAdapter;
private final LocalBluetoothProfileManager mProfileManager;
private final BluetoothDevice mDevice;
//TODO: consider remove, BluetoothDevice.getName() is already cached
private String mName;
private long mHiSyncId;
// Need this since there is no method for getting RSSI
private short mRssi;
@@ -299,7 +297,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
}
return;
}
Log.i(TAG, "Failed to connect " + profile.toString() + " to " + mName);
Log.i(TAG, "Failed to connect " + profile.toString() + " to " + getName());
}
private boolean ensurePaired() {
@@ -376,7 +374,6 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
// TODO: do any of these need to run async on a background thread?
private void fillData() {
fetchName();
fetchBtClass();
updateProfiles();
fetchActiveDevices();
@@ -400,21 +397,15 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
return mDevice.getAddress();
}
public String getName() {
return mName;
}
/**
* Populate name from BluetoothDevice.ACTION_FOUND intent
* Get name from remote device
* @return {@link BluetoothDevice#getAliasName()} if
* {@link BluetoothDevice#getAliasName()} is not null otherwise return
* {@link BluetoothDevice#getAddress()}
*/
void setNewName(String name) {
if (mName == null) {
mName = name;
if (mName == null || TextUtils.isEmpty(mName)) {
mName = mDevice.getAddress();
}
dispatchAttributesChanged();
}
public String getName() {
final String aliasName = mDevice.getAliasName();
return TextUtils.isEmpty(aliasName) ? getAddress() : aliasName;
}
/**
@@ -422,9 +413,8 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
* @param name new alias name to be set, should never be null
*/
public void setName(String name) {
// Prevent mName to be set to null if setName(null) is called
if (name != null && !TextUtils.equals(name, mName)) {
mName = name;
// Prevent getName() to be set to null if setName(null) is called
if (name != null && !TextUtils.equals(name, getName())) {
mDevice.setAlias(name);
dispatchAttributesChanged();
}
@@ -461,19 +451,10 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
}
void refreshName() {
fetchName();
dispatchAttributesChanged();
}
private void fetchName() {
mName = mDevice.getAliasName();
if (TextUtils.isEmpty(mName)) {
mName = mDevice.getAddress();
if (BluetoothUtils.D) {
Log.d(TAG, "Device has no name (yet), use address: " + mName);
}
if (BluetoothUtils.D) {
Log.d(TAG, "Device name: " + getName());
}
dispatchAttributesChanged();
}
/**
@@ -805,7 +786,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
if (comparison != 0) return comparison;
// Fallback on name
return mName.compareTo(another.mName);
return getName().compareTo(another.getName());
}
public interface Callback {

View File

@@ -606,4 +606,35 @@ public class CachedBluetoothDeviceTest {
assertThat(mCachedDevice.isConnectedHearingAidDevice()).isFalse();
}
@Test
public void getName_aliasNameNotNull_returnAliasName() {
when(mDevice.getAliasName()).thenReturn(DEVICE_NAME);
assertThat(mCachedDevice.getName()).isEqualTo(DEVICE_NAME);
}
@Test
public void getName_aliasNameIsNull_returnAddress() {
when(mDevice.getAliasName()).thenReturn(null);
assertThat(mCachedDevice.getName()).isEqualTo(DEVICE_ADDRESS);
}
@Test
public void setName_setDeviceNameIsNotNull() {
final String name = "test name";
when(mDevice.getAliasName()).thenReturn(DEVICE_NAME);
mCachedDevice.setName(name);
verify(mDevice).setAlias(name);
}
@Test
public void setName_setDeviceNameIsNull() {
mCachedDevice.setName(null);
verify(mDevice, never()).setAlias(any());
}
}