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

Commit 94e8aa41 authored by Jakub Tyszkowski's avatar Jakub Tyszkowski Committed by Jack He
Browse files

hap: Verify non null call parameters

Bug: 150670922
Bug: 218616250
Tag: #feature
Test: atest BluetoothInstrumentationTests
Sponsor: jpawlowski@
Change-Id: I53528602857b5e3f8233e0ab31bb36c7ffe3d73c
parent dcdbc746
Loading
Loading
Loading
Loading
+184 −50
Original line number Diff line number Diff line
@@ -1227,11 +1227,15 @@ public class HapClientService extends ProfileService {
        public void getConnectedDevices(AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                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) {
                    defaultValue = service.getConnectedDevices();
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                enforceBluetoothPrivilegedPermission(service);
                defaultValue = service.getConnectedDevices();
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
@@ -1242,11 +1246,15 @@ public class HapClientService extends ProfileService {
        public void getDevicesMatchingConnectionStates(int[] states,
                AttributionSource source, SynchronousResultReceiver receiver) {
            try {
                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) {
                    defaultValue = service.getDevicesMatchingConnectionStates(states);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                enforceBluetoothPrivilegedPermission(service);
                defaultValue = service.getDevicesMatchingConnectionStates(states);
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
@@ -1257,11 +1265,16 @@ public class HapClientService extends ProfileService {
        public void getConnectionState(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                Objects.requireNonNull(device, "device cannot be null");
                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) {
                    defaultValue = service.getConnectionState(device);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                enforceBluetoothPrivilegedPermission(service);
                defaultValue = service.getConnectionState(device);
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
@@ -1272,11 +1285,16 @@ public class HapClientService extends ProfileService {
        public void setConnectionPolicy(BluetoothDevice device, int connectionPolicy,
                AttributionSource source, SynchronousResultReceiver receiver) {
            try {
                Objects.requireNonNull(device, "device cannot be null");
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");
                boolean defaultValue = false;
                HapClientService service = getService(source);
                if (service != null) {
                    defaultValue = service.setConnectionPolicy(device, connectionPolicy);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                enforceBluetoothPrivilegedPermission(service);
                defaultValue = service.setConnectionPolicy(device, connectionPolicy);
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
@@ -1287,11 +1305,16 @@ public class HapClientService extends ProfileService {
        public void getConnectionPolicy(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                Objects.requireNonNull(device, "device cannot be null");
                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) {
                    defaultValue = service.getConnectionPolicy(device);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                enforceBluetoothPrivilegedPermission(service);
                defaultValue = service.getConnectionPolicy(device);
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
@@ -1302,11 +1325,16 @@ public class HapClientService extends ProfileService {
        public void getActivePresetIndex(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                Objects.requireNonNull(device, "device cannot be null");
                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) {
                    defaultValue = service.getActivePresetIndex(device);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                enforceBluetoothPrivilegedPermission(service);
                defaultValue = service.getActivePresetIndex(device);
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
@@ -1317,11 +1345,16 @@ public class HapClientService extends ProfileService {
        public void getActivePresetInfo(BluetoothDevice device,
                AttributionSource source, SynchronousResultReceiver receiver) {
            try {
                Objects.requireNonNull(device, "device cannot be null");
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");
                BluetoothHapPresetInfo defaultValue = null;
                HapClientService service = getService(source);
                if (service != null) {
                    defaultValue = service.getActivePresetInfo(device);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                enforceBluetoothPrivilegedPermission(service);
                defaultValue = service.getActivePresetInfo(device);
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
@@ -1332,11 +1365,16 @@ public class HapClientService extends ProfileService {
        public void getHapGroup(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                Objects.requireNonNull(device, "device cannot be null");
                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) {
                    defaultValue = service.getHapGroup(device);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                enforceBluetoothPrivilegedPermission(service);
                defaultValue = service.getHapGroup(device);
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
@@ -1346,61 +1384,115 @@ public class HapClientService extends ProfileService {
        @Override
        public void selectPreset(BluetoothDevice device, int presetIndex,
                AttributionSource source) {
            if (source == null) {
                Log.w(TAG, "source cannot be null");
                return;
            }

            HapClientService service = getService(source);
            if (service != null) {
                service.selectPreset(device, presetIndex);
            if (service == null) {
                Log.w(TAG, "service is null");
                return;
            }
            enforceBluetoothPrivilegedPermission(service);
            service.selectPreset(device, presetIndex);
        }

        @Override
        public void selectPresetForGroup(int groupId, int presetIndex, AttributionSource source) {
            if (source == null) {
                Log.w(TAG, "source cannot be null");
                return;
            }

            HapClientService service = getService(source);
            if (service != null) {
                service.selectPresetForGroup(groupId, presetIndex);
            if (service == null) {
                Log.w(TAG, "service is null");
                return;
            }
            enforceBluetoothPrivilegedPermission(service);
            service.selectPresetForGroup(groupId, presetIndex);
        }

        @Override
        public void switchToNextPreset(BluetoothDevice device, AttributionSource source) {
            if (source == null) {
                Log.w(TAG, "source cannot be null");
                return;
            }

            HapClientService service = getService(source);
            if (service != null) {
                service.switchToNextPreset(device);
            if (service == null) {
                Log.w(TAG, "service is null");
                return;
            }
            enforceBluetoothPrivilegedPermission(service);
            service.switchToNextPreset(device);
        }

        @Override
        public void switchToNextPresetForGroup(int groupId, AttributionSource source) {
            if (source == null) {
                Log.w(TAG, "source cannot be null");
                return;
            }

            HapClientService service = getService(source);
            if (service != null) {
                service.switchToNextPresetForGroup(groupId);
            if (service == null) {
                Log.w(TAG, "service is null");
                return;
            }
            enforceBluetoothPrivilegedPermission(service);
            service.switchToNextPresetForGroup(groupId);
        }

        @Override
        public void switchToPreviousPreset(BluetoothDevice device, AttributionSource source) {
            if (source == null) {
                Log.w(TAG, "source cannot be null");
                return;
            }

            HapClientService service = getService(source);
            if (service != null) {
                service.switchToPreviousPreset(device);
            if (service == null) {
                Log.w(TAG, "service is null");
                return;
            }
            enforceBluetoothPrivilegedPermission(service);
            service.switchToPreviousPreset(device);
        }

        @Override
        public void switchToPreviousPresetForGroup(int groupId, AttributionSource source) {
            if (source == null) {
                Log.w(TAG, "source cannot be null");
                return;
            }

            HapClientService service = getService(source);
            if (service != null) {
                service.switchToPreviousPresetForGroup(groupId);
            if (service == null) {
                Log.w(TAG, "service is null");
                return;
            }
            enforceBluetoothPrivilegedPermission(service);
            service.switchToPreviousPresetForGroup(groupId);
        }

        @Override
        public void getPresetInfo(BluetoothDevice device, int presetIndex,
                AttributionSource source, SynchronousResultReceiver receiver) {

            try {
                Objects.requireNonNull(device, "device cannot be null");
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");
                BluetoothHapPresetInfo defaultValue = null;
                HapClientService service = getService(source);
                if (service != null) {
                    defaultValue = service.getPresetInfo(device, presetIndex);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                enforceBluetoothPrivilegedPermission(service);
                defaultValue = service.getPresetInfo(device, presetIndex);
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
@@ -1411,11 +1503,16 @@ public class HapClientService extends ProfileService {
        public void getAllPresetInfo(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                Objects.requireNonNull(device, "device cannot be null");
                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) {
                    defaultValue = service.getAllPresetInfo(device);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                enforceBluetoothPrivilegedPermission(service);
                defaultValue = service.getAllPresetInfo(device);
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
@@ -1426,11 +1523,16 @@ public class HapClientService extends ProfileService {
        public void getFeatures(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                Objects.requireNonNull(device, "device cannot be null");
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");
                int defaultValue = 0x00;
                HapClientService service = getService(source);
                if (service != null) {
                    defaultValue = service.getFeatures(device);
                if (service == null) {
                    throw new IllegalStateException("service is null");
                }
                enforceBluetoothPrivilegedPermission(service);
                defaultValue = service.getFeatures(device);
                receiver.send(defaultValue);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
@@ -1440,31 +1542,60 @@ public class HapClientService extends ProfileService {
        @Override
        public void setPresetName(BluetoothDevice device, int presetIndex, String name,
                AttributionSource source) {
            if (device == null) {
                Log.w(TAG, "device cannot be null");
                return;
            }
            if (name == null) {
                Log.w(TAG, "name cannot be null");
                return;
            }
            if (source == null) {
                Log.w(TAG, "source cannot be null");
                return;
            }

            HapClientService service = getService(source);
            if (service != null) {
                service.setPresetName(device, presetIndex, name);
            if (service == null) {
                Log.w(TAG, "service is null");
                return;
            }
            enforceBluetoothPrivilegedPermission(service);
            service.setPresetName(device, presetIndex, name);
        }

        @Override
        public void setPresetNameForGroup(int groupId, int presetIndex, String name,
                AttributionSource source) {
            if (name == null) {
                Log.w(TAG, "name cannot be null");
                return;
            }
            if (source == null) {
                Log.w(TAG, "source cannot be null");
                return;
            }
            HapClientService service = getService(source);
            if (service != null) {
                service.setPresetNameForGroup(groupId, presetIndex, name);
            if (service == null) {
                Log.w(TAG, "service is null");
                return;
            }
            enforceBluetoothPrivilegedPermission(service);
            service.setPresetNameForGroup(groupId, presetIndex, name);
        }

        @Override
        public void registerCallback(IBluetoothHapClientCallback callback,
                AttributionSource source, SynchronousResultReceiver receiver) {
            try {
                Objects.requireNonNull(callback, "callback cannot be null");
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");
                HapClientService service = getService(source);
                if (service == null) {
                    throw new IllegalStateException("Service is unavailable");
                }

                enforceBluetoothPrivilegedPermission(service);
            try {
                service.mCallbacks.register(callback);
                receiver.send(null);
            } catch (RuntimeException e) {
@@ -1475,13 +1606,16 @@ public class HapClientService extends ProfileService {
        @Override
        public void unregisterCallback(IBluetoothHapClientCallback callback,
                AttributionSource source, SynchronousResultReceiver receiver) {
            try {
                Objects.requireNonNull(callback, "callback cannot be null");
                Objects.requireNonNull(source, "source cannot be null");
                Objects.requireNonNull(receiver, "receiver cannot be null");

                HapClientService service = getService(source);
                if (service == null) {
                    throw new IllegalStateException("Service is unavailable");
                }

                enforceBluetoothPrivilegedPermission(service);
            try {
                service.mCallbacks.unregister(callback);
                receiver.send(null);
            } catch (RuntimeException e) {