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
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user