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

Commit 5a9bf143 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi Committed by Automerger Merge Worker
Browse files

Merge "Address Audio Java API feedback" into rvc-dev am: 5897ede3 am: f1be209a am: 79f0d2b2

Change-Id: I939f4d64887b09e975c09f2c10eb414a6e97b7e2
parents 26eb29e5 79f0d2b2
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -24357,7 +24357,7 @@ package android.media {
  }
  public final class AudioMetadata {
    method @NonNull public static android.media.AudioMetadata.Map createMap();
    method @NonNull public static android.media.AudioMetadataMap createMap();
  }
  public static class AudioMetadata.Format {
@@ -24375,16 +24375,16 @@ package android.media {
    method @NonNull public Class<T> getValueClass();
  }
  public static interface AudioMetadata.Map extends android.media.AudioMetadata.ReadMap {
  public interface AudioMetadataMap extends android.media.AudioMetadataReadMap {
    method @Nullable public <T> T remove(@NonNull android.media.AudioMetadata.Key<T>);
    method @Nullable public <T> T set(@NonNull android.media.AudioMetadata.Key<T>, @NonNull T);
  }
  public static interface AudioMetadata.ReadMap {
  public interface AudioMetadataReadMap {
    method public <T> boolean containsKey(@NonNull android.media.AudioMetadata.Key<T>);
    method @NonNull public android.media.AudioMetadata.Map dup();
    method @NonNull public android.media.AudioMetadataMap dup();
    method @Nullable public <T> T get(@NonNull android.media.AudioMetadata.Key<T>);
    method public int size();
    method @IntRange(from=0) public int size();
  }
  public final class AudioPlaybackCaptureConfiguration {
@@ -24699,7 +24699,7 @@ package android.media {
  }
  public static interface AudioTrack.OnCodecFormatChangedListener {
    method public void onCodecFormatChanged(@NonNull android.media.AudioTrack, @Nullable android.media.AudioMetadata.ReadMap);
    method public void onCodecFormatChanged(@NonNull android.media.AudioTrack, @Nullable android.media.AudioMetadataReadMap);
  }
  public static interface AudioTrack.OnPlaybackPositionUpdateListener {
+4 −10
Original line number Diff line number Diff line
@@ -4178,11 +4178,11 @@ package android.media {
    method @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 public void clearAudioServerStateCallback();
    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int dispatchAudioFocusChange(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy);
    method @IntRange(from=0) public int getAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo);
    method @IntRange(from=0) public long getAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo);
    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List<android.media.audiopolicy.AudioProductStrategy> getAudioProductStrategies();
    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List<android.media.audiopolicy.AudioVolumeGroup> getAudioVolumeGroups();
    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public java.util.List<android.media.AudioDeviceAttributes> getDevicesForAttributes(@NonNull android.media.AudioAttributes);
    method @IntRange(from=0) public int getMaxAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo);
    method @IntRange(from=0) public long getMaxAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo);
    method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMaxVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
    method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMinVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
    method @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioDeviceAttributes getPreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy);
@@ -4197,7 +4197,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 boolean setAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo, @IntRange(from=0) 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 setFocusRequestResult(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy);
    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setPreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy, @NonNull android.media.AudioDeviceAttributes);
@@ -4272,17 +4272,11 @@ package android.media {
  }
  public static class AudioTrack.TunerConfiguration {
    ctor @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public AudioTrack.TunerConfiguration(@IntRange(from=1) int, @IntRange(from=1) int);
    method @IntRange(from=1) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getContentId();
    method @IntRange(from=1) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getSyncId();
  }
  public static class AudioTrack.TunerConfiguration.Builder {
    ctor public AudioTrack.TunerConfiguration.Builder();
    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioTrack.TunerConfiguration build();
    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioTrack.TunerConfiguration.Builder setContentId(@IntRange(from=1) int);
    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioTrack.TunerConfiguration.Builder setSyncId(@IntRange(from=1) int);
  }
  public class HwAudioSource {
    method public boolean isPlaying();
    method public void start();
+2 −2
Original line number Diff line number Diff line
@@ -432,7 +432,7 @@ public final class AudioDeviceInfo {
     * @return An array of supported encapsulation modes for the device.  This
     *     may be an empty array if no encapsulation modes are supported.
     */
    public @NonNull int[] getEncapsulationModes() {
    public @NonNull @AudioTrack.EncapsulationMode int[] getEncapsulationModes() {
        // Implement a getter in r-dev or r-tv-dev as needed.
        return new int[0];  // be careful of returning a copy of any internal data.
    }
@@ -451,7 +451,7 @@ public final class AudioDeviceInfo {
     * @return An array of supported encapsulation metadata types for the device.  This
     *     may be an empty array if no metadata types are supported.
     */
    public @NonNull int[] getEncapsulationMetadataTypes() {
    public @NonNull @AudioTrack.EncapsulationMetadataType int[] getEncapsulationMetadataTypes() {
        // Implement a getter in r-dev or r-tv-dev as needed.
        return new int[0];  // be careful of returning a copy of any internal data.
    }
+4 −4
Original line number Diff line number Diff line
@@ -4769,7 +4769,7 @@ public class AudioManager {
     * opened on that device.
     *
     * @param device an instance of {@link AudioDeviceInfo} returned from {@link getDevices()}.
     * @param delayMs delay in milliseconds desired.  This should be in range of {@code 0}
     * @param delayMillis delay in milliseconds desired.  This should be in range of {@code 0}
     *     to the value returned by {@link #getMaxAdditionalOutputDeviceDelay()}.
     * @return true if successful, false if the device does not support output device delay
     *     or the delay is not in range of {@link #getMaxAdditionalOutputDeviceDelay()}.
@@ -4777,7 +4777,7 @@ public class AudioManager {
    @SystemApi
    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
    public boolean setAdditionalOutputDeviceDelay(
            @NonNull AudioDeviceInfo device, @IntRange(from = 0) int delayMs) {
            @NonNull AudioDeviceInfo device, @IntRange(from = 0) long delayMillis) {
        Objects.requireNonNull(device);
        // Implement the setter in r-dev or r-tv-dev as needed.
        return false;
@@ -4793,7 +4793,7 @@ public class AudioManager {
     */
    @SystemApi
    @IntRange(from = 0)
    public int getAdditionalOutputDeviceDelay(@NonNull AudioDeviceInfo device) {
    public long getAdditionalOutputDeviceDelay(@NonNull AudioDeviceInfo device) {
        Objects.requireNonNull(device);
        // Implement the getter in r-dev or r-tv-dev as needed.
        return 0;
@@ -4811,7 +4811,7 @@ public class AudioManager {
     */
    @SystemApi
    @IntRange(from = 0)
    public int getMaxAdditionalOutputDeviceDelay(@NonNull AudioDeviceInfo device) {
    public long getMaxAdditionalOutputDeviceDelay(@NonNull AudioDeviceInfo device) {
        Objects.requireNonNull(device);
        // Implement the getter in r-dev or r-tv-dev as needed.
        return 0;
+5 −90
Original line number Diff line number Diff line
@@ -79,96 +79,11 @@ public final class AudioMetadata {
    }

    /**
     * A read only {@code Map} interface of {@link Key} value pairs.
     *
     * <p>Using a {@link Key} interface, the map looks up the corresponding value.</p>
     */
    public interface ReadMap {
        /**
         * Returns true if the key exists in the map.
         *
         * @param key interface for requesting the value.
         * @param <T> type of value.
         * @return true if key exists in the Map.
         */
        <T> boolean containsKey(@NonNull Key<T> key);

        /**
         * Returns a copy of the map.
         *
         * This is intended for safe conversion between a {@link ReadMap}
         * interface and a {@link Map} interface.
         * Currently only simple objects are used for key values which
         * means a shallow copy is sufficient.
         *
         * @return a Map copied from the existing map.
         */
        @NonNull
        Map dup(); // lint checker doesn't like clone().

        /**
         * Returns the value associated with the key.
         *
         * @param key interface for requesting the value.
         * @param <T> type of value.
         * @return returns the value of associated with key or null if it doesn't exist.
         */
        @Nullable
        <T> T get(@NonNull Key<T> key);

        /**
         * Returns a {@code Set} of keys associated with the map.
         * @hide
         */
        @NonNull
        Set<Key<?>> keySet();

        /**
         * Returns the number of elements in the map.
         */
        int size();
    }

    /**
     * A writeable {@link Map} interface of {@link Key} value pairs.
     * This interface is not guaranteed to be thread-safe
     * unless the supplier for the {@code Map} states it as thread safe.
     */
    // TODO: Create a wrapper like java.util.Collections.synchronizedMap?
    public interface Map extends ReadMap {
        /**
         * Removes the value associated with the key.
         * @param key interface for storing the value.
         * @param <T> type of value.
         * @return the value of the key, null if it doesn't exist.
         */
        @Nullable
        <T> T remove(@NonNull Key<T> key);

        /**
         * Sets a value for the key.
         *
         * @param key interface for storing the value.
         * @param <T> type of value.
         * @param value a non-null value of type T.
         * @return the previous value associated with key or null if it doesn't exist.
         */
        // See automatic Kotlin overloading for Java interoperability.
        // https://kotlinlang.org/docs/reference/java-interop.html#operators
        // See also Kotlin set for overloaded operator indexing.
        // https://kotlinlang.org/docs/reference/operator-overloading.html#indexed
        // Also the Kotlin mutable-list set.
        // https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-list/set.html
        @Nullable
        <T> T set(@NonNull Key<T> key, @NonNull T value);
    }

    /**
     * Creates a {@link Map} suitable for adding keys.
     * @return an empty {@link Map} instance.
     * Creates a {@link AudioMetadataMap} suitable for adding keys.
     * @return an empty {@link AudioMetadataMap} instance.
     */
    @NonNull
    public static Map createMap() {
    public static AudioMetadataMap createMap() {
        return new BaseMap();
    }

@@ -339,7 +254,7 @@ public final class AudioMetadata {
     * It is possible to require the keys to be of a certain class
     * before allowing a set or get operation.
     */
    public static class BaseMap implements Map {
    public static class BaseMap implements AudioMetadataMap {
        @Override
        public <T> boolean containsKey(@NonNull Key<T> key) {
            Pair<Key<?>, Object> valuePair = mHashMap.get(pairFromKey(key));
@@ -348,7 +263,7 @@ public final class AudioMetadata {

        @Override
        @NonNull
        public Map dup() {
        public AudioMetadataMap dup() {
            BaseMap map = new BaseMap();
            map.mHashMap.putAll(this.mHashMap);
            return map;
Loading