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

Commit 239b7849 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Force AttributionSource on all BluetoothDevice.

When unparceling an BluetoothDevice instance, we use the default
process-wide AttributionSource, but in the case of incoming AIDL
calls we know the AttributionSource that the remote caller intended
to use.  This change brings these arguments into alignment by forcing
the AttributionSource for the BluetoothDevice AIDL argument.

Longer term we should find a better way of transporting these
values in AIDL directly, but this is the safest mechanical change
to make at this late stage of the release.

Bug: 188391719
Test: atest BluetoothInstrumentationTests
Change-Id: I614bf590c97fa19e03dc8aabf2badea233f63a4a
parent 85eedeef
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.bluetooth.BluetoothProfile;
import android.bluetooth.BluetoothUuid;
import android.bluetooth.BufferConstraints;
import android.bluetooth.IBluetoothA2dp;
import android.content.Attributable;
import android.content.AttributionSource;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -1241,6 +1242,7 @@ public class A2dpService extends ProfileService {

        @Override
        public boolean connectWithAttribution(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpService service = getService(source);
            if (service == null) {
                return false;
@@ -1255,6 +1257,7 @@ public class A2dpService extends ProfileService {

        @Override
        public boolean disconnectWithAttribution(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpService service = getService(source);
            if (service == null) {
                return false;
@@ -1300,6 +1303,7 @@ public class A2dpService extends ProfileService {
        @Override
        public int getConnectionStateWithAttribution(BluetoothDevice device,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpService service = getService(source);
            if (service == null) {
                return BluetoothProfile.STATE_DISCONNECTED;
@@ -1309,6 +1313,7 @@ public class A2dpService extends ProfileService {

        @Override
        public boolean setActiveDevice(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpService service = getService(source);
            if (service == null) {
                return false;
@@ -1328,6 +1333,7 @@ public class A2dpService extends ProfileService {
        @Override
        public boolean setConnectionPolicy(BluetoothDevice device, int connectionPolicy,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpService service = getService(source);
            if (service == null) {
                return false;
@@ -1337,6 +1343,7 @@ public class A2dpService extends ProfileService {

        @Override
        public int getPriority(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpService service = getService(source);
            if (service == null) {
                return BluetoothProfile.CONNECTION_POLICY_UNKNOWN;
@@ -1346,6 +1353,7 @@ public class A2dpService extends ProfileService {

        @Override
        public int getConnectionPolicy(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpService service = getService(source);
            if (service == null) {
                return BluetoothProfile.CONNECTION_POLICY_UNKNOWN;
@@ -1371,6 +1379,7 @@ public class A2dpService extends ProfileService {

        @Override
        public boolean isA2dpPlaying(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpService service = getService(source);
            if (service == null) {
                return false;
@@ -1381,6 +1390,7 @@ public class A2dpService extends ProfileService {
        @Override
        public BluetoothCodecStatus getCodecStatus(BluetoothDevice device,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpService service = getService(source);
            if (service == null) {
                return null;
@@ -1391,6 +1401,7 @@ public class A2dpService extends ProfileService {
        @Override
        public void setCodecConfigPreference(BluetoothDevice device,
                BluetoothCodecConfig codecConfig, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpService service = getService(source);
            if (service == null) {
                return;
@@ -1400,6 +1411,7 @@ public class A2dpService extends ProfileService {

        @Override
        public void enableOptionalCodecs(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpService service = getService(source);
            if (service == null) {
                return;
@@ -1409,6 +1421,7 @@ public class A2dpService extends ProfileService {

        @Override
        public void disableOptionalCodecs(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpService service = getService(source);
            if (service == null) {
                return;
@@ -1418,6 +1431,7 @@ public class A2dpService extends ProfileService {

        @Override
        public int supportsOptionalCodecs(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpService service = getService(source);
            if (service == null) {
                return BluetoothA2dp.OPTIONAL_CODECS_SUPPORT_UNKNOWN;
@@ -1427,6 +1441,7 @@ public class A2dpService extends ProfileService {

        @Override
        public int getOptionalCodecsEnabled(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpService service = getService(source);
            if (service == null) {
                return BluetoothA2dp.OPTIONAL_CODECS_PREF_UNKNOWN;
@@ -1437,6 +1452,7 @@ public class A2dpService extends ProfileService {
        @Override
        public void setOptionalCodecsEnabled(BluetoothDevice device, int value,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpService service = getService(source);
            if (service == null) {
                return;
+8 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.bluetooth.BluetoothAudioConfig;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.bluetooth.IBluetoothA2dpSink;
import android.content.Attributable;
import android.content.AttributionSource;
import android.media.AudioManager;
import android.util.Log;
@@ -206,6 +207,7 @@ public class A2dpSinkService extends ProfileService {

        @Override
        public boolean connect(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpSinkService service = getService(source);
            if (service == null) {
                return false;
@@ -215,6 +217,7 @@ public class A2dpSinkService extends ProfileService {

        @Override
        public boolean disconnect(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpSinkService service = getService(source);
            if (service == null) {
                return false;
@@ -243,6 +246,7 @@ public class A2dpSinkService extends ProfileService {

        @Override
        public int getConnectionState(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpSinkService service = getService(source);
            if (service == null) {
                return BluetoothProfile.STATE_DISCONNECTED;
@@ -253,6 +257,7 @@ public class A2dpSinkService extends ProfileService {
        @Override
        public boolean setConnectionPolicy(BluetoothDevice device, int connectionPolicy,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpSinkService service = getService(source);
            if (service == null) {
                return false;
@@ -262,6 +267,7 @@ public class A2dpSinkService extends ProfileService {

        @Override
        public int getConnectionPolicy(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpSinkService service = getService(source);
            if (service == null) {
                return BluetoothProfile.CONNECTION_POLICY_UNKNOWN;
@@ -271,6 +277,7 @@ public class A2dpSinkService extends ProfileService {

        @Override
        public boolean isA2dpPlaying(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpSinkService service = getService(source);
            if (service == null) {
                return false;
@@ -281,6 +288,7 @@ public class A2dpSinkService extends ProfileService {
        @Override
        public BluetoothAudioConfig getAudioConfig(BluetoothDevice device,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            A2dpSinkService service = getService(source);
            if (service == null) {
                return null;
+4 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.bluetooth.BluetoothAvrcpPlayerSettings;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.bluetooth.IBluetoothAvrcpController;
import android.content.Attributable;
import android.content.AttributionSource;
import android.content.Intent;
import android.support.v4.media.MediaBrowserCompat.MediaItem;
@@ -387,6 +388,7 @@ public class AvrcpControllerService extends ProfileService {

        @Override
        public int getConnectionState(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AvrcpControllerService service = getService(source);
            if (service == null) {
                return BluetoothProfile.STATE_DISCONNECTED;
@@ -397,6 +399,7 @@ public class AvrcpControllerService extends ProfileService {
        @Override
        public void sendGroupNavigationCmd(BluetoothDevice device, int keyCode, int keyState,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AvrcpControllerService service = getService(source);
            if (service == null) {
                return;
@@ -418,6 +421,7 @@ public class AvrcpControllerService extends ProfileService {
        @Override
        public BluetoothAvrcpPlayerSettings getPlayerSettings(BluetoothDevice device,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AvrcpControllerService service = getService(source);
            if (service == null) {
                return null;
+35 −0
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ import android.bluetooth.IBluetoothSocketManager;
import android.bluetooth.OobData;
import android.bluetooth.UidTraffic;
import android.companion.CompanionDeviceManager;
import android.content.Attributable;
import android.content.AttributionSource;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -1560,6 +1561,7 @@ public class AdapterService extends Service {
        @Override
        public boolean createBond(BluetoothDevice device, int transport, OobData remoteP192Data,
                OobData remoteP256Data, AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null || !callerIsSystemOrActiveOrManagedUser(service, TAG, "createBond")
                    || !Utils.checkConnectPermissionForDataDelivery(
@@ -1579,6 +1581,7 @@ public class AdapterService extends Service {
        @Override
        public boolean cancelBondProcess(
                BluetoothDevice device, AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null || !callerIsSystemOrActiveUser(TAG, "cancelBondProcess")
                    || !Utils.checkConnectPermissionForDataDelivery(
@@ -1596,6 +1599,7 @@ public class AdapterService extends Service {

        @Override
        public boolean removeBond(BluetoothDevice device, AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null || !callerIsSystemOrActiveUser(TAG, "removeBond")
                    || !Utils.checkConnectPermissionForDataDelivery(
@@ -1619,6 +1623,7 @@ public class AdapterService extends Service {
        @Override
        public int getBondState(BluetoothDevice device, AttributionSource attributionSource) {
            // don't check caller, may be called from system UI
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null || !Utils.checkConnectPermissionForDataDelivery(
                    service, attributionSource, "AdapterService getBondState")) {
@@ -1632,6 +1637,7 @@ public class AdapterService extends Service {
        public boolean isBondingInitiatedLocally(
                BluetoothDevice device, AttributionSource attributionSource) {
            // don't check caller, may be called from system UI
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null || !Utils.checkConnectPermissionForDataDelivery(
                    service, attributionSource, "AdapterService isBondingInitiatedLocally")) {
@@ -1672,6 +1678,7 @@ public class AdapterService extends Service {
        @Override
        public int getConnectionStateWithAttribution(
                BluetoothDevice device, AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null || !Utils.checkConnectPermissionForDataDelivery(
                    service, attributionSource, "AdapterService getConnectionState")) {
@@ -1683,6 +1690,7 @@ public class AdapterService extends Service {

        @Override
        public boolean canBondWithoutDialog(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AdapterService service = getService();
            if (service == null
                    || !Utils.checkConnectPermissionForDataDelivery(service, source, TAG)) {
@@ -1709,6 +1717,7 @@ public class AdapterService extends Service {
        @Override
        public boolean setActiveDevice(BluetoothDevice device, @ActiveDeviceUse int profiles,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AdapterService service = getService();
            if (service == null
                    || !Utils.checkCallerIsSystemOrActiveUser(TAG)
@@ -1721,6 +1730,7 @@ public class AdapterService extends Service {
        @Override
        public boolean connectAllEnabledProfiles(BluetoothDevice device,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AdapterService service = getService();
            if (service == null
                    || !Utils.checkCallerIsSystemOrActiveUser(TAG)
@@ -1742,6 +1752,7 @@ public class AdapterService extends Service {
        @Override
        public boolean disconnectAllEnabledProfiles(BluetoothDevice device,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AdapterService service = getService();
            if (service == null
                    || !Utils.checkCallerIsSystemOrActiveUser(TAG)
@@ -1762,6 +1773,7 @@ public class AdapterService extends Service {

        @Override
        public String getRemoteName(BluetoothDevice device, AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null
                    || !callerIsSystemOrActiveOrManagedUser(service, TAG, "getRemoteName")
@@ -1775,6 +1787,7 @@ public class AdapterService extends Service {

        @Override
        public int getRemoteType(BluetoothDevice device, AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null
                    || !callerIsSystemOrActiveOrManagedUser(service, TAG, "getRemoteType")
@@ -1795,6 +1808,7 @@ public class AdapterService extends Service {
        @Override
        public String getRemoteAliasWithAttribution(
                BluetoothDevice device, AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null
                    || !callerIsSystemOrActiveOrManagedUser(service, TAG, "getRemoteAlias")
@@ -1810,6 +1824,7 @@ public class AdapterService extends Service {
        @Override
        public int setRemoteAlias(BluetoothDevice device, String name,
                AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null) {
                return BluetoothStatusCodes.ERROR_BLUETOOTH_NOT_ENABLED;
@@ -1840,6 +1855,7 @@ public class AdapterService extends Service {

        @Override
        public int getRemoteClass(BluetoothDevice device, AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null
                    || !callerIsSystemOrActiveOrManagedUser(service, TAG, "getRemoteClass")
@@ -1855,6 +1871,7 @@ public class AdapterService extends Service {
        @Override
        public ParcelUuid[] getRemoteUuids(
                BluetoothDevice device, AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null
                    || !callerIsSystemOrActiveOrManagedUser(service, TAG, "getRemoteUuids")
@@ -1874,6 +1891,7 @@ public class AdapterService extends Service {
        @Override
        public boolean fetchRemoteUuidsWithAttribution(
                BluetoothDevice device, AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null
                    || !callerIsSystemOrActiveOrManagedUser(service, TAG, "fetchRemoteUuids")
@@ -1890,6 +1908,7 @@ public class AdapterService extends Service {
        @Override
        public boolean setPin(BluetoothDevice device, boolean accept, int len, byte[] pinCode,
                AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null || !callerIsSystemOrActiveUser(TAG, "setPin")
                    || !Utils.checkConnectPermissionForDataDelivery(
@@ -1915,6 +1934,7 @@ public class AdapterService extends Service {
        @Override
        public boolean setPasskey(BluetoothDevice device, boolean accept, int len, byte[] passkey,
                AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null || !callerIsSystemOrActiveUser(TAG, "setPasskey")
                    || !Utils.checkConnectPermissionForDataDelivery(
@@ -1942,6 +1962,7 @@ public class AdapterService extends Service {
        @Override
        public boolean setPairingConfirmation(BluetoothDevice device, boolean accept,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AdapterService service = getService();
            if (service == null
                    || !Utils.checkCallerIsSystemOrActiveUser(TAG)
@@ -1965,6 +1986,7 @@ public class AdapterService extends Service {

        @Override
        public boolean getSilenceMode(BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AdapterService service = getService();
            if (service == null
                    || !Utils.checkCallerIsSystemOrActiveUser(TAG)
@@ -1981,6 +2003,7 @@ public class AdapterService extends Service {
        @Override
        public boolean setSilenceMode(BluetoothDevice device, boolean silence,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AdapterService service = getService();
            if (service == null
                    || !Utils.checkCallerIsSystemOrActiveUser(TAG)
@@ -1997,6 +2020,7 @@ public class AdapterService extends Service {
        @Override
        public int getPhonebookAccessPermission(
                BluetoothDevice device, AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null || !callerIsSystemOrActiveUser(TAG, "getPhonebookAccessPermission")
                    || !Utils.checkConnectPermissionForDataDelivery(
@@ -2010,6 +2034,7 @@ public class AdapterService extends Service {
        @Override
        public boolean setPhonebookAccessPermission(BluetoothDevice device, int value,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AdapterService service = getService();
            if (service == null
                    || !Utils.checkCallerIsSystemOrActiveUser(TAG)
@@ -2026,6 +2051,7 @@ public class AdapterService extends Service {
        @Override
        public int getMessageAccessPermission(
                BluetoothDevice device, AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null || !callerIsSystemOrActiveUser(TAG, "getMessageAccessPermission")
                    || !Utils.checkConnectPermissionForDataDelivery(
@@ -2039,6 +2065,7 @@ public class AdapterService extends Service {
        @Override
        public boolean setMessageAccessPermission(BluetoothDevice device, int value,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AdapterService service = getService();
            if (service == null
                    || !Utils.checkCallerIsSystemOrActiveUser(TAG)
@@ -2055,6 +2082,7 @@ public class AdapterService extends Service {
        @Override
        public int getSimAccessPermission(
                BluetoothDevice device, AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null || !callerIsSystemOrActiveUser(TAG, "getSimAccessPermission")
                    || !Utils.checkConnectPermissionForDataDelivery(
@@ -2068,6 +2096,7 @@ public class AdapterService extends Service {
        @Override
        public boolean setSimAccessPermission(BluetoothDevice device, int value,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AdapterService service = getService();
            if (service == null
                    || !Utils.checkCallerIsSystemOrActiveUser(TAG)
@@ -2094,6 +2123,7 @@ public class AdapterService extends Service {
        @Override
        public boolean sdpSearch(
                BluetoothDevice device, ParcelUuid uuid, AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null || !callerIsSystemOrActiveUser(TAG, "sdpSearch")
                    || !Utils.checkConnectPermissionForDataDelivery(
@@ -2110,6 +2140,7 @@ public class AdapterService extends Service {

        @Override
        public int getBatteryLevel(BluetoothDevice device, AttributionSource attributionSource) {
            Attributable.setAttributionSource(device, attributionSource);
            AdapterService service = getService();
            if (service == null || !callerIsSystemOrActiveUser(TAG, "getBatteryLevel")
                    || !Utils.checkConnectPermissionForDataDelivery(
@@ -2338,6 +2369,7 @@ public class AdapterService extends Service {
        @Override
        public boolean registerMetadataListener(IBluetoothMetadataListener listener,
                BluetoothDevice device, AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AdapterService service = getService();
            if (service == null
                    || !Utils.checkCallerIsSystemOrActiveUser(TAG)
@@ -2365,6 +2397,7 @@ public class AdapterService extends Service {
        @Override
        public boolean unregisterMetadataListener(BluetoothDevice device,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AdapterService service = getService();
            if (service == null
                    || !Utils.checkCallerIsSystemOrActiveUser(TAG)
@@ -2386,6 +2419,7 @@ public class AdapterService extends Service {
        @Override
        public boolean setMetadata(BluetoothDevice device, int key, byte[] value,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AdapterService service = getService();
            if (service == null
                    || !Utils.checkCallerIsSystemOrActiveUser(TAG)
@@ -2404,6 +2438,7 @@ public class AdapterService extends Service {
        @Override
        public byte[] getMetadata(BluetoothDevice device, int key,
                AttributionSource source) {
            Attributable.setAttributionSource(device, source);
            AdapterService service = getService();
            if (service == null
                    || !Utils.checkCallerIsSystemOrActiveUser(TAG)
+10 −0

File changed.

Preview size limit exceeded, changes collapsed.

Loading