To Add try-catch for MetadataChangedListener to handle the Exception
Since the BT is not enabled, the BluetoothAdapter can't register the device into Metadata List. Then, the BluetoothAdapter throws the execption while the UI did the unregister. Bug: 291207069 Test: build pass Change-Id: I86e0a3369d7371747a249b34f949d59929afb1c7
This commit is contained in:
committed by
SongFerng Wang
parent
7f72bcf667
commit
d140634164
@@ -196,6 +196,10 @@ public final class BluetoothDevicePreference extends GearPreference {
|
||||
}
|
||||
|
||||
private void registerMetadataChangedListener() {
|
||||
if (mBluetoothAdapter == null) {
|
||||
Log.d(TAG, "No mBluetoothAdapter");
|
||||
return;
|
||||
}
|
||||
if (mBluetoothDevices == null) {
|
||||
mBluetoothDevices = new HashSet<>();
|
||||
}
|
||||
@@ -210,18 +214,47 @@ public final class BluetoothDevicePreference extends GearPreference {
|
||||
Log.d(TAG, "No BT device to register.");
|
||||
return;
|
||||
}
|
||||
mBluetoothDevices.forEach(bd ->
|
||||
mBluetoothAdapter.addOnMetadataChangedListener(bd,
|
||||
getContext().getMainExecutor(), mMetadataListener));
|
||||
Set<BluetoothDevice> errorDevices = new HashSet<>();
|
||||
mBluetoothDevices.forEach(bd -> {
|
||||
try {
|
||||
boolean isSuccess = mBluetoothAdapter.addOnMetadataChangedListener(bd,
|
||||
getContext().getMainExecutor(), mMetadataListener);
|
||||
if (!isSuccess) {
|
||||
Log.e(TAG, bd.getAnonymizedAddress() + ": add into Listener failed");
|
||||
errorDevices.add(bd);
|
||||
}
|
||||
} catch (NullPointerException e) {
|
||||
errorDevices.add(bd);
|
||||
Log.e(TAG, bd.getAnonymizedAddress() + ":" + e.toString());
|
||||
} catch (IllegalArgumentException e) {
|
||||
errorDevices.add(bd);
|
||||
Log.e(TAG, bd.getAnonymizedAddress() + ":" + e.toString());
|
||||
}
|
||||
});
|
||||
for (BluetoothDevice errorDevice : errorDevices) {
|
||||
mBluetoothDevices.remove(errorDevice);
|
||||
Log.d(TAG, "mBluetoothDevices remove " + errorDevice.getAnonymizedAddress());
|
||||
}
|
||||
}
|
||||
|
||||
private void unregisterMetadataChangedListener() {
|
||||
if (mBluetoothAdapter == null) {
|
||||
Log.d(TAG, "No mBluetoothAdapter");
|
||||
return;
|
||||
}
|
||||
if (mBluetoothDevices == null || mBluetoothDevices.isEmpty()) {
|
||||
Log.d(TAG, "No BT device to unregister.");
|
||||
return;
|
||||
}
|
||||
mBluetoothDevices.forEach(
|
||||
bd -> mBluetoothAdapter.removeOnMetadataChangedListener(bd, mMetadataListener));
|
||||
mBluetoothDevices.forEach(bd -> {
|
||||
try {
|
||||
mBluetoothAdapter.removeOnMetadataChangedListener(bd, mMetadataListener);
|
||||
} catch (NullPointerException e) {
|
||||
Log.e(TAG, bd.getAnonymizedAddress() + ":" + e.toString());
|
||||
} catch (IllegalArgumentException e) {
|
||||
Log.e(TAG, bd.getAnonymizedAddress() + ":" + e.toString());
|
||||
}
|
||||
});
|
||||
mBluetoothDevices.clear();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user