Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1cc0111c authored by Łukasz Rymanowski's avatar Łukasz Rymanowski
Browse files

HapClientService: Fix race on bluetooth turning off

When stressing BT ON/OFF it might happen that service is not available
when HapClientService is trying to get it.
In such case, let's be nice and do not throw exception

Bug: 324533075
Test: atest BluetoothHapClientTest
Flags: Exempt, trivial fix
Change-Id: I7519b7e5430acb1a3b1e64a8f862ee3f959bf6ea
parent da624dbe
Loading
Loading
Loading
Loading
+55 −55
Original line number Diff line number Diff line
@@ -1233,13 +1233,13 @@ public class HapClientService extends ProfileService {
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");

                List<BluetoothDevice> defaultValue = new ArrayList<>();
                HapClientService service = getService(source);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                if (service != null) {
                    enforceBluetoothPrivilegedPermission(service);
                List<BluetoothDevice> result = service.getConnectedDevices();
                receiver.send(result);
                    defaultValue = service.getConnectedDevices();
                }
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
@@ -1252,13 +1252,13 @@ public class HapClientService extends ProfileService {
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");

                List<BluetoothDevice> defaultValue = new ArrayList<>();
                HapClientService service = getService(source);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                if (service != null) {
                    enforceBluetoothPrivilegedPermission(service);
                List<BluetoothDevice> result = service.getDevicesMatchingConnectionStates(states);
                receiver.send(result);
                    defaultValue = service.getDevicesMatchingConnectionStates(states);
                }
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
@@ -1272,13 +1272,13 @@ public class HapClientService extends ProfileService {
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");

                int defaultValue = BluetoothProfile.STATE_DISCONNECTED;
                HapClientService service = getService(source);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                if (service != null) {
                    enforceBluetoothPrivilegedPermission(service);
                int result = service.getConnectionState(device);
                receiver.send(result);
                    defaultValue = service.getConnectionState(device);
                }
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
@@ -1292,13 +1292,13 @@ public class HapClientService extends ProfileService {
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");

                boolean defaultValue = false;
                HapClientService service = getService(source);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                if (service != null) {
                    enforceBluetoothPrivilegedPermission(service);
                boolean result = service.setConnectionPolicy(device, connectionPolicy);
                receiver.send(result);
                    defaultValue = service.setConnectionPolicy(device, connectionPolicy);
                }
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
@@ -1312,13 +1312,13 @@ public class HapClientService extends ProfileService {
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");

                int defaultValue = BluetoothProfile.CONNECTION_POLICY_UNKNOWN;
                HapClientService service = getService(source);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                if (service != null) {
                    enforceBluetoothPrivilegedPermission(service);
                int result = service.getConnectionPolicy(device);
                receiver.send(result);
                    defaultValue = service.getConnectionPolicy(device);
                }
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
@@ -1332,13 +1332,13 @@ public class HapClientService extends ProfileService {
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");

                int defaultValue = BluetoothHapClient.PRESET_INDEX_UNAVAILABLE;
                HapClientService service = getService(source);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                if (service != null) {
                    enforceBluetoothPrivilegedPermission(service);
                int result = service.getActivePresetIndex(device);
                receiver.send(result);
                    defaultValue = service.getActivePresetIndex(device);
                }
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
@@ -1352,13 +1352,13 @@ public class HapClientService extends ProfileService {
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");

                BluetoothHapPresetInfo defaultValue = null;
                HapClientService service = getService(source);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                if (service != null) {
                    enforceBluetoothPrivilegedPermission(service);
                BluetoothHapPresetInfo result = service.getActivePresetInfo(device);
                receiver.send(result);
                    defaultValue = service.getActivePresetInfo(device);
                }
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
@@ -1372,13 +1372,13 @@ public class HapClientService extends ProfileService {
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");

                int defaultValue = BluetoothCsipSetCoordinator.GROUP_ID_INVALID;
                HapClientService service = getService(source);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                if (service != null) {
                    enforceBluetoothPrivilegedPermission(service);
                int result = service.getHapGroup(device);
                receiver.send(result);
                    defaultValue = service.getHapGroup(device);
                }
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
@@ -1490,13 +1490,13 @@ public class HapClientService extends ProfileService {
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");

                BluetoothHapPresetInfo defaultValue = null;
                HapClientService service = getService(source);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                if (service != null) {
                    enforceBluetoothPrivilegedPermission(service);
                BluetoothHapPresetInfo result = service.getPresetInfo(device, presetIndex);
                receiver.send(result);
                    defaultValue = service.getPresetInfo(device, presetIndex);
                }
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
@@ -1510,13 +1510,13 @@ public class HapClientService extends ProfileService {
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");

                List<BluetoothHapPresetInfo> defaultValue = new ArrayList<>();
                HapClientService service = getService(source);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                if (service != null) {
                    enforceBluetoothPrivilegedPermission(service);
                List<BluetoothHapPresetInfo> result = service.getAllPresetInfo(device);
                receiver.send(result);
                    defaultValue = service.getAllPresetInfo(device);
                }
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
@@ -1530,13 +1530,13 @@ public class HapClientService extends ProfileService {
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");

                int defaultValue = 0x00;
                HapClientService service = getService(source);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                if (service != null) {
                    enforceBluetoothPrivilegedPermission(service);
                int result = service.getFeatures(device);
                receiver.send(result);
                    defaultValue = service.getFeatures(device);
                }
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }