Handle NPE from BluetoothRouteProvider
NPE could be thrown if ACTION_ACTIVE_DEVICE_CHANGED is sent before ACTION_CONNECTION_STATE_CHANGED (connected) is sent. This CL handles the case by creating a new bluetooth route. If ACTION_CONNECTION_STATE_CHANGED is followed, connectedProfiles of the route will be managed. Bug: 235311641 Test: build successful Change-Id: I931b3eb38704f23b96c80d70d121c27bef297c7b
This commit is contained in:
@@ -345,18 +345,14 @@ class BluetoothRouteProvider {
|
||||
|
||||
private void addActiveRoute(BluetoothRouteInfo btRoute) {
|
||||
if (btRoute == null) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, " btRoute is null");
|
||||
}
|
||||
Slog.w(TAG, "addActiveRoute: btRoute is null");
|
||||
return;
|
||||
}
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "Adding active route: " + btRoute.route);
|
||||
}
|
||||
if (mActiveRoutes.contains(btRoute)) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, " btRoute is already added.");
|
||||
}
|
||||
Slog.w(TAG, "addActiveRoute: btRoute is already added.");
|
||||
return;
|
||||
}
|
||||
setRouteConnectionState(btRoute, STATE_CONNECTED);
|
||||
@@ -389,6 +385,12 @@ class BluetoothRouteProvider {
|
||||
private void addActiveDevices(BluetoothDevice device) {
|
||||
// Let the given device be the first active device
|
||||
BluetoothRouteInfo activeBtRoute = mBluetoothRoutes.get(device.getAddress());
|
||||
// This could happen if ACTION_ACTIVE_DEVICE_CHANGED is sent before
|
||||
// ACTION_CONNECTION_STATE_CHANGED is sent.
|
||||
if (activeBtRoute == null) {
|
||||
activeBtRoute = createBluetoothRoute(device);
|
||||
mBluetoothRoutes.put(device.getAddress(), activeBtRoute);
|
||||
}
|
||||
addActiveRoute(activeBtRoute);
|
||||
|
||||
// A bluetooth route with the same route ID should be added.
|
||||
|
||||
Reference in New Issue
Block a user