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

Commit 3536f0cb authored by William Escande's avatar William Escande
Browse files

Remove allowBlocking from all BluetoothProfiles

Since Bluetooth is becoming a mainline module, it can no longer call the
allowBlocking hidden api.
Instead, all interface are moved to be oneway and use a synchronous data
to handle the return value.

Bug: 200200870
Test: Build + start Bt and play something on speaker
Tag: #refactor
Merged-In: Iced4c78d6b9d35d370b295d6cc001a40340a0c02
Change-Id: Iced4c78d6b9d35d370b295d6cc001a40340a0c02
parent 755909a5
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -105,6 +105,7 @@ android_app {
        "mmslib",
        "mmslib",
        "modules-utils-backgroundthread",
        "modules-utils-backgroundthread",
        "modules-utils-bytesmatcher",
        "modules-utils-bytesmatcher",
        "modules-utils-synchronous-result-receiver",
        "modules-utils-statemachine",
        "modules-utils-statemachine",
        "sap-api-java-static",
        "sap-api-java-static",
        "services.net",
        "services.net",
+194 −126
Original line number Original line Diff line number Diff line
@@ -51,6 +51,7 @@ import com.android.bluetooth.btservice.ServiceFactory;
import com.android.bluetooth.btservice.storage.DatabaseManager;
import com.android.bluetooth.btservice.storage.DatabaseManager;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.modules.utils.SynchronousResultReceiver;


import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;
import java.util.List;
@@ -1243,148 +1244,174 @@ public class A2dpService extends ProfileService {
        }
        }


        @Override
        @Override
        public boolean connect(BluetoothDevice device) {
        public void connect(BluetoothDevice device, SynchronousResultReceiver receiver) {
            if (mService == null) {
            connectWithAttribution(device, Utils.getCallingAttributionSource(mService), receiver);
                return false;
            }
            return connectWithAttribution(device,
                        Utils.getCallingAttributionSource(mService));
        }
        }


        @Override
        @Override
        public boolean connectWithAttribution(BluetoothDevice device, AttributionSource source) {
        public void connectWithAttribution(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                boolean result = false;
                return false;
                if (service != null) {
                    result = service.connect(device);
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.connect(device);
        }
        }


        @Override
        @Override
        public boolean disconnect(BluetoothDevice device) {
        public void disconnect(BluetoothDevice device, SynchronousResultReceiver receiver) {
            if (mService == null) {
            disconnectWithAttribution(device, Utils.getCallingAttributionSource(mService),
                return false;
                    receiver);
            }
            return disconnectWithAttribution(device,
                        Utils.getCallingAttributionSource(mService));
        }
        }


        @Override
        @Override
        public boolean disconnectWithAttribution(BluetoothDevice device, AttributionSource source) {
        public void disconnectWithAttribution(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                boolean result = false;
                return false;
                if (service != null) {
                    result = service.disconnect(device);
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.disconnect(device);
        }
        }


        @Override
        @Override
        public List<BluetoothDevice> getConnectedDevices() {
        public void getConnectedDevices(SynchronousResultReceiver receiver) {
            if (mService == null) {
            getConnectedDevicesWithAttribution(Utils.getCallingAttributionSource(mService),
                return new ArrayList<>(0);
                    receiver);
            }
            return getConnectedDevicesWithAttribution(
                        Utils.getCallingAttributionSource(mService));
        }
        }


        @Override
        @Override
        public List<BluetoothDevice> getConnectedDevicesWithAttribution(AttributionSource source) {
        public void getConnectedDevicesWithAttribution(AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                List<BluetoothDevice> connectedDevices = new ArrayList<>(0);
                return new ArrayList<>(0);
                if (service != null) {
                    connectedDevices = service.getConnectedDevices();
                }
                receiver.send(connectedDevices);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.getConnectedDevices();
        }
        }


        @Override
        @Override
        public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
        public void getDevicesMatchingConnectionStates(int[] states,
            if (mService == null) {
                SynchronousResultReceiver receiver) {
                return new ArrayList<>(0);
            getDevicesMatchingConnectionStatesWithAttribution(states,
            }
                    Utils.getCallingAttributionSource(mService), receiver);
            return getDevicesMatchingConnectionStatesWithAttribution(states,
                    Utils.getCallingAttributionSource(mService));
        }
        }


        @Override
        @Override
        public List<BluetoothDevice> getDevicesMatchingConnectionStatesWithAttribution(int[] states,
        public void getDevicesMatchingConnectionStatesWithAttribution(int[] states,
                AttributionSource source) {
                AttributionSource source, SynchronousResultReceiver receiver) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                List<BluetoothDevice> connectedDevices = new ArrayList<>(0);
                return new ArrayList<>(0);
                if (service != null) {
                    connectedDevices = service.getDevicesMatchingConnectionStates(states);
                }
                }
            return service.getDevicesMatchingConnectionStates(states);
                receiver.send(connectedDevices);
        }
            } catch (RuntimeException e) {

                receiver.propagateException(e);
        @Override
        public int getConnectionState(BluetoothDevice device) {
            if (mService == null) {
                return BluetoothProfile.STATE_DISCONNECTED;
            }
            }
            return getConnectionStateWithAttribution(device,
                        Utils.getCallingAttributionSource(mService));
        }
        }


        @Override
        @Override
        public int getConnectionStateWithAttribution(BluetoothDevice device,
        public void getConnectionState(BluetoothDevice device, SynchronousResultReceiver receiver) {
                AttributionSource source) {
            getConnectionStateWithAttribution(device, Utils.getCallingAttributionSource(mService),
            A2dpService service = getService(source);
                    receiver);
            if (service == null) {
                return BluetoothProfile.STATE_DISCONNECTED;
            }
            return service.getConnectionState(device);
        }
        }


        @Override
        @Override
        public boolean setActiveDevice(BluetoothDevice device, AttributionSource source) {
        public void getConnectionStateWithAttribution(BluetoothDevice device,
                AttributionSource source, SynchronousResultReceiver receiver) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                int state = BluetoothProfile.STATE_DISCONNECTED;
                return false;
                if (service != null) {
                    state = service.getConnectionState(device);
                }
                receiver.send(state);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.setActiveDevice(device);
        }
        }


        @Override
        @Override
        public BluetoothDevice getActiveDevice(AttributionSource source) {
        public void setActiveDevice(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                boolean result = false;
                return null;
                if (service != null) {
                    result = service.setActiveDevice(device);
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.getActiveDevice();
        }
        }


        @Override
        @Override
        public boolean setConnectionPolicy(BluetoothDevice device, int connectionPolicy,
        public void getActiveDevice(AttributionSource source, SynchronousResultReceiver receiver) {
                AttributionSource source) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                BluetoothDevice activeDevice = null;
                return false;
                if (service != null) {
                    activeDevice = service.getActiveDevice();
                }
                receiver.send(activeDevice);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.setConnectionPolicy(device, connectionPolicy);
        }
        }


        @Override
        @Override
        public int getPriority(BluetoothDevice device, AttributionSource source) {
        public void setConnectionPolicy(BluetoothDevice device, int connectionPolicy,
                AttributionSource source, SynchronousResultReceiver receiver) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                boolean result = false;
                return BluetoothProfile.CONNECTION_POLICY_UNKNOWN;
                if (service != null) {
                    result = service.setConnectionPolicy(device, connectionPolicy);
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.getConnectionPolicy(device);
        }
        }


        @Override
        @Override
        public int getConnectionPolicy(BluetoothDevice device, AttributionSource source) {
        public void getConnectionPolicy(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                int result = BluetoothProfile.CONNECTION_POLICY_UNKNOWN;
                return BluetoothProfile.CONNECTION_POLICY_UNKNOWN;
                if (service != null) {
            }
                    enforceBluetoothPrivilegedPermission(service);
                    enforceBluetoothPrivilegedPermission(service);
            return service.getConnectionPolicy(device);
                    result = service.getConnectionPolicy(device);
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
        }
        }


        @Override
        @Override
        public boolean isAvrcpAbsoluteVolumeSupported() {
        public void isAvrcpAbsoluteVolumeSupported(SynchronousResultReceiver receiver) {
            // TODO (apanicke): Add a hook here for the AvrcpTargetService.
            // TODO (apanicke): Add a hook here for the AvrcpTargetService.
            return false;
            receiver.send(false);
        }
        }


        @Override
        @Override
@@ -1397,22 +1424,33 @@ public class A2dpService extends ProfileService {
        }
        }


        @Override
        @Override
        public boolean isA2dpPlaying(BluetoothDevice device, AttributionSource source) {
        public void isA2dpPlaying(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                boolean result = false;
                return false;
                if (service != null) {
                    result = service.isA2dpPlaying(device);
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.isA2dpPlaying(device);
        }
        }


        @Override
        @Override
        public BluetoothCodecStatus getCodecStatus(BluetoothDevice device,
        public void getCodecStatus(BluetoothDevice device,
                AttributionSource source) {
                AttributionSource source, SynchronousResultReceiver receiver) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                BluetoothCodecStatus codecStatus = null;
                return null;
                if (service != null) {
                    codecStatus = service.getCodecStatus(device);
                }
                receiver.send(codecStatus);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.getCodecStatus(device);
        }
        }


        @Override
        @Override
@@ -1444,21 +1482,33 @@ public class A2dpService extends ProfileService {
        }
        }


        @Override
        @Override
        public int supportsOptionalCodecs(BluetoothDevice device, AttributionSource source) {
        public void supportsOptionalCodecs(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                int codecSupport = BluetoothA2dp.OPTIONAL_CODECS_SUPPORT_UNKNOWN;
                return BluetoothA2dp.OPTIONAL_CODECS_SUPPORT_UNKNOWN;
                if (service != null) {
                    codecSupport = service.getSupportsOptionalCodecs(device);
                }
                receiver.send(codecSupport);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.getSupportsOptionalCodecs(device);
        }
        }


        @Override
        @Override
        public int getOptionalCodecsEnabled(BluetoothDevice device, AttributionSource source) {
        public void getOptionalCodecsEnabled(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                int optionalCodecEnabled = BluetoothA2dp.OPTIONAL_CODECS_PREF_UNKNOWN;
                return BluetoothA2dp.OPTIONAL_CODECS_PREF_UNKNOWN;
                if (service != null) {
                    optionalCodecEnabled = service.getOptionalCodecsEnabled(device);
                }
                receiver.send(optionalCodecEnabled);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.getOptionalCodecsEnabled(device);
        }
        }


        @Override
        @Override
@@ -1472,30 +1522,48 @@ public class A2dpService extends ProfileService {
        }
        }


        @Override
        @Override
        public int getDynamicBufferSupport(AttributionSource source) {
        public void getDynamicBufferSupport(AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                int bufferSupport = BluetoothA2dp.DYNAMIC_BUFFER_SUPPORT_NONE;
                return BluetoothA2dp.DYNAMIC_BUFFER_SUPPORT_NONE;
                if (service != null) {
                    bufferSupport = service.getDynamicBufferSupport();
                }
                receiver.send(bufferSupport);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.getDynamicBufferSupport();
        }
        }


        @Override
        @Override
        public BufferConstraints getBufferConstraints(AttributionSource source) {
        public void getBufferConstraints(AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                BufferConstraints bufferConstraints = null;
                return null;
                if (service != null) {
                    bufferConstraints = service.getBufferConstraints();
                }
                receiver.send(bufferConstraints);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.getBufferConstraints();
        }
        }


        @Override
        @Override
        public boolean setBufferLengthMillis(int codec, int value, AttributionSource source) {
        public void setBufferLengthMillis(int codec, int value, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpService service = getService(source);
                A2dpService service = getService(source);
            if (service == null) {
                boolean result = false;
                return false;
                if (service != null) {
                    result = service.setBufferLengthMillis(codec, value);
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.setBufferLengthMillis(codec, value);
        }
        }
    }
    }


+100 −48
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.bluetooth.btservice.AdapterService;
import com.android.bluetooth.btservice.ProfileService;
import com.android.bluetooth.btservice.ProfileService;
import com.android.bluetooth.btservice.storage.DatabaseManager;
import com.android.bluetooth.btservice.storage.DatabaseManager;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.modules.utils.SynchronousResultReceiver;


import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Arrays;
@@ -208,87 +209,138 @@ public class A2dpSinkService extends ProfileService {
        }
        }


        @Override
        @Override
        public boolean connect(BluetoothDevice device, AttributionSource source) {
        public void connect(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpSinkService service = getService(source);
                A2dpSinkService service = getService(source);
            if (service == null) {
                boolean result = false;
                return false;
                if (service != null) {
                    result = service.connect(device);
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.connect(device);
        }
        }


        @Override
        @Override
        public boolean disconnect(BluetoothDevice device, AttributionSource source) {
        public void disconnect(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpSinkService service = getService(source);
                A2dpSinkService service = getService(source);
            if (service == null) {
                boolean result = false;
                return false;
                if (service != null) {
                    result = service.disconnect(device);
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.disconnect(device);
        }
        }


        @Override
        @Override
        public List<BluetoothDevice> getConnectedDevices(AttributionSource source) {
        public void getConnectedDevices(AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpSinkService service = getService(source);
                A2dpSinkService service = getService(source);
            if (service == null) {
                List<BluetoothDevice> result = new ArrayList<BluetoothDevice>(0);
                return new ArrayList<BluetoothDevice>(0);
                if (service != null) {
                    result = service.getConnectedDevices();
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.getConnectedDevices();
        }
        }


        @Override
        @Override
        public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states,
        public void getDevicesMatchingConnectionStates(int[] states,
                AttributionSource source) {
                AttributionSource source, SynchronousResultReceiver receiver) {
            try {
                A2dpSinkService service = getService(source);
                A2dpSinkService service = getService(source);
            if (service == null) {
                List<BluetoothDevice> result = new ArrayList<BluetoothDevice>(0);
                return new ArrayList<BluetoothDevice>(0);
                if (service != null) {
                    result = service.getDevicesMatchingConnectionStates(states);
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.getDevicesMatchingConnectionStates(states);
        }
        }


        @Override
        @Override
        public int getConnectionState(BluetoothDevice device, AttributionSource source) {
        public void getConnectionState(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpSinkService service = getService(source);
                A2dpSinkService service = getService(source);
            if (service == null) {
                int result = BluetoothProfile.STATE_DISCONNECTED;
                return BluetoothProfile.STATE_DISCONNECTED;
                if (service != null) {
                    result = service.getConnectionState(device);
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.getConnectionState(device);
        }
        }


        @Override
        @Override
        public boolean setConnectionPolicy(BluetoothDevice device, int connectionPolicy,
        public void setConnectionPolicy(BluetoothDevice device, int connectionPolicy,
                AttributionSource source) {
                AttributionSource source, SynchronousResultReceiver receiver) {
            try {
                A2dpSinkService service = getService(source);
                A2dpSinkService service = getService(source);
            if (service == null) {
                boolean result = false;
                return false;
                if (service != null) {
                    result = service.setConnectionPolicy(device, connectionPolicy);
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.setConnectionPolicy(device, connectionPolicy);
        }
        }


        @Override
        @Override
        public int getConnectionPolicy(BluetoothDevice device, AttributionSource source) {
        public void getConnectionPolicy(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpSinkService service = getService(source);
                A2dpSinkService service = getService(source);
            if (service == null) {
                int result = BluetoothProfile.CONNECTION_POLICY_UNKNOWN;
                return BluetoothProfile.CONNECTION_POLICY_UNKNOWN;
                if (service != null) {
                    result = service.getConnectionPolicy(device);
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.getConnectionPolicy(device);
        }
        }


        @Override
        @Override
        public boolean isA2dpPlaying(BluetoothDevice device, AttributionSource source) {
        public void isA2dpPlaying(BluetoothDevice device, AttributionSource source,
                SynchronousResultReceiver receiver) {
            try {
                A2dpSinkService service = getService(source);
                A2dpSinkService service = getService(source);
            if (service == null) {
                boolean result = false;
                return false;
                if (service != null) {
                    result = service.isA2dpPlaying(device);
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.isA2dpPlaying(device);
        }
        }


        @Override
        @Override
        public BluetoothAudioConfig getAudioConfig(BluetoothDevice device,
        public void getAudioConfig(BluetoothDevice device,
                AttributionSource source) {
                AttributionSource source, SynchronousResultReceiver receiver) {
            try {
                A2dpSinkService service = getService(source);
                A2dpSinkService service = getService(source);
            if (service == null) {
                BluetoothAudioConfig result = null;
                return null;
                if (service != null) {
                    result = service.getAudioConfig(device);
                }
                receiver.send(result);
            } catch (RuntimeException e) {
                receiver.propagateException(e);
            }
            }
            return service.getAudioConfig(device);
        }
        }
    }
    }


+57 −35

File changed.

Preview size limit exceeded, changes collapsed.

+133 −68

File changed.

Preview size limit exceeded, changes collapsed.

Loading