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:
Kyunglyul Hyun
2022-06-10 19:49:16 +09:00
parent 47ecbaf0ad
commit c376e8c112

View File

@@ -345,18 +345,14 @@ class BluetoothRouteProvider {
private void addActiveRoute(BluetoothRouteInfo btRoute) { private void addActiveRoute(BluetoothRouteInfo btRoute) {
if (btRoute == null) { if (btRoute == null) {
if (DEBUG) { Slog.w(TAG, "addActiveRoute: btRoute is null");
Log.d(TAG, " btRoute is null");
}
return; return;
} }
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "Adding active route: " + btRoute.route); Log.d(TAG, "Adding active route: " + btRoute.route);
} }
if (mActiveRoutes.contains(btRoute)) { if (mActiveRoutes.contains(btRoute)) {
if (DEBUG) { Slog.w(TAG, "addActiveRoute: btRoute is already added.");
Log.d(TAG, " btRoute is already added.");
}
return; return;
} }
setRouteConnectionState(btRoute, STATE_CONNECTED); setRouteConnectionState(btRoute, STATE_CONNECTED);
@@ -389,6 +385,12 @@ class BluetoothRouteProvider {
private void addActiveDevices(BluetoothDevice device) { private void addActiveDevices(BluetoothDevice device) {
// Let the given device be the first active device // Let the given device be the first active device
BluetoothRouteInfo activeBtRoute = mBluetoothRoutes.get(device.getAddress()); 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); addActiveRoute(activeBtRoute);
// A bluetooth route with the same route ID should be added. // A bluetooth route with the same route ID should be added.