1 /*
2  * Copyright (C) 2007 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.media;
18 
19 import android.bluetooth.BluetoothDevice;
20 import android.content.ComponentName;
21 import android.media.AudioAttributes;
22 import android.media.AudioDeviceAttributes;
23 import android.media.AudioFormat;
24 import android.media.AudioFocusInfo;
25 import android.media.AudioHalVersionInfo;
26 import android.media.AudioMixerAttributes;
27 import android.media.AudioPlaybackConfiguration;
28 import android.media.AudioRecordingConfiguration;
29 import android.media.AudioRoutesInfo;
30 import android.media.BluetoothProfileConnectionInfo;
31 import android.media.IAudioDeviceVolumeDispatcher;
32 import android.media.IAudioFocusDispatcher;
33 import android.media.IAudioModeDispatcher;
34 import android.media.IAudioRoutesObserver;
35 import android.media.IAudioServerStateDispatcher;
36 import android.media.ICapturePresetDevicesRoleDispatcher;
37 import android.media.ICommunicationDeviceDispatcher;
38 import android.media.IDeviceVolumeBehaviorDispatcher;
39 import android.media.IDevicesForAttributesCallback;
40 import android.media.IMuteAwaitConnectionCallback;
41 import android.media.IPlaybackConfigDispatcher;
42 import android.media.IPreferredMixerAttributesDispatcher;
43 import android.media.IRecordingConfigDispatcher;
44 import android.media.IRingtonePlayer;
45 import android.media.IStrategyPreferredDevicesDispatcher;
46 import android.media.IStrategyNonDefaultDevicesDispatcher;
47 import android.media.ISpatializerCallback;
48 import android.media.ISpatializerHeadTrackerAvailableCallback;
49 import android.media.ISpatializerHeadTrackingModeCallback;
50 import android.media.ISpatializerHeadToSoundStagePoseCallback;
51 import android.media.ISpatializerOutputCallback;
52 import android.media.IStreamAliasingDispatcher;
53 import android.media.IVolumeController;
54 import android.media.PlayerBase;
55 import android.media.VolumeInfo;
56 import android.media.VolumePolicy;
57 import android.media.audiopolicy.AudioPolicyConfig;
58 import android.media.audiopolicy.AudioProductStrategy;
59 import android.media.audiopolicy.AudioVolumeGroup;
60 import android.media.audiopolicy.IAudioPolicyCallback;
61 import android.media.projection.IMediaProjection;
62 import android.net.Uri;
63 import android.os.PersistableBundle;
64 import android.os.UserHandle;
65 import android.view.KeyEvent;
66 
67 /**
68  * {@hide}
69  */
70 interface IAudioService {
71     // C++ and Java methods below.
72 
73     // WARNING: When methods are inserted or deleted in this section, the transaction IDs in
74     // frameworks/native/include/audiomanager/IAudioManager.h must be updated to match the order
75     // in this file.
76     //
77     // When a method's argument list is changed, BpAudioManager's corresponding serialization code
78     // (if any) in frameworks/native/services/audiomanager/IAudioManager.cpp must be updated.
79 
trackPlayer(in PlayerBase.PlayerIdCard pic)80     int trackPlayer(in PlayerBase.PlayerIdCard pic);
81 
playerAttributes(in int piid, in AudioAttributes attr)82     oneway void playerAttributes(in int piid, in AudioAttributes attr);
83 
playerEvent(in int piid, in int event, in int eventId)84     oneway void playerEvent(in int piid, in int event, in int eventId);
85 
releasePlayer(in int piid)86     oneway void releasePlayer(in int piid);
87 
trackRecorder(in IBinder recorder)88     int trackRecorder(in IBinder recorder);
89 
recorderEvent(in int riid, in int event)90     oneway void recorderEvent(in int riid, in int event);
91 
releaseRecorder(in int riid)92     oneway void releaseRecorder(in int riid);
93 
playerSessionId(in int piid, in int sessionId)94     oneway void playerSessionId(in int piid, in int sessionId);
95 
portEvent(in int portId, in int event, in @nullable PersistableBundle extras)96     oneway void portEvent(in int portId, in int event, in @nullable PersistableBundle extras);
97 
98     // Java-only methods below.
adjustStreamVolume(int streamType, int direction, int flags, String callingPackage)99     void adjustStreamVolume(int streamType, int direction, int flags, String callingPackage);
100 
adjustStreamVolumeWithAttribution(int streamType, int direction, int flags, in String callingPackage, in String attributionTag)101     void adjustStreamVolumeWithAttribution(int streamType, int direction, int flags,
102             in String callingPackage, in String attributionTag);
103 
104     @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
setStreamVolume(int streamType, int index, int flags, String callingPackage)105     void setStreamVolume(int streamType, int index, int flags, String callingPackage);
106 
setStreamVolumeWithAttribution(int streamType, int index, int flags, in String callingPackage, in String attributionTag)107     void setStreamVolumeWithAttribution(int streamType, int index, int flags,
108             in String callingPackage, in String attributionTag);
109 
110     @EnforcePermission(anyOf = {"MODIFY_AUDIO_ROUTING", "MODIFY_AUDIO_SETTINGS_PRIVILEGED"})
setDeviceVolume(in VolumeInfo vi, in AudioDeviceAttributes ada, in String callingPackage)111     void setDeviceVolume(in VolumeInfo vi, in AudioDeviceAttributes ada,
112             in String callingPackage);
113 
114     @EnforcePermission(anyOf = {"MODIFY_AUDIO_ROUTING", "MODIFY_AUDIO_SETTINGS_PRIVILEGED"})
getDeviceVolume(in VolumeInfo vi, in AudioDeviceAttributes ada, in String callingPackage)115     VolumeInfo getDeviceVolume(in VolumeInfo vi, in AudioDeviceAttributes ada,
116             in String callingPackage);
117 
handleVolumeKey(in KeyEvent event, boolean isOnTv, String callingPackage, String caller)118     oneway void handleVolumeKey(in KeyEvent event, boolean isOnTv,
119             String callingPackage, String caller);
120 
isStreamMute(int streamType)121     boolean isStreamMute(int streamType);
122 
forceRemoteSubmixFullVolume(boolean startForcing, IBinder cb)123     void forceRemoteSubmixFullVolume(boolean startForcing, IBinder cb);
124 
isMasterMute()125     boolean isMasterMute();
126 
127     @EnforcePermission("MODIFY_AUDIO_ROUTING")
setMasterMute(boolean mute, int flags, String callingPackage, int userId, in String attributionTag)128     void setMasterMute(boolean mute, int flags, String callingPackage, int userId,
129             in String attributionTag);
130 
131     @UnsupportedAppUsage
getStreamVolume(int streamType)132     int getStreamVolume(int streamType);
133 
getStreamMinVolume(int streamType)134     int getStreamMinVolume(int streamType);
135 
136     @UnsupportedAppUsage
getStreamMaxVolume(int streamType)137     int getStreamMaxVolume(int streamType);
138 
139     @EnforcePermission("MODIFY_AUDIO_ROUTING")
getAudioVolumeGroups()140     List<AudioVolumeGroup> getAudioVolumeGroups();
141 
142     @EnforcePermission(anyOf={"MODIFY_AUDIO_SETTINGS_PRIVILEGED", "MODIFY_AUDIO_ROUTING"})
setVolumeGroupVolumeIndex(int groupId, int index, int flags, String callingPackage, in String attributionTag)143     void setVolumeGroupVolumeIndex(int groupId, int index, int flags, String callingPackage,
144             in String attributionTag);
145 
146     @EnforcePermission(anyOf={"MODIFY_AUDIO_SETTINGS_PRIVILEGED", "MODIFY_AUDIO_ROUTING"})
getVolumeGroupVolumeIndex(int groupId)147     int getVolumeGroupVolumeIndex(int groupId);
148 
149     @EnforcePermission(anyOf={"MODIFY_AUDIO_SETTINGS_PRIVILEGED", "MODIFY_AUDIO_ROUTING"})
getVolumeGroupMaxVolumeIndex(int groupId)150     int getVolumeGroupMaxVolumeIndex(int groupId);
151 
152     @EnforcePermission(anyOf={"MODIFY_AUDIO_SETTINGS_PRIVILEGED", "MODIFY_AUDIO_ROUTING"})
getVolumeGroupMinVolumeIndex(int groupId)153     int getVolumeGroupMinVolumeIndex(int groupId);
154 
155     @EnforcePermission("QUERY_AUDIO_STATE")
getLastAudibleVolumeForVolumeGroup(int groupId)156     int getLastAudibleVolumeForVolumeGroup(int groupId);
157 
isVolumeGroupMuted(int groupId)158     boolean isVolumeGroupMuted(int groupId);
159 
adjustVolumeGroupVolume(int groupId, int direction, int flags, String callingPackage)160     void adjustVolumeGroupVolume(int groupId, int direction, int flags, String callingPackage);
161 
162     @EnforcePermission("QUERY_AUDIO_STATE")
getLastAudibleStreamVolume(int streamType)163     int getLastAudibleStreamVolume(int streamType);
164 
165     @EnforcePermission("MODIFY_AUDIO_ROUTING")
setSupportedSystemUsages(in int[] systemUsages)166     void setSupportedSystemUsages(in int[] systemUsages);
167 
168     @EnforcePermission("MODIFY_AUDIO_ROUTING")
getSupportedSystemUsages()169     int[] getSupportedSystemUsages();
170 
171     @EnforcePermission("MODIFY_AUDIO_ROUTING")
getAudioProductStrategies()172     List<AudioProductStrategy> getAudioProductStrategies();
173 
isMicrophoneMuted()174     boolean isMicrophoneMuted();
175 
176     @EnforcePermission("ACCESS_ULTRASOUND")
isUltrasoundSupported()177     boolean isUltrasoundSupported();
178 
179     @EnforcePermission("CAPTURE_AUDIO_HOTWORD")
isHotwordStreamSupported(boolean lookbackAudio)180     boolean isHotwordStreamSupported(boolean lookbackAudio);
181 
setMicrophoneMute(boolean on, String callingPackage, int userId, in String attributionTag)182     void setMicrophoneMute(boolean on, String callingPackage, int userId, in String attributionTag);
183 
setMicrophoneMuteFromSwitch(boolean on)184     oneway void setMicrophoneMuteFromSwitch(boolean on);
185 
setRingerModeExternal(int ringerMode, String caller)186     void setRingerModeExternal(int ringerMode, String caller);
187 
setRingerModeInternal(int ringerMode, String caller)188     void setRingerModeInternal(int ringerMode, String caller);
189 
getRingerModeExternal()190     int getRingerModeExternal();
191 
getRingerModeInternal()192     int getRingerModeInternal();
193 
isValidRingerMode(int ringerMode)194     boolean isValidRingerMode(int ringerMode);
195 
setVibrateSetting(int vibrateType, int vibrateSetting)196     void setVibrateSetting(int vibrateType, int vibrateSetting);
197 
getVibrateSetting(int vibrateType)198     int getVibrateSetting(int vibrateType);
199 
shouldVibrate(int vibrateType)200     boolean shouldVibrate(int vibrateType);
201 
setMode(int mode, IBinder cb, String callingPackage)202     void setMode(int mode, IBinder cb, String callingPackage);
203 
getMode()204     int getMode();
205 
playSoundEffect(int effectType, int userId)206     oneway void playSoundEffect(int effectType, int userId);
207 
playSoundEffectVolume(int effectType, float volume)208     oneway void playSoundEffectVolume(int effectType, float volume);
209 
loadSoundEffects()210     boolean loadSoundEffects();
211 
unloadSoundEffects()212     oneway void unloadSoundEffects();
213 
reloadAudioSettings()214     oneway void reloadAudioSettings();
215 
getSurroundFormats()216     Map getSurroundFormats();
217 
getReportedSurroundFormats()218     List getReportedSurroundFormats();
219 
setSurroundFormatEnabled(int audioFormat, boolean enabled)220     boolean setSurroundFormatEnabled(int audioFormat, boolean enabled);
221 
isSurroundFormatEnabled(int audioFormat)222     boolean isSurroundFormatEnabled(int audioFormat);
223 
setEncodedSurroundMode(int mode)224     boolean setEncodedSurroundMode(int mode);
225 
getEncodedSurroundMode(int targetSdkVersion)226     int getEncodedSurroundMode(int targetSdkVersion);
227 
setSpeakerphoneOn(IBinder cb, boolean on)228     void setSpeakerphoneOn(IBinder cb, boolean on);
229 
isSpeakerphoneOn()230     boolean isSpeakerphoneOn();
231 
setBluetoothScoOn(boolean on)232     void setBluetoothScoOn(boolean on);
233 
234     @EnforcePermission("BLUETOOTH_STACK")
setA2dpSuspended(boolean on)235     void setA2dpSuspended(boolean on);
236 
237     @EnforcePermission("BLUETOOTH_STACK")
setLeAudioSuspended(boolean enable)238     void setLeAudioSuspended(boolean enable);
239 
isBluetoothScoOn()240     boolean isBluetoothScoOn();
241 
setBluetoothA2dpOn(boolean on)242     void setBluetoothA2dpOn(boolean on);
243 
isBluetoothA2dpOn()244     boolean isBluetoothA2dpOn();
245 
requestAudioFocus(in AudioAttributes aa, int durationHint, IBinder cb, IAudioFocusDispatcher fd, in String clientId, in String callingPackageName, in String attributionTag, int flags, IAudioPolicyCallback pcb, int sdk)246     int requestAudioFocus(in AudioAttributes aa, int durationHint, IBinder cb,
247             IAudioFocusDispatcher fd, in String clientId, in String callingPackageName,
248             in String attributionTag, int flags, IAudioPolicyCallback pcb, int sdk);
249 
abandonAudioFocus(IAudioFocusDispatcher fd, String clientId, in AudioAttributes aa, in String callingPackageName)250     int abandonAudioFocus(IAudioFocusDispatcher fd, String clientId, in AudioAttributes aa,
251             in String callingPackageName);
252 
unregisterAudioFocusClient(String clientId)253     void unregisterAudioFocusClient(String clientId);
254 
getCurrentAudioFocus()255     int getCurrentAudioFocus();
256 
startBluetoothSco(IBinder cb, int targetSdkVersion)257     void startBluetoothSco(IBinder cb, int targetSdkVersion);
startBluetoothScoVirtualCall(IBinder cb)258     void startBluetoothScoVirtualCall(IBinder cb);
stopBluetoothSco(IBinder cb)259     void stopBluetoothSco(IBinder cb);
260 
forceVolumeControlStream(int streamType, IBinder cb)261     void forceVolumeControlStream(int streamType, IBinder cb);
262 
setRingtonePlayer(IRingtonePlayer player)263     void setRingtonePlayer(IRingtonePlayer player);
getRingtonePlayer()264     IRingtonePlayer getRingtonePlayer();
getUiSoundsStreamType()265     int getUiSoundsStreamType();
266 
267     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
getIndependentStreamTypes()268     List getIndependentStreamTypes();
269 
270     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
getStreamTypeAlias(int streamType)271     int getStreamTypeAlias(int streamType);
272 
273     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
isVolumeControlUsingVolumeGroups()274     boolean isVolumeControlUsingVolumeGroups();
275 
276     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
registerStreamAliasingDispatcher(IStreamAliasingDispatcher isad, boolean register)277     void registerStreamAliasingDispatcher(IStreamAliasingDispatcher isad, boolean register);
278 
279     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
setNotifAliasRingForTest(boolean alias)280     void setNotifAliasRingForTest(boolean alias);
281 
282     @EnforcePermission("MODIFY_AUDIO_ROUTING")
setWiredDeviceConnectionState(in AudioDeviceAttributes aa, int state, String caller)283     void setWiredDeviceConnectionState(in AudioDeviceAttributes aa, int state, String caller);
284 
285     @UnsupportedAppUsage
startWatchingRoutes(in IAudioRoutesObserver observer)286     AudioRoutesInfo startWatchingRoutes(in IAudioRoutesObserver observer);
287 
isCameraSoundForced()288     boolean isCameraSoundForced();
289 
setVolumeController(in IVolumeController controller)290     void setVolumeController(in IVolumeController controller);
291 
getVolumeController()292     @nullable IVolumeController getVolumeController();
293 
notifyVolumeControllerVisible(in IVolumeController controller, boolean visible)294     void notifyVolumeControllerVisible(in IVolumeController controller, boolean visible);
295 
isStreamAffectedByRingerMode(int streamType)296     boolean isStreamAffectedByRingerMode(int streamType);
297 
isStreamAffectedByMute(int streamType)298     boolean isStreamAffectedByMute(int streamType);
299 
disableSafeMediaVolume(String callingPackage)300     void disableSafeMediaVolume(String callingPackage);
301 
lowerVolumeToRs1(String callingPackage)302     void lowerVolumeToRs1(String callingPackage);
303 
304     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
getOutputRs2UpperBound()305     float getOutputRs2UpperBound();
306 
307     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
setOutputRs2UpperBound(float rs2Value)308     oneway void setOutputRs2UpperBound(float rs2Value);
309 
310     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
getCsd()311     float getCsd();
312 
313     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
setCsd(float csd)314     oneway void setCsd(float csd);
315 
316     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
forceUseFrameworkMel(boolean useFrameworkMel)317     oneway void forceUseFrameworkMel(boolean useFrameworkMel);
318 
319     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
forceComputeCsdOnAllDevices(boolean computeCsdOnAllDevices)320     oneway void forceComputeCsdOnAllDevices(boolean computeCsdOnAllDevices);
321 
322     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
isCsdEnabled()323     boolean isCsdEnabled();
324 
325     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
isCsdAsAFeatureAvailable()326     boolean isCsdAsAFeatureAvailable();
327 
328     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
isCsdAsAFeatureEnabled()329     boolean isCsdAsAFeatureEnabled();
330 
331     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
setCsdAsAFeatureEnabled(boolean csdToggleValue)332     oneway void setCsdAsAFeatureEnabled(boolean csdToggleValue);
333 
334     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
setBluetoothAudioDeviceCategory(in String address, boolean isBle, int deviceType)335     oneway void setBluetoothAudioDeviceCategory(in String address, boolean isBle, int deviceType);
336 
337     @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
getBluetoothAudioDeviceCategory(in String address, boolean isBle)338     int getBluetoothAudioDeviceCategory(in String address, boolean isBle);
339 
setHdmiSystemAudioSupported(boolean on)340     int setHdmiSystemAudioSupported(boolean on);
341 
isHdmiSystemAudioSupported()342     boolean isHdmiSystemAudioSupported();
343 
registerAudioPolicy(in AudioPolicyConfig policyConfig, in IAudioPolicyCallback pcb, boolean hasFocusListener, boolean isFocusPolicy, boolean isTestFocusPolicy, boolean isVolumeController, in IMediaProjection projection)344     String registerAudioPolicy(in AudioPolicyConfig policyConfig,
345             in IAudioPolicyCallback pcb, boolean hasFocusListener, boolean isFocusPolicy,
346             boolean isTestFocusPolicy,
347             boolean isVolumeController, in IMediaProjection projection);
348 
unregisterAudioPolicyAsync(in IAudioPolicyCallback pcb)349     oneway void unregisterAudioPolicyAsync(in IAudioPolicyCallback pcb);
350 
unregisterAudioPolicy(in IAudioPolicyCallback pcb)351     void unregisterAudioPolicy(in IAudioPolicyCallback pcb);
352 
addMixForPolicy(in AudioPolicyConfig policyConfig, in IAudioPolicyCallback pcb)353     int addMixForPolicy(in AudioPolicyConfig policyConfig, in IAudioPolicyCallback pcb);
354 
removeMixForPolicy(in AudioPolicyConfig policyConfig, in IAudioPolicyCallback pcb)355     int removeMixForPolicy(in AudioPolicyConfig policyConfig, in IAudioPolicyCallback pcb);
356 
setFocusPropertiesForPolicy(int duckingBehavior, in IAudioPolicyCallback pcb)357     int setFocusPropertiesForPolicy(int duckingBehavior, in IAudioPolicyCallback pcb);
358 
setVolumePolicy(in VolumePolicy policy)359     void setVolumePolicy(in VolumePolicy policy);
360 
hasRegisteredDynamicPolicy()361     boolean hasRegisteredDynamicPolicy();
362 
registerRecordingCallback(in IRecordingConfigDispatcher rcdb)363     void registerRecordingCallback(in IRecordingConfigDispatcher rcdb);
364 
unregisterRecordingCallback(in IRecordingConfigDispatcher rcdb)365     oneway void unregisterRecordingCallback(in IRecordingConfigDispatcher rcdb);
366 
getActiveRecordingConfigurations()367     List<AudioRecordingConfiguration> getActiveRecordingConfigurations();
368 
registerPlaybackCallback(in IPlaybackConfigDispatcher pcdb)369     void registerPlaybackCallback(in IPlaybackConfigDispatcher pcdb);
370 
unregisterPlaybackCallback(in IPlaybackConfigDispatcher pcdb)371     oneway void unregisterPlaybackCallback(in IPlaybackConfigDispatcher pcdb);
372 
getActivePlaybackConfigurations()373     List<AudioPlaybackConfiguration> getActivePlaybackConfigurations();
374 
getFocusRampTimeMs(in int focusGain, in AudioAttributes attr)375     int getFocusRampTimeMs(in int focusGain, in AudioAttributes attr);
376 
dispatchFocusChange(in AudioFocusInfo afi, in int focusChange, in IAudioPolicyCallback pcb)377     int dispatchFocusChange(in AudioFocusInfo afi, in int focusChange,
378             in IAudioPolicyCallback pcb);
379 
playerHasOpPlayAudio(in int piid, in boolean hasOpPlayAudio)380     oneway void playerHasOpPlayAudio(in int piid, in boolean hasOpPlayAudio);
381 
handleBluetoothActiveDeviceChanged(in BluetoothDevice newDevice, in BluetoothDevice previousDevice, in BluetoothProfileConnectionInfo info)382     void handleBluetoothActiveDeviceChanged(in BluetoothDevice newDevice,
383             in BluetoothDevice previousDevice, in BluetoothProfileConnectionInfo info);
384 
setFocusRequestResultFromExtPolicy(in AudioFocusInfo afi, int requestResult, in IAudioPolicyCallback pcb)385     oneway void setFocusRequestResultFromExtPolicy(in AudioFocusInfo afi, int requestResult,
386             in IAudioPolicyCallback pcb);
387 
registerAudioServerStateDispatcher(IAudioServerStateDispatcher asd)388     void registerAudioServerStateDispatcher(IAudioServerStateDispatcher asd);
389 
unregisterAudioServerStateDispatcher(IAudioServerStateDispatcher asd)390     oneway void unregisterAudioServerStateDispatcher(IAudioServerStateDispatcher asd);
391 
isAudioServerRunning()392     boolean isAudioServerRunning();
393 
setUidDeviceAffinity(in IAudioPolicyCallback pcb, in int uid, in int[] deviceTypes, in String[] deviceAddresses)394     int setUidDeviceAffinity(in IAudioPolicyCallback pcb, in int uid, in int[] deviceTypes,
395              in String[] deviceAddresses);
396 
removeUidDeviceAffinity(in IAudioPolicyCallback pcb, in int uid)397     int removeUidDeviceAffinity(in IAudioPolicyCallback pcb, in int uid);
398 
setUserIdDeviceAffinity(in IAudioPolicyCallback pcb, in int userId, in int[] deviceTypes, in String[] deviceAddresses)399     int setUserIdDeviceAffinity(in IAudioPolicyCallback pcb, in int userId, in int[] deviceTypes,
400              in String[] deviceAddresses);
removeUserIdDeviceAffinity(in IAudioPolicyCallback pcb, in int userId)401     int removeUserIdDeviceAffinity(in IAudioPolicyCallback pcb, in int userId);
402 
hasHapticChannels(in Uri uri)403     boolean hasHapticChannels(in Uri uri);
404 
isCallScreeningModeSupported()405     boolean isCallScreeningModeSupported();
406 
407     @EnforcePermission("MODIFY_AUDIO_ROUTING")
setPreferredDevicesForStrategy(in int strategy, in List<AudioDeviceAttributes> devices)408     int setPreferredDevicesForStrategy(in int strategy, in List<AudioDeviceAttributes> devices);
409 
410     @EnforcePermission("MODIFY_AUDIO_ROUTING")
removePreferredDevicesForStrategy(in int strategy)411     int removePreferredDevicesForStrategy(in int strategy);
412 
413     @EnforcePermission("MODIFY_AUDIO_ROUTING")
getPreferredDevicesForStrategy(in int strategy)414     List<AudioDeviceAttributes> getPreferredDevicesForStrategy(in int strategy);
415 
416     @EnforcePermission("MODIFY_AUDIO_ROUTING")
setDeviceAsNonDefaultForStrategy(in int strategy, in AudioDeviceAttributes device)417     int setDeviceAsNonDefaultForStrategy(in int strategy, in AudioDeviceAttributes device);
418 
419     @EnforcePermission("MODIFY_AUDIO_ROUTING")
removeDeviceAsNonDefaultForStrategy(in int strategy, in AudioDeviceAttributes device)420     int removeDeviceAsNonDefaultForStrategy(in int strategy, in AudioDeviceAttributes device);
421 
422     @EnforcePermission("MODIFY_AUDIO_ROUTING")
getNonDefaultDevicesForStrategy(in int strategy)423     List<AudioDeviceAttributes> getNonDefaultDevicesForStrategy(in int strategy);
424 
getDevicesForAttributes(in AudioAttributes attributes)425     List<AudioDeviceAttributes> getDevicesForAttributes(in AudioAttributes attributes);
426 
getDevicesForAttributesUnprotected(in AudioAttributes attributes)427     List<AudioDeviceAttributes> getDevicesForAttributesUnprotected(in AudioAttributes attributes);
428 
addOnDevicesForAttributesChangedListener(in AudioAttributes attributes, in IDevicesForAttributesCallback callback)429     void addOnDevicesForAttributesChangedListener(in AudioAttributes attributes,
430             in IDevicesForAttributesCallback callback);
431 
removeOnDevicesForAttributesChangedListener( in IDevicesForAttributesCallback callback)432     oneway void removeOnDevicesForAttributesChangedListener(
433             in IDevicesForAttributesCallback callback);
434 
setAllowedCapturePolicy(in int capturePolicy)435     int setAllowedCapturePolicy(in int capturePolicy);
436 
getAllowedCapturePolicy()437     int getAllowedCapturePolicy();
438 
registerStrategyPreferredDevicesDispatcher(IStrategyPreferredDevicesDispatcher dispatcher)439     void registerStrategyPreferredDevicesDispatcher(IStrategyPreferredDevicesDispatcher dispatcher);
440 
unregisterStrategyPreferredDevicesDispatcher( IStrategyPreferredDevicesDispatcher dispatcher)441     oneway void unregisterStrategyPreferredDevicesDispatcher(
442             IStrategyPreferredDevicesDispatcher dispatcher);
443 
registerStrategyNonDefaultDevicesDispatcher( IStrategyNonDefaultDevicesDispatcher dispatcher)444     void registerStrategyNonDefaultDevicesDispatcher(
445             IStrategyNonDefaultDevicesDispatcher dispatcher);
446 
unregisterStrategyNonDefaultDevicesDispatcher( IStrategyNonDefaultDevicesDispatcher dispatcher)447     oneway void unregisterStrategyNonDefaultDevicesDispatcher(
448             IStrategyNonDefaultDevicesDispatcher dispatcher);
449 
setRttEnabled(in boolean rttEnabled)450     oneway void setRttEnabled(in boolean rttEnabled);
451 
452     @EnforcePermission(anyOf = {"MODIFY_AUDIO_ROUTING", "MODIFY_AUDIO_SETTINGS_PRIVILEGED"})
setDeviceVolumeBehavior(in AudioDeviceAttributes device, in int deviceVolumeBehavior, in String pkgName)453     void setDeviceVolumeBehavior(in AudioDeviceAttributes device,
454              in int deviceVolumeBehavior, in String pkgName);
455 
456     @EnforcePermission(anyOf = {"MODIFY_AUDIO_ROUTING", "QUERY_AUDIO_STATE", "MODIFY_AUDIO_SETTINGS_PRIVILEGED"})
getDeviceVolumeBehavior(in AudioDeviceAttributes device)457     int getDeviceVolumeBehavior(in AudioDeviceAttributes device);
458 
459     // WARNING: read warning at top of file, new methods that need to be used by native
460     // code via IAudioManager.h need to be added to the top section.
461 
462     @EnforcePermission("MODIFY_AUDIO_ROUTING")
setMultiAudioFocusEnabled(in boolean enabled)463     oneway void setMultiAudioFocusEnabled(in boolean enabled);
464 
setPreferredDevicesForCapturePreset( in int capturePreset, in List<AudioDeviceAttributes> devices)465     int setPreferredDevicesForCapturePreset(
466             in int capturePreset, in List<AudioDeviceAttributes> devices);
467 
468     @EnforcePermission("MODIFY_AUDIO_ROUTING")
clearPreferredDevicesForCapturePreset(in int capturePreset)469     int clearPreferredDevicesForCapturePreset(in int capturePreset);
470 
471     @EnforcePermission("MODIFY_AUDIO_ROUTING")
getPreferredDevicesForCapturePreset(in int capturePreset)472     List<AudioDeviceAttributes> getPreferredDevicesForCapturePreset(in int capturePreset);
473 
registerCapturePresetDevicesRoleDispatcher(ICapturePresetDevicesRoleDispatcher dispatcher)474     void registerCapturePresetDevicesRoleDispatcher(ICapturePresetDevicesRoleDispatcher dispatcher);
475 
unregisterCapturePresetDevicesRoleDispatcher( ICapturePresetDevicesRoleDispatcher dispatcher)476     oneway void unregisterCapturePresetDevicesRoleDispatcher(
477             ICapturePresetDevicesRoleDispatcher dispatcher);
478 
adjustStreamVolumeForUid(int streamType, int direction, int flags, in String packageName, int uid, int pid, in UserHandle userHandle, int targetSdkVersion)479     oneway void adjustStreamVolumeForUid(int streamType, int direction, int flags,
480             in String packageName, int uid, int pid, in UserHandle userHandle,
481             int targetSdkVersion);
482 
adjustSuggestedStreamVolumeForUid(int streamType, int direction, int flags, in String packageName, int uid, int pid, in UserHandle userHandle, int targetSdkVersion)483     oneway void adjustSuggestedStreamVolumeForUid(int streamType, int direction, int flags,
484             in String packageName, int uid, int pid, in UserHandle userHandle,
485             int targetSdkVersion);
486 
setStreamVolumeForUid(int streamType, int direction, int flags, in String packageName, int uid, int pid, in UserHandle userHandle, int targetSdkVersion)487     oneway void setStreamVolumeForUid(int streamType, int direction, int flags,
488             in String packageName, int uid, int pid, in UserHandle userHandle,
489             int targetSdkVersion);
490 
isMusicActive(in boolean remotely)491     boolean isMusicActive(in boolean remotely);
492 
getDeviceMaskForStream(in int streamType)493     int getDeviceMaskForStream(in int streamType);
494 
getAvailableCommunicationDeviceIds()495     int[] getAvailableCommunicationDeviceIds();
496 
setCommunicationDevice(IBinder cb, int portId)497     boolean setCommunicationDevice(IBinder cb, int portId);
498 
getCommunicationDevice()499     int getCommunicationDevice();
500 
registerCommunicationDeviceDispatcher(ICommunicationDeviceDispatcher dispatcher)501     void registerCommunicationDeviceDispatcher(ICommunicationDeviceDispatcher dispatcher);
502 
unregisterCommunicationDeviceDispatcher( ICommunicationDeviceDispatcher dispatcher)503     oneway void unregisterCommunicationDeviceDispatcher(
504             ICommunicationDeviceDispatcher dispatcher);
505 
areNavigationRepeatSoundEffectsEnabled()506     boolean areNavigationRepeatSoundEffectsEnabled();
507 
setNavigationRepeatSoundEffectsEnabled(boolean enabled)508     oneway void setNavigationRepeatSoundEffectsEnabled(boolean enabled);
509 
isHomeSoundEffectEnabled()510     boolean isHomeSoundEffectEnabled();
511 
setHomeSoundEffectEnabled(boolean enabled)512     oneway void setHomeSoundEffectEnabled(boolean enabled);
513 
setAdditionalOutputDeviceDelay(in AudioDeviceAttributes device, long delayMillis)514     boolean setAdditionalOutputDeviceDelay(in AudioDeviceAttributes device, long delayMillis);
515 
getAdditionalOutputDeviceDelay(in AudioDeviceAttributes device)516     long getAdditionalOutputDeviceDelay(in AudioDeviceAttributes device);
517 
getMaxAdditionalOutputDeviceDelay(in AudioDeviceAttributes device)518     long getMaxAdditionalOutputDeviceDelay(in AudioDeviceAttributes device);
519 
requestAudioFocusForTest(in AudioAttributes aa, int durationHint, IBinder cb, in IAudioFocusDispatcher fd, in String clientId, in String callingPackageName, int flags, int uid, int sdk)520     int requestAudioFocusForTest(in AudioAttributes aa, int durationHint, IBinder cb,
521             in IAudioFocusDispatcher fd, in String clientId, in String callingPackageName,
522             int flags, int uid, int sdk);
523 
abandonAudioFocusForTest(in IAudioFocusDispatcher fd, in String clientId, in AudioAttributes aa, in String callingPackageName)524     int abandonAudioFocusForTest(in IAudioFocusDispatcher fd, in String clientId,
525             in AudioAttributes aa, in String callingPackageName);
526 
getFadeOutDurationOnFocusLossMillis(in AudioAttributes aa)527     long getFadeOutDurationOnFocusLossMillis(in AudioAttributes aa);
528 
registerModeDispatcher(IAudioModeDispatcher dispatcher)529     void registerModeDispatcher(IAudioModeDispatcher dispatcher);
530 
unregisterModeDispatcher(IAudioModeDispatcher dispatcher)531     oneway void unregisterModeDispatcher(IAudioModeDispatcher dispatcher);
532 
getSpatializerImmersiveAudioLevel()533     int getSpatializerImmersiveAudioLevel();
534 
isSpatializerEnabled()535     boolean isSpatializerEnabled();
536 
isSpatializerAvailable()537     boolean isSpatializerAvailable();
538 
539     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
isSpatializerAvailableForDevice(in AudioDeviceAttributes device)540     boolean isSpatializerAvailableForDevice(in AudioDeviceAttributes device);
541 
542     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
hasHeadTracker(in AudioDeviceAttributes device)543     boolean hasHeadTracker(in AudioDeviceAttributes device);
544 
545     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
setHeadTrackerEnabled(boolean enabled, in AudioDeviceAttributes device)546     void setHeadTrackerEnabled(boolean enabled, in AudioDeviceAttributes device);
547 
548     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
isHeadTrackerEnabled(in AudioDeviceAttributes device)549     boolean isHeadTrackerEnabled(in AudioDeviceAttributes device);
550 
isHeadTrackerAvailable()551     boolean isHeadTrackerAvailable();
552 
registerSpatializerHeadTrackerAvailableCallback( in ISpatializerHeadTrackerAvailableCallback cb, boolean register)553     void registerSpatializerHeadTrackerAvailableCallback(
554             in ISpatializerHeadTrackerAvailableCallback cb, boolean register);
555 
556     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
setSpatializerEnabled(boolean enabled)557     void setSpatializerEnabled(boolean enabled);
558 
canBeSpatialized(in AudioAttributes aa, in AudioFormat af)559     boolean canBeSpatialized(in AudioAttributes aa, in AudioFormat af);
560 
registerSpatializerCallback(in ISpatializerCallback cb)561     void registerSpatializerCallback(in ISpatializerCallback cb);
562 
unregisterSpatializerCallback(in ISpatializerCallback cb)563     void unregisterSpatializerCallback(in ISpatializerCallback cb);
564 
565     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
registerSpatializerHeadTrackingCallback(in ISpatializerHeadTrackingModeCallback cb)566     void registerSpatializerHeadTrackingCallback(in ISpatializerHeadTrackingModeCallback cb);
567 
568     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
unregisterSpatializerHeadTrackingCallback(in ISpatializerHeadTrackingModeCallback cb)569     void unregisterSpatializerHeadTrackingCallback(in ISpatializerHeadTrackingModeCallback cb);
570 
571     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
registerHeadToSoundstagePoseCallback(in ISpatializerHeadToSoundStagePoseCallback cb)572     void registerHeadToSoundstagePoseCallback(in ISpatializerHeadToSoundStagePoseCallback cb);
573 
574     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
unregisterHeadToSoundstagePoseCallback(in ISpatializerHeadToSoundStagePoseCallback cb)575     void unregisterHeadToSoundstagePoseCallback(in ISpatializerHeadToSoundStagePoseCallback cb);
576 
577     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
getSpatializerCompatibleAudioDevices()578     List<AudioDeviceAttributes> getSpatializerCompatibleAudioDevices();
579 
580     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
addSpatializerCompatibleAudioDevice(in AudioDeviceAttributes ada)581     void addSpatializerCompatibleAudioDevice(in AudioDeviceAttributes ada);
582 
583     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
removeSpatializerCompatibleAudioDevice(in AudioDeviceAttributes ada)584     void removeSpatializerCompatibleAudioDevice(in AudioDeviceAttributes ada);
585 
586     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
setDesiredHeadTrackingMode(int mode)587     void setDesiredHeadTrackingMode(int mode);
588 
589     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
getDesiredHeadTrackingMode()590     int getDesiredHeadTrackingMode();
591 
592     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
getSupportedHeadTrackingModes()593     int[] getSupportedHeadTrackingModes();
594 
595     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
getActualHeadTrackingMode()596     int getActualHeadTrackingMode();
597 
598     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
setSpatializerGlobalTransform(in float[] transform)599     oneway void setSpatializerGlobalTransform(in float[] transform);
600 
601     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
recenterHeadTracker()602     oneway void recenterHeadTracker();
603 
604     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
setSpatializerParameter(int key, in byte[] value)605     void setSpatializerParameter(int key, in byte[] value);
606 
607     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
getSpatializerParameter(int key, inout byte[] value)608     void getSpatializerParameter(int key, inout byte[] value);
609 
610     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
getSpatializerOutput()611     int getSpatializerOutput();
612 
613     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
registerSpatializerOutputCallback(in ISpatializerOutputCallback cb)614     void registerSpatializerOutputCallback(in ISpatializerOutputCallback cb);
615 
616     @EnforcePermission("MODIFY_DEFAULT_AUDIO_EFFECTS")
unregisterSpatializerOutputCallback(in ISpatializerOutputCallback cb)617     void unregisterSpatializerOutputCallback(in ISpatializerOutputCallback cb);
618 
isVolumeFixed()619     boolean isVolumeFixed();
620 
getDefaultVolumeInfo()621     VolumeInfo getDefaultVolumeInfo();
622 
623     @EnforcePermission("CALL_AUDIO_INTERCEPTION")
isPstnCallAudioInterceptable()624     boolean isPstnCallAudioInterceptable();
625 
muteAwaitConnection(in int[] usagesToMute, in AudioDeviceAttributes dev, long timeOutMs)626     oneway void muteAwaitConnection(in int[] usagesToMute, in AudioDeviceAttributes dev,
627             long timeOutMs);
628 
cancelMuteAwaitConnection(in AudioDeviceAttributes dev)629     oneway void cancelMuteAwaitConnection(in AudioDeviceAttributes dev);
630 
631     @EnforcePermission("MODIFY_AUDIO_ROUTING")
getMutingExpectedDevice()632     AudioDeviceAttributes getMutingExpectedDevice();
633 
634     @EnforcePermission("MODIFY_AUDIO_ROUTING")
registerMuteAwaitConnectionDispatcher(in IMuteAwaitConnectionCallback cb, boolean register)635     void registerMuteAwaitConnectionDispatcher(in IMuteAwaitConnectionCallback cb,
636             boolean register);
637 
setTestDeviceConnectionState(in AudioDeviceAttributes device, boolean connected)638     void setTestDeviceConnectionState(in AudioDeviceAttributes device, boolean connected);
639 
640     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING,android.Manifest.permission.QUERY_AUDIO_STATE})")
registerDeviceVolumeBehaviorDispatcher(boolean register, in IDeviceVolumeBehaviorDispatcher dispatcher)641     void registerDeviceVolumeBehaviorDispatcher(boolean register,
642             in IDeviceVolumeBehaviorDispatcher dispatcher);
643 
644     @EnforcePermission("MODIFY_AUDIO_ROUTING")
getFocusStack()645     List<AudioFocusInfo> getFocusStack();
646 
sendFocusLoss(in AudioFocusInfo focusLoser, in IAudioPolicyCallback apcb)647     boolean sendFocusLoss(in AudioFocusInfo focusLoser, in IAudioPolicyCallback apcb);
648 
649     @EnforcePermission("MODIFY_AUDIO_ROUTING")
650     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)")
addAssistantServicesUids(in int[] assistantUID)651     void addAssistantServicesUids(in int[] assistantUID);
652 
653     @EnforcePermission("MODIFY_AUDIO_ROUTING")
654     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)")
removeAssistantServicesUids(in int[] assistantUID)655     void removeAssistantServicesUids(in int[] assistantUID);
656 
657     @EnforcePermission("MODIFY_AUDIO_ROUTING")
658     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)")
setActiveAssistantServiceUids(in int[] activeUids)659     void setActiveAssistantServiceUids(in int[] activeUids);
660 
661     @EnforcePermission("MODIFY_AUDIO_ROUTING")
662     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)")
getAssistantServicesUids()663     int[] getAssistantServicesUids();
664 
665     @EnforcePermission("MODIFY_AUDIO_ROUTING")
666     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)")
getActiveAssistantServiceUids()667     int[] getActiveAssistantServiceUids();
668 
669     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
registerDeviceVolumeDispatcherForAbsoluteVolume(boolean register, in IAudioDeviceVolumeDispatcher cb, in String packageName, in AudioDeviceAttributes device, in List<VolumeInfo> volumes, boolean handlesvolumeAdjustment, int volumeBehavior)670     void registerDeviceVolumeDispatcherForAbsoluteVolume(boolean register,
671             in IAudioDeviceVolumeDispatcher cb,
672             in String packageName,
673             in AudioDeviceAttributes device, in List<VolumeInfo> volumes,
674             boolean handlesvolumeAdjustment,
675             int volumeBehavior);
676 
getHalVersion()677     AudioHalVersionInfo getHalVersion();
678 
679     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS)")
setPreferredMixerAttributes( in AudioAttributes aa, int portId, in AudioMixerAttributes mixerAttributes)680     int setPreferredMixerAttributes(
681             in AudioAttributes aa, int portId, in AudioMixerAttributes mixerAttributes);
682     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS)")
clearPreferredMixerAttributes(in AudioAttributes aa, int portId)683     int clearPreferredMixerAttributes(in AudioAttributes aa, int portId);
registerPreferredMixerAttributesDispatcher( IPreferredMixerAttributesDispatcher dispatcher)684     void registerPreferredMixerAttributesDispatcher(
685             IPreferredMixerAttributesDispatcher dispatcher);
unregisterPreferredMixerAttributesDispatcher( IPreferredMixerAttributesDispatcher dispatcher)686     oneway void unregisterPreferredMixerAttributesDispatcher(
687             IPreferredMixerAttributesDispatcher dispatcher);
688 
689     @EnforcePermission("MODIFY_AUDIO_ROUTING")
690     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)")
supportsBluetoothVariableLatency()691     boolean supportsBluetoothVariableLatency();
692 
693     @EnforcePermission("MODIFY_AUDIO_ROUTING")
694     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)")
setBluetoothVariableLatencyEnabled(boolean enabled)695     void setBluetoothVariableLatencyEnabled(boolean enabled);
696 
697     @EnforcePermission("MODIFY_AUDIO_ROUTING")
698     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)")
isBluetoothVariableLatencyEnabled()699     boolean isBluetoothVariableLatencyEnabled();
700 }
701