1 /*
2  * Copyright 2008, The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.bluetooth;
18 
19 import android.app.PendingIntent;
20 import android.bluetooth.IBluetoothActivityEnergyInfoListener;
21 import android.bluetooth.IBluetoothGatt;
22 import android.bluetooth.IBluetoothPreferredAudioProfilesCallback;
23 import android.bluetooth.IBluetoothQualityReportReadyCallback;
24 import android.bluetooth.IBluetoothCallback;
25 import android.bluetooth.IBluetoothConnectionCallback;
26 import android.bluetooth.IBluetoothMetadataListener;
27 import android.bluetooth.IBluetoothOobDataCallback;
28 import android.bluetooth.IBluetoothSocketManager;
29 import android.bluetooth.BluetoothActivityEnergyInfo;
30 import android.bluetooth.BluetoothSinkAudioPolicy;
31 import android.bluetooth.BluetoothClass;
32 import android.bluetooth.BluetoothDevice;
33 import android.bluetooth.BluetoothQualityReport;
34 import android.bluetooth.IncomingRfcommSocketInfo;
35 import android.bluetooth.OobData;
36 import android.content.AttributionSource;
37 import android.os.Bundle;
38 import android.os.ParcelUuid;
39 import android.os.ParcelFileDescriptor;
40 import android.os.ResultReceiver;
41 
42 /**
43  * System private API for talking with the Bluetooth service.
44  *
45  * {@hide}
46  */
47 interface IBluetooth
48 {
49     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
getState()50     int getState();
51 
52     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT},anyOf={android.Manifest.permission.INTERACT_ACROSS_USERS,android.Manifest.permission.MANAGE_USERS})")
enable(boolean quietMode, in AttributionSource attributionSource)53     oneway void enable(boolean quietMode, in AttributionSource attributionSource);
54     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
disable(in AttributionSource attributionSource)55     oneway void disable(in AttributionSource attributionSource);
56 
57     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.LOCAL_MAC_ADDRESS})")
getAddress(in AttributionSource attributionSource)58     String getAddress(in AttributionSource attributionSource);
59     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
isLogRedactionEnabled()60     boolean isLogRedactionEnabled();
61     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getUuids(in AttributionSource attributionSource)62     List<ParcelUuid> getUuids(in AttributionSource attributionSource);
63     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
setName(in String name, in AttributionSource attributionSource)64     boolean setName(in String name, in AttributionSource attributionSource);
65     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
getIdentityAddress(in String address)66     String getIdentityAddress(in String address);
67     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getName(in AttributionSource attributionSource)68     String getName(in AttributionSource attributionSource);
69     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE)")
getNameLengthForAdvertise(in AttributionSource attributionSource)70     int getNameLengthForAdvertise(in AttributionSource attributionSource);
71 
72     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
getScanMode(in AttributionSource attributionSource)73     int getScanMode(in AttributionSource attributionSource);
74     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
setScanMode(int mode, in AttributionSource attributionSource)75     int setScanMode(int mode, in AttributionSource attributionSource);
76 
77     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
getDiscoverableTimeout(in AttributionSource attributionSource)78     long getDiscoverableTimeout(in AttributionSource attributionSource);
79     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
setDiscoverableTimeout(long timeout, in AttributionSource attributionSource)80     int setDiscoverableTimeout(long timeout, in AttributionSource attributionSource);
81 
82     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
startDiscovery(in AttributionSource attributionSource)83     boolean startDiscovery(in AttributionSource attributionSource);
84     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
cancelDiscovery(in AttributionSource attributionSource)85     boolean cancelDiscovery(in AttributionSource attributionSource);
86     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
isDiscovering(in AttributionSource attributionSource)87     boolean isDiscovering(in AttributionSource attributionSource);
88     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
getDiscoveryEndMillis(in AttributionSource attributionSource)89     long getDiscoveryEndMillis(in AttributionSource attributionSource);
90 
91     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
getAdapterConnectionState()92     int getAdapterConnectionState();
93     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getProfileConnectionState(int profile, in AttributionSource source)94     int getProfileConnectionState(int profile, in AttributionSource source);
95 
96     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getBondedDevices(in AttributionSource attributionSource)97     List<BluetoothDevice> getBondedDevices(in AttributionSource attributionSource);
98     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
createBond(in BluetoothDevice device, in int transport, in OobData p192Data, in OobData p256Data, in AttributionSource attributionSource)99     boolean createBond(in BluetoothDevice device, in int transport, in OobData p192Data, in OobData p256Data, in AttributionSource attributionSource);
100     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
cancelBondProcess(in BluetoothDevice device, in AttributionSource attributionSource)101     boolean cancelBondProcess(in BluetoothDevice device, in AttributionSource attributionSource);
102     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
removeBond(in BluetoothDevice device, in AttributionSource attributionSource)103     boolean removeBond(in BluetoothDevice device, in AttributionSource attributionSource);
104     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getBondState(in BluetoothDevice device, in AttributionSource attributionSource)105     int getBondState(in BluetoothDevice device, in AttributionSource attributionSource);
106     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
isBondingInitiatedLocally(in BluetoothDevice device, in AttributionSource attributionSource)107     boolean isBondingInitiatedLocally(in BluetoothDevice device, in AttributionSource attributionSource);
108     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
getSupportedProfiles(in AttributionSource attributionSource)109     long getSupportedProfiles(in AttributionSource attributionSource);
110     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getConnectionState(in BluetoothDevice device, in AttributionSource attributionSource)111     int getConnectionState(in BluetoothDevice device, in AttributionSource attributionSource);
112     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
getConnectionHandle(in BluetoothDevice device, int transport, in AttributionSource attributionSource)113     int getConnectionHandle(in BluetoothDevice device, int transport, in AttributionSource attributionSource);
114     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getRemoteName(in BluetoothDevice device, in AttributionSource attributionSource)115     String getRemoteName(in BluetoothDevice device, in AttributionSource attributionSource);
116     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getRemoteType(in BluetoothDevice device, in AttributionSource attributionSource)117     int getRemoteType(in BluetoothDevice device, in AttributionSource attributionSource);
118     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getRemoteAlias(in BluetoothDevice device, in AttributionSource attributionSource)119     String getRemoteAlias(in BluetoothDevice device, in AttributionSource attributionSource);
120     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT})")
setRemoteAlias(in BluetoothDevice device, in String name, in AttributionSource attributionSource)121     int setRemoteAlias(in BluetoothDevice device, in String name, in AttributionSource attributionSource);
122     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getRemoteClass(in BluetoothDevice device, in AttributionSource attributionSource)123     int getRemoteClass(in BluetoothDevice device, in AttributionSource attributionSource);
124     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getRemoteUuids(in BluetoothDevice device, in AttributionSource attributionSource)125     List<ParcelUuid> getRemoteUuids(in BluetoothDevice device, in AttributionSource attributionSource);
126     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
fetchRemoteUuids(in BluetoothDevice device, in int transport, in AttributionSource attributionSource)127     boolean fetchRemoteUuids(in BluetoothDevice device, in int transport, in AttributionSource attributionSource);
128     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
sdpSearch(in BluetoothDevice device, in ParcelUuid uuid, in AttributionSource attributionSource)129     boolean sdpSearch(in BluetoothDevice device, in ParcelUuid uuid, in AttributionSource attributionSource);
130     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getBatteryLevel(in BluetoothDevice device, in AttributionSource attributionSource)131     int getBatteryLevel(in BluetoothDevice device, in AttributionSource attributionSource);
132     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getMaxConnectedAudioDevices(in AttributionSource attributionSource)133     int getMaxConnectedAudioDevices(in AttributionSource attributionSource);
134 
135     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
setPin(in BluetoothDevice device, boolean accept, int len, in byte[] pinCode, in AttributionSource attributionSource)136     boolean setPin(in BluetoothDevice device, boolean accept, int len, in byte[] pinCode, in AttributionSource attributionSource);
137     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
setPasskey(in BluetoothDevice device, boolean accept, int len, in byte[] passkey, in AttributionSource attributionSource)138     boolean setPasskey(in BluetoothDevice device, boolean accept, int len, in byte[] passkey, in AttributionSource attributionSource);
139     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
setPairingConfirmation(in BluetoothDevice device, boolean accept, in AttributionSource attributionSource)140     boolean setPairingConfirmation(in BluetoothDevice device, boolean accept, in AttributionSource attributionSource);
141 
142     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getPhonebookAccessPermission(in BluetoothDevice device, in AttributionSource attributionSource)143     int getPhonebookAccessPermission(in BluetoothDevice device, in AttributionSource attributionSource);
144     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
setSilenceMode(in BluetoothDevice device, boolean silence, in AttributionSource attributionSource)145     boolean setSilenceMode(in BluetoothDevice device, boolean silence, in AttributionSource attributionSource);
146     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
getSilenceMode(in BluetoothDevice device, in AttributionSource attributionSource)147     boolean getSilenceMode(in BluetoothDevice device, in AttributionSource attributionSource);
148     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
setPhonebookAccessPermission(in BluetoothDevice device, int value, in AttributionSource attributionSource)149     boolean setPhonebookAccessPermission(in BluetoothDevice device, int value, in AttributionSource attributionSource);
150     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getMessageAccessPermission(in BluetoothDevice device, in AttributionSource attributionSource)151     int getMessageAccessPermission(in BluetoothDevice device, in AttributionSource attributionSource);
152     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
setMessageAccessPermission(in BluetoothDevice device, int value, in AttributionSource attributionSource)153     boolean setMessageAccessPermission(in BluetoothDevice device, int value, in AttributionSource attributionSource);
154     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getSimAccessPermission(in BluetoothDevice device, in AttributionSource attributionSource)155     int getSimAccessPermission(in BluetoothDevice device, in AttributionSource attributionSource);
156     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
setSimAccessPermission(in BluetoothDevice device, int value, in AttributionSource attributionSource)157     boolean setSimAccessPermission(in BluetoothDevice device, int value, in AttributionSource attributionSource);
158 
159     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
registerCallback(in IBluetoothCallback callback, in AttributionSource attributionSource)160     oneway void registerCallback(in IBluetoothCallback callback, in AttributionSource attributionSource);
161     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
unregisterCallback(in IBluetoothCallback callback, in AttributionSource attributionSource)162     oneway void unregisterCallback(in IBluetoothCallback callback, in AttributionSource attributionSource);
163 
164     // For Socket
165     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
logL2capcocServerConnection(in BluetoothDevice device, int port, boolean isSecured, int result, long socketCreationTimeMillis, long socketCreationLatencyMillis, long socketConnectionTimeMillis, long timeoutMillis)166     void logL2capcocServerConnection(in BluetoothDevice device, int port, boolean isSecured, int result, long socketCreationTimeMillis, long socketCreationLatencyMillis, long socketConnectionTimeMillis, long timeoutMillis);
167 
168     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
getSocketManager()169     IBluetoothSocketManager getSocketManager();
170 
171     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
logL2capcocClientConnection(in BluetoothDevice device, int port, boolean isSecured, int result, long socketCreationTimeNanos, long socketCreationLatencyNanos, long socketConnectionTimeNanos)172     void logL2capcocClientConnection(in BluetoothDevice device, int port, boolean isSecured, int result, long socketCreationTimeNanos, long socketCreationLatencyNanos, long socketConnectionTimeNanos);
173     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
logRfcommConnectionAttempt(in BluetoothDevice device, boolean isSecured, int resultCode, long socketCreationTimeNanos, boolean isSerialPort)174     void logRfcommConnectionAttempt(in BluetoothDevice device, boolean isSecured, int resultCode, long socketCreationTimeNanos, boolean isSerialPort);
175 
176     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
factoryReset(in AttributionSource attributionSource)177     boolean factoryReset(in AttributionSource attributionSource);
178 
179     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
isMultiAdvertisementSupported()180     boolean isMultiAdvertisementSupported();
181     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
isOffloadedFilteringSupported()182     boolean isOffloadedFilteringSupported();
183     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
isOffloadedScanBatchingSupported()184     boolean isOffloadedScanBatchingSupported();
185     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
isActivityAndEnergyReportingSupported()186     boolean isActivityAndEnergyReportingSupported();
187     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
isLe2MPhySupported()188     boolean isLe2MPhySupported();
189     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
isLeCodedPhySupported()190     boolean isLeCodedPhySupported();
191     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
isLeExtendedAdvertisingSupported()192     boolean isLeExtendedAdvertisingSupported();
193     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
isLePeriodicAdvertisingSupported()194     boolean isLePeriodicAdvertisingSupported();
195     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
isLeAudioSupported()196     int isLeAudioSupported();
197     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
isLeAudioBroadcastSourceSupported()198     int isLeAudioBroadcastSourceSupported();
199     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
isLeAudioBroadcastAssistantSupported()200     int isLeAudioBroadcastAssistantSupported();
201     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
isDistanceMeasurementSupported(in AttributionSource attributionSource)202     int isDistanceMeasurementSupported(in AttributionSource attributionSource);
203     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
getLeMaximumAdvertisingDataLength()204     int getLeMaximumAdvertisingDataLength();
205 
206     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
reportActivityInfo(in AttributionSource attributionSource)207     BluetoothActivityEnergyInfo reportActivityInfo(in AttributionSource attributionSource);
208 
209     // For Metadata
210     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
registerMetadataListener(in IBluetoothMetadataListener listener, in BluetoothDevice device, in AttributionSource attributionSource)211     boolean registerMetadataListener(in IBluetoothMetadataListener listener, in BluetoothDevice device, in AttributionSource attributionSource);
212     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
unregisterMetadataListener(in BluetoothDevice device, in AttributionSource attributionSource)213     boolean unregisterMetadataListener(in BluetoothDevice device, in AttributionSource attributionSource);
214     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
setMetadata(in BluetoothDevice device, in int key, in byte[] value, in AttributionSource attributionSource)215     boolean setMetadata(in BluetoothDevice device, in int key, in byte[] value, in AttributionSource attributionSource);
216     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
getMetadata(in BluetoothDevice device, in int key, in AttributionSource attributionSource)217     byte[] getMetadata(in BluetoothDevice device, in int key, in AttributionSource attributionSource);
218 
219     /**
220      * Requests the controller activity info asynchronously.
221      * The implementor is expected to reply with the
222      * {@link android.bluetooth.BluetoothActivityEnergyInfo} object placed into the Bundle with the
223      * key {@link android.os.BatteryStats#RESULT_RECEIVER_CONTROLLER_KEY}.
224      * The result code is ignored.
225      */
226     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
requestActivityInfo(in IBluetoothActivityEnergyInfoListener listener, in AttributionSource attributionSource)227     oneway void requestActivityInfo(in IBluetoothActivityEnergyInfoListener listener, in AttributionSource attributionSource);
228 
229     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
startBrEdr(in AttributionSource attributionSource)230     oneway void startBrEdr(in AttributionSource attributionSource);
231     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
stopBle(in AttributionSource attributionSource)232     oneway void stopBle(in AttributionSource attributionSource);
233 
234     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED,android.Manifest.permission.MODIFY_PHONE_STATE})")
connectAllEnabledProfiles(in BluetoothDevice device, in AttributionSource attributionSource)235     int connectAllEnabledProfiles(in BluetoothDevice device, in AttributionSource attributionSource);
236     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
disconnectAllEnabledProfiles(in BluetoothDevice device, in AttributionSource attributionSource)237     int disconnectAllEnabledProfiles(in BluetoothDevice device, in AttributionSource attributionSource);
238 
239     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED,android.Manifest.permission.MODIFY_PHONE_STATE})")
setActiveDevice(in BluetoothDevice device, in int profiles, in AttributionSource attributionSource)240     boolean setActiveDevice(in BluetoothDevice device, in int profiles, in AttributionSource attributionSource);
241     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
getActiveDevices(in int profile, in AttributionSource attributionSource)242     List<BluetoothDevice> getActiveDevices(in int profile, in AttributionSource attributionSource);
243     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
getMostRecentlyConnectedDevices(in AttributionSource attributionSource)244     List<BluetoothDevice> getMostRecentlyConnectedDevices(in AttributionSource attributionSource);
245     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED,android.Manifest.permission.MODIFY_PHONE_STATE})")
removeActiveDevice(in int profiles, in AttributionSource attributionSource)246     boolean removeActiveDevice(in int profiles, in AttributionSource attributionSource);
247 
248     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
registerBluetoothConnectionCallback(in IBluetoothConnectionCallback callback, in AttributionSource attributionSource)249     oneway void registerBluetoothConnectionCallback(in IBluetoothConnectionCallback callback, in AttributionSource attributionSource);
250     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
unregisterBluetoothConnectionCallback(in IBluetoothConnectionCallback callback, in AttributionSource attributionSource)251     oneway void unregisterBluetoothConnectionCallback(in IBluetoothConnectionCallback callback, in AttributionSource attributionSource);
252 
253     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
canBondWithoutDialog(in BluetoothDevice device, in AttributionSource attributionSource)254     boolean canBondWithoutDialog(in BluetoothDevice device, in AttributionSource attributionSource);
255     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
getPackageNameOfBondingApplication(in BluetoothDevice device)256     String getPackageNameOfBondingApplication(in BluetoothDevice device);
257     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
generateLocalOobData(in int transport, IBluetoothOobDataCallback callback, in AttributionSource attributionSource)258     void generateLocalOobData(in int transport, IBluetoothOobDataCallback callback, in AttributionSource attributionSource);
259 
260     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
allowLowLatencyAudio(in boolean allowed, in BluetoothDevice device)261     boolean allowLowLatencyAudio(in boolean allowed, in BluetoothDevice device);
262 
263     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
isRequestAudioPolicyAsSinkSupported(in BluetoothDevice device, in AttributionSource attributionSource)264     int isRequestAudioPolicyAsSinkSupported(in BluetoothDevice device, in AttributionSource attributionSource);
265     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
requestAudioPolicyAsSink(in BluetoothDevice device, in BluetoothSinkAudioPolicy policies, in AttributionSource attributionSource)266     int requestAudioPolicyAsSink(in BluetoothDevice device, in BluetoothSinkAudioPolicy policies, in AttributionSource attributionSource);
267     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getRequestedAudioPolicyAsSink(in BluetoothDevice device, in AttributionSource attributionSource)268     BluetoothSinkAudioPolicy getRequestedAudioPolicyAsSink(in BluetoothDevice device, in AttributionSource attributionSource);
269 
270     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
startRfcommListener(String name, in ParcelUuid uuid, in PendingIntent intent, in AttributionSource attributionSource)271     int startRfcommListener(String name, in ParcelUuid uuid, in PendingIntent intent, in AttributionSource attributionSource);
272     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
stopRfcommListener(in ParcelUuid uuid, in AttributionSource attributionSource)273     int stopRfcommListener(in ParcelUuid uuid, in AttributionSource attributionSource);
274     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
retrievePendingSocketForServiceRecord(in ParcelUuid uuid, in AttributionSource attributionSource)275     IncomingRfcommSocketInfo retrievePendingSocketForServiceRecord(in ParcelUuid uuid, in AttributionSource attributionSource);
276 
277     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
setForegroundUserId(in int userId, in AttributionSource attributionSource)278     oneway void setForegroundUserId(in int userId, in AttributionSource attributionSource);
279 
280     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
setPreferredAudioProfiles(in BluetoothDevice device, in Bundle modeToProfileBundle, in AttributionSource source)281     int setPreferredAudioProfiles(in BluetoothDevice device, in Bundle modeToProfileBundle, in AttributionSource source);
282     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
getPreferredAudioProfiles(in BluetoothDevice device, in AttributionSource source)283     Bundle getPreferredAudioProfiles(in BluetoothDevice device, in AttributionSource source);
284     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
registerPreferredAudioProfilesChangedCallback(in IBluetoothPreferredAudioProfilesCallback callback, in AttributionSource attributionSource)285     int registerPreferredAudioProfilesChangedCallback(in IBluetoothPreferredAudioProfilesCallback callback, in AttributionSource attributionSource);
286     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
unregisterPreferredAudioProfilesChangedCallback(in IBluetoothPreferredAudioProfilesCallback callback, in AttributionSource attributionSource)287     int unregisterPreferredAudioProfilesChangedCallback(in IBluetoothPreferredAudioProfilesCallback callback, in AttributionSource attributionSource);
288     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
notifyActiveDeviceChangeApplied(in BluetoothDevice device, in AttributionSource attributionSource)289     int notifyActiveDeviceChangeApplied(in BluetoothDevice device, in AttributionSource attributionSource);
290 
291     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
registerBluetoothQualityReportReadyCallback(in IBluetoothQualityReportReadyCallback callback, in AttributionSource attributionSource)292     int registerBluetoothQualityReportReadyCallback(in IBluetoothQualityReportReadyCallback callback, in AttributionSource attributionSource);
293     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
unregisterBluetoothQualityReportReadyCallback(in IBluetoothQualityReportReadyCallback callback, in AttributionSource attributionSource)294     int unregisterBluetoothQualityReportReadyCallback(in IBluetoothQualityReportReadyCallback callback, in AttributionSource attributionSource);
295 
296     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_SCAN,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
getOffloadedTransportDiscoveryDataScanSupported(in AttributionSource attributionSource)297     int getOffloadedTransportDiscoveryDataScanSupported(in AttributionSource attributionSource);
298 
299     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
isMediaProfileConnected(in AttributionSource attributionSource)300     boolean isMediaProfileConnected(in AttributionSource attributionSource);
301 
302     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
getBluetoothGatt()303     IBinder getBluetoothGatt();
304 
305     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
getBluetoothScan()306     IBinder getBluetoothScan();
307 
308     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
unregAllGattClient(in AttributionSource attributionSource)309     oneway void unregAllGattClient(in AttributionSource attributionSource);
310 
311     @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
getProfile(int profile)312     IBinder getProfile(int profile);
313 
314     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
setActiveAudioDevicePolicy(in BluetoothDevice device, int activeAudioDevicePolicy, in AttributionSource source)315     int setActiveAudioDevicePolicy(in BluetoothDevice device, int activeAudioDevicePolicy, in AttributionSource source);
316 
317     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
getActiveAudioDevicePolicy(in BluetoothDevice device, in AttributionSource source)318     int getActiveAudioDevicePolicy(in BluetoothDevice device, in AttributionSource source);
319 
320     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED)")
killBluetoothProcess()321     oneway void killBluetoothProcess();
322 }
323