diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 4c3f550c7a81d..bea9e8cc9f35b 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -6105,7 +6105,7 @@ package android.media { public class AudioManager { method @Deprecated public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes); - method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void addAssistantServicesUids(@NonNull java.util.List); + method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void addAssistantServicesUids(@NonNull int[]); method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void addOnPreferredDeviceForStrategyChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.OnPreferredDeviceForStrategyChangedListener) throws java.lang.SecurityException; method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void addOnPreferredDevicesForCapturePresetChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.OnPreferredDevicesForCapturePresetChangedListener) throws java.lang.SecurityException; method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void addOnPreferredDevicesForStrategyChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.OnPreferredDevicesForStrategyChangedListener) throws java.lang.SecurityException; @@ -6113,9 +6113,9 @@ package android.media { method public void clearAudioServerStateCallback(); method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean clearPreferredDevicesForCapturePreset(int); method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int dispatchAudioFocusChange(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy); - method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public java.util.List getActiveAssistantServicesUids(); + method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int[] getActiveAssistantServicesUids(); method @IntRange(from=0) public long getAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo); - method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public java.util.List getAssistantServicesUids(); + method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int[] getAssistantServicesUids(); method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List getAudioProductStrategies(); method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List getAudioVolumeGroups(); method @NonNull @RequiresPermission(android.Manifest.permission.CALL_AUDIO_INTERCEPTION) public android.media.AudioRecord getCallDownlinkExtractionAudioRecord(@NonNull android.media.AudioFormat); @@ -6140,7 +6140,7 @@ package android.media { method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int registerAudioPolicy(@NonNull android.media.audiopolicy.AudioPolicy); method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void registerMuteAwaitConnectionCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.MuteAwaitConnectionCallback); method public void registerVolumeGroupCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.VolumeGroupCallback); - method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void removeAssistantServicesUids(@NonNull java.util.List); + method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void removeAssistantServicesUids(@NonNull int[]); method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void removeOnPreferredDeviceForStrategyChangedListener(@NonNull android.media.AudioManager.OnPreferredDeviceForStrategyChangedListener); method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void removeOnPreferredDevicesForCapturePresetChangedListener(@NonNull android.media.AudioManager.OnPreferredDevicesForCapturePresetChangedListener); method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void removeOnPreferredDevicesForStrategyChangedListener(@NonNull android.media.AudioManager.OnPreferredDevicesForStrategyChangedListener); @@ -6148,7 +6148,7 @@ package android.media { method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, @NonNull android.media.AudioAttributes, int, int) throws java.lang.IllegalArgumentException; method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.MODIFY_AUDIO_ROUTING}) public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, @NonNull android.media.AudioAttributes, int, int, android.media.audiopolicy.AudioPolicy) throws java.lang.IllegalArgumentException; method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int requestAudioFocus(@NonNull android.media.AudioFocusRequest, @Nullable android.media.audiopolicy.AudioPolicy); - method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setActiveAssistantServiceUids(@NonNull java.util.List); + method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setActiveAssistantServiceUids(@NonNull int[]); method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo, @IntRange(from=0) long); method public void setAudioServerStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.AudioServerStateCallback); method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setDeviceVolumeBehavior(@NonNull android.media.AudioDeviceAttributes, int); diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 2f95928b9b0a5..ec48b4c62277d 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -91,7 +91,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; /** * AudioManager provides access to volume and ringer mode control. @@ -8349,100 +8348,97 @@ public class AudioManager { } /** - * Add UID's that can be considered as assistant. + * Add UIDs that can be considered as assistant. * - * @param assistantUids UID's of the services that can be considered as assistant. + * @param assistantUids UIDs of the services that can be considered as assistant. * * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) - public void addAssistantServicesUids(@NonNull List assistantUids) { + public void addAssistantServicesUids(@NonNull int[] assistantUids) { try { - getService().addAssistantServicesUids(assistantUids.stream() - .mapToInt(Integer::intValue).toArray()); + getService().addAssistantServicesUids(assistantUids); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** - * Remove UID's that can be considered as assistant. + * Remove UIDs that can be considered as assistant. * - * @param assistantUids UID'S of the services that should be remove. + * @param assistantUids UIDs of the services that should be remove. * * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) - public void removeAssistantServicesUids(@NonNull List assistantUids) { + public void removeAssistantServicesUids(@NonNull int[] assistantUids) { try { - getService().removeAssistantServicesUids(assistantUids.stream() - .mapToInt(Integer::intValue).toArray()); + getService().removeAssistantServicesUids(assistantUids); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** - * Get the list of assistants UIDs that been added with the - * {@link #addAssistantServicesUids(List)} (List)} and not yet removed with - * {@link #removeAssistantServicesUids(List)} + * Get the assistants UIDs that been added with the + * {@link #addAssistantServicesUids(int[])} and not yet removed with + * {@link #removeAssistantServicesUids(int[])} * - * @return list of assistants UID's + * @return array of assistants UIDs * * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) - public @NonNull List getAssistantServicesUids() { + public @NonNull int[] getAssistantServicesUids() { try { int[] uids = getService().getAssistantServicesUids(); - return Arrays.stream(uids).boxed().collect(Collectors.toList()); + return Arrays.copyOf(uids, uids.length); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** - * Sets UID's that can be considered as active assistant. Calling the API with a new list will - * overwrite previous list. If the list of UIDs is empty then no UID will be considered active. - * In this manner calling the API with an empty list will remove all UID's previously set. + * Sets UIDs that can be considered as active assistant. Calling the API with a new array will + * overwrite previous UIDs. If the array of UIDs is empty then no UID will be considered active. + * In this manner calling the API with an empty array will remove all UIDs previously set. * - * @param assistantUids UID'S of the services that can be considered active assistant. Can be - * an empty list, for this no UID will be considered active. + * @param assistantUids UIDs of the services that can be considered active assistant. Can be + * an empty array, for this no UID will be considered active. * *

Note that during audio service crash reset and after boot up the list of active assistant - * UID's will be reset to an empty list (i.e. no UID will be considered as an active assistant). + * UIDs will be reset to an empty list (i.e. no UID will be considered as an active assistant). * Just after user switch the list of active assistant will also reset to empty. * * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) - public void setActiveAssistantServiceUids(@NonNull List assistantUids) { + public void setActiveAssistantServiceUids(@NonNull int[] assistantUids) { try { - getService().setActiveAssistantServiceUids(assistantUids.stream() - .mapToInt(Integer::intValue).toArray()); + getService().setActiveAssistantServiceUids(assistantUids); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** - * Get the list of active assistant UIDs last set with the - * {@link #setActiveAssistantServiceUids(List)} + * Get active assistant UIDs last set with the + * {@link #setActiveAssistantServiceUids(int[])} * - * @return list of active assistants UID's + * @return array of active assistants UIDs * * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) - public @NonNull List getActiveAssistantServicesUids() { + public @NonNull int[] getActiveAssistantServicesUids() { try { int[] uids = getService().getActiveAssistantServiceUids(); - return Arrays.stream(uids).boxed().collect(Collectors.toList()); + return Arrays.copyOf(uids, uids.length); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index af20ef162ddea..3734bd15c5ffb 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -11299,6 +11299,7 @@ public class AudioService extends IAudioService.Stub @Override public void setActiveAssistantServiceUids(int [] activeAssistantUids) { enforceModifyAudioRoutingPermission(); + Objects.requireNonNull(activeAssistantUids); synchronized (mSettingsLock) { mActiveAssistantServiceUids = activeAssistantUids; }