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 follows, connectedProfiles
of the route will be managed.
Bug: 235311641
Test: confirm NPE is not thrown when receiving MT call with LE HS.
Merged-In: I931b3eb38704f23b96c80d70d121c27bef297c7b
Change-Id: I931b3eb38704f23b96c80d70d121c27bef297c7b
(cherry picked from commit c376e8c112)
This commit is contained in:
@@ -348,18 +348,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);
|
||||||
@@ -392,6 +388,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.
|
||||||
|
|||||||
Reference in New Issue
Block a user