Merge "To Add try-catch for MetadataChangedListener to handle the Exception" into main

This commit is contained in:
SongFerng Wang
2023-09-04 05:56:24 +00:00
committed by Android (Google) Code Review
2 changed files with 78 additions and 12 deletions

View File

@@ -167,6 +167,10 @@ public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceCont
} }
private void registerBluetoothDevice() { private void registerBluetoothDevice() {
if (mBluetoothAdapter == null) {
Log.d(TAG, "No mBluetoothAdapter");
return;
}
if (mBluetoothDevices == null) { if (mBluetoothDevices == null) {
mBluetoothDevices = new HashSet<>(); mBluetoothDevices = new HashSet<>();
} }
@@ -180,23 +184,52 @@ public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceCont
} }
}); });
if (mBluetoothDevices.isEmpty()) { if (mBluetoothDevices.isEmpty()) {
Log.d(TAG, "No BT devcie to register."); Log.d(TAG, "No BT device to register.");
return; return;
} }
mCachedDevice.registerCallback(this); mCachedDevice.registerCallback(this);
mBluetoothDevices.forEach(bd -> Set<BluetoothDevice> errorDevices = new HashSet<>();
mBluetoothAdapter.addOnMetadataChangedListener(bd, mBluetoothDevices.forEach(bd -> {
mContext.getMainExecutor(), mMetadataListener)); try {
boolean isSuccess = mBluetoothAdapter.addOnMetadataChangedListener(bd,
mContext.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 unRegisterBluetoothDevice() { private void unRegisterBluetoothDevice() {
if (mBluetoothAdapter == null) {
Log.d(TAG, "No mBluetoothAdapter");
return;
}
if (mBluetoothDevices == null || mBluetoothDevices.isEmpty()) { if (mBluetoothDevices == null || mBluetoothDevices.isEmpty()) {
Log.d(TAG, "No BT devcie to unregister."); Log.d(TAG, "No BT device to unregister.");
return; return;
} }
mCachedDevice.unregisterCallback(this); mCachedDevice.unregisterCallback(this);
mBluetoothDevices.forEach(bd -> mBluetoothAdapter.removeOnMetadataChangedListener(bd, mBluetoothDevices.forEach(bd -> {
mMetadataListener)); 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(); mBluetoothDevices.clear();
} }

View File

@@ -196,6 +196,10 @@ public final class BluetoothDevicePreference extends GearPreference {
} }
private void registerMetadataChangedListener() { private void registerMetadataChangedListener() {
if (mBluetoothAdapter == null) {
Log.d(TAG, "No mBluetoothAdapter");
return;
}
if (mBluetoothDevices == null) { if (mBluetoothDevices == null) {
mBluetoothDevices = new HashSet<>(); mBluetoothDevices = new HashSet<>();
} }
@@ -210,18 +214,47 @@ public final class BluetoothDevicePreference extends GearPreference {
Log.d(TAG, "No BT device to register."); Log.d(TAG, "No BT device to register.");
return; return;
} }
mBluetoothDevices.forEach(bd -> Set<BluetoothDevice> errorDevices = new HashSet<>();
mBluetoothAdapter.addOnMetadataChangedListener(bd, mBluetoothDevices.forEach(bd -> {
getContext().getMainExecutor(), mMetadataListener)); 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() { private void unregisterMetadataChangedListener() {
if (mBluetoothAdapter == null) {
Log.d(TAG, "No mBluetoothAdapter");
return;
}
if (mBluetoothDevices == null || mBluetoothDevices.isEmpty()) { if (mBluetoothDevices == null || mBluetoothDevices.isEmpty()) {
Log.d(TAG, "No BT device to unregister."); Log.d(TAG, "No BT device to unregister.");
return; return;
} }
mBluetoothDevices.forEach( mBluetoothDevices.forEach(bd -> {
bd -> mBluetoothAdapter.removeOnMetadataChangedListener(bd, mMetadataListener)); 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(); mBluetoothDevices.clear();
} }