diff --git a/core/api/test-current.txt b/core/api/test-current.txt index d817c41d2b27..b8f2c5a85307 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -1361,6 +1361,7 @@ package android.location { package android.media { public final class AudioAttributes implements android.os.Parcelable { + method public static int[] getSdkUsages(); method @NonNull public static String usageToXsdString(int); method public static int xsdStringToUsage(@NonNull String); } @@ -1380,6 +1381,8 @@ package android.media { method @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public int abandonAudioFocusForTest(@NonNull android.media.AudioFocusRequest, @NonNull String); method @Nullable public static android.media.AudioDeviceInfo getDeviceInfoFromType(int); method @IntRange(from=0) @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public long getFadeOutDurationOnFocusLossMillis(@NonNull android.media.AudioAttributes); + method public static final int[] getPublicStreamTypes(); + method public int getStreamMinVolumeInt(int); method public boolean hasRegisteredDynamicPolicy(); method @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, android.Manifest.permission.QUERY_AUDIO_STATE}) public boolean isFullVolumeDevice(); method @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public int requestAudioFocusForTest(@NonNull android.media.AudioFocusRequest, @NonNull String, int, int); @@ -1403,6 +1406,7 @@ package android.media { method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS) public static float getMasterBalance(); method public static final int getNumStreamTypes(); method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS) public static int setMasterBalance(float); + method @NonNull public static String streamToString(int); field public static final int DEVICE_ROLE_DISABLED = 2; // 0x2 field public static final int DEVICE_ROLE_NONE = 0; // 0x0 field public static final int DEVICE_ROLE_PREFERRED = 1; // 0x1 @@ -1501,8 +1505,10 @@ package android.media.audiopolicy { } public final class AudioProductStrategy implements android.os.Parcelable { + method @NonNull public static android.media.AudioAttributes getDefaultAttributes(); method public int getLegacyStreamTypeForAudioAttributes(@NonNull android.media.AudioAttributes); method public int getVolumeGroupIdForAudioAttributes(@NonNull android.media.AudioAttributes); + method public int getVolumeGroupIdForLegacyStreamType(int); } } diff --git a/core/api/test-lint-baseline.txt b/core/api/test-lint-baseline.txt index 1833ed50ce4f..1d0325866c21 100644 --- a/core/api/test-lint-baseline.txt +++ b/core/api/test-lint-baseline.txt @@ -71,6 +71,10 @@ ActionValue: android.telephony.mbms.vendor.VendorUtils#EXTRA_TEMP_LIST: +AllUpper: android.media.audiopolicy.AudioProductStrategy#sDefaultAttributes: + Constant field names must be named with only upper case characters: `android.media.audiopolicy.AudioProductStrategy#sDefaultAttributes`, should be `S_DEFAULT_ATTRIBUTES`? + + ArrayReturn: android.app.UiAutomation#executeShellCommandRw(String): ArrayReturn: android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel#KeyphraseSoundModel(java.util.UUID, java.util.UUID, byte[], android.hardware.soundtrigger.SoundTrigger.Keyphrase[]) parameter #3: @@ -539,6 +543,8 @@ InterfaceConstant: android.telecom.PhoneAccountSuggestionService#SERVICE_INTERFA +InternalField: android.media.audiopolicy.AudioProductStrategy#sDefaultAttributes: + Internal field sDefaultAttributes must not be exposed InternalField: android.telephony.ims.ImsConferenceState#mParticipants: @@ -1091,8 +1097,14 @@ MissingNullability: android.location.LocationManager#getTestProviderCurrentReque MissingNullability: android.location.LocationRequest#writeToParcel(android.os.Parcel, int) parameter #0: +MissingNullability: android.media.AudioAttributes#SDK_USAGES: + Missing nullability on field `SDK_USAGES` in class `class android.media.AudioAttributes` +MissingNullability: android.media.AudioAttributes#getSdkUsages(): + Missing nullability on method `getSdkUsages` return MissingNullability: android.media.AudioFocusInfo#writeToParcel(android.os.Parcel, int) parameter #0: +MissingNullability: android.media.AudioManager#getPublicStreamTypes(): + Missing nullability on method `getPublicStreamTypes` return MissingNullability: android.media.AudioRecordingConfiguration#AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String) parameter #3: MissingNullability: android.media.AudioRecordingConfiguration#AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String) parameter #4: @@ -1109,6 +1121,8 @@ MissingNullability: android.media.AudioRecordingConfiguration#AudioRecordingConf MissingNullability: android.media.AudioRecordingConfiguration#AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String, int, boolean, int, android.media.audiofx.AudioEffect.Descriptor[], android.media.audiofx.AudioEffect.Descriptor[]) parameter #6: +MissingNullability: android.media.AudioSystem#streamToString(int): + Missing nullability on method `streamToString` return MissingNullability: android.media.PlaybackParams#setAudioStretchMode(int): MissingNullability: android.media.audiofx.AudioEffect#EFFECT_TYPE_NULL: diff --git a/core/java/android/preference/SeekBarVolumizer.java b/core/java/android/preference/SeekBarVolumizer.java index 400b312bb913..69a09fb9b7f1 100644 --- a/core/java/android/preference/SeekBarVolumizer.java +++ b/core/java/android/preference/SeekBarVolumizer.java @@ -214,7 +214,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba return AudioManager.getAudioProductStrategies().stream() .map(strategy -> strategy.getVolumeGroupIdForAudioAttributes( - AudioProductStrategy.sDefaultAttributes)) + AudioProductStrategy.getDefaultAttributes())) .filter(volumeGroupId -> volumeGroupId != AudioVolumeGroup.DEFAULT_VOLUME_GROUP) .findFirst() .orElse(AudioVolumeGroup.DEFAULT_VOLUME_GROUP); diff --git a/media/java/android/media/AudioAttributes.java b/media/java/android/media/AudioAttributes.java index 7e729d8c371f..ce5fa05caae7 100644 --- a/media/java/android/media/AudioAttributes.java +++ b/media/java/android/media/AudioAttributes.java @@ -333,6 +333,14 @@ public final class AudioAttributes implements Parcelable { USAGE_ASSISTANT, }; + /** + * @hide + */ + @TestApi + public static int[] getSdkUsages() { + return SDK_USAGES; + } + /** * Flag defining a behavior where the audibility of the sound will be ensured by the system. */ diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index a717a90c1c37..56a8b1673fac 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -387,6 +387,18 @@ public class AudioManager { */ @Deprecated public static final int NUM_STREAMS = AudioSystem.NUM_STREAMS; + /** @hide */ + private static final int[] PUBLIC_STREAM_TYPES = { AudioManager.STREAM_VOICE_CALL, + AudioManager.STREAM_SYSTEM, AudioManager.STREAM_RING, AudioManager.STREAM_MUSIC, + AudioManager.STREAM_ALARM, AudioManager.STREAM_NOTIFICATION, + AudioManager.STREAM_DTMF, AudioManager.STREAM_ACCESSIBILITY }; + + /** @hide */ + @TestApi + public static final int[] getPublicStreamTypes() { + return PUBLIC_STREAM_TYPES; + } + /** * Increase the ringer volume. * @@ -1065,6 +1077,7 @@ public class AudioManager { * @return The minimum valid volume index for the stream. * @see #getStreamVolume(int) */ + @TestApi public int getStreamMinVolumeInt(int streamType) { final IAudioService service = getService(); try { diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java index 8134d6f8352d..ebb2e8729bb1 100644 --- a/media/java/android/media/AudioSystem.java +++ b/media/java/android/media/AudioSystem.java @@ -1995,7 +1995,8 @@ public class AudioSystem }; /** @hide */ - public static String streamToString(int stream) { + @TestApi + public static @NonNull String streamToString(int stream) { if (stream >= 0 && stream < STREAM_NAMES.length) return STREAM_NAMES[stream]; if (stream == AudioManager.USE_DEFAULT_STREAM_TYPE) return "USE_DEFAULT_STREAM_TYPE"; return "UNKNOWN_STREAM_" + stream; diff --git a/media/java/android/media/audiopolicy/AudioProductStrategy.java b/media/java/android/media/audiopolicy/AudioProductStrategy.java index 5d6ae5411b98..31d596765bcc 100644 --- a/media/java/android/media/audiopolicy/AudioProductStrategy.java +++ b/media/java/android/media/audiopolicy/AudioProductStrategy.java @@ -275,6 +275,7 @@ public final class AudioProductStrategy implements Parcelable { * @return the volume group id relevant for the given streamType. * If none is found, {@link AudioVolumeGroup#DEFAULT_VOLUME_GROUP} is returned. */ + @TestApi public int getVolumeGroupIdForLegacyStreamType(int streamType) { for (final AudioAttributesGroup aag : mAudioAttributesGroups) { if (aag.supportsStreamType(streamType)) { @@ -355,10 +356,18 @@ public final class AudioProductStrategy implements Parcelable { * @hide * Default attributes, with default source to be aligned with native. */ - public static final @NonNull AudioAttributes sDefaultAttributes = + private static final @NonNull AudioAttributes DEFAULT_ATTRIBUTES = new AudioAttributes.Builder().setCapturePreset(MediaRecorder.AudioSource.DEFAULT) .build(); + /** + * @hide + */ + @TestApi + public static @NonNull AudioAttributes getDefaultAttributes() { + return DEFAULT_ATTRIBUTES; + } + /** * To avoid duplicating the logic in java and native, we shall make use of * native API native_get_product_strategies_from_audio_attributes @@ -372,7 +381,7 @@ public final class AudioProductStrategy implements Parcelable { Preconditions.checkNotNull(attr, "attr must not be null"); String refFormattedTags = TextUtils.join(";", refAttr.getTags()); String cliFormattedTags = TextUtils.join(";", attr.getTags()); - if (refAttr.equals(sDefaultAttributes)) { + if (refAttr.equals(DEFAULT_ATTRIBUTES)) { return false; } return ((refAttr.getSystemUsage() == AudioAttributes.USAGE_UNKNOWN) diff --git a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioManagerTest.java b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioManagerTest.java index 1131c623e428..27cf9434b34d 100644 --- a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioManagerTest.java +++ b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioManagerTest.java @@ -255,7 +255,7 @@ public class AudioManagerTest extends AudioVolumesTestBase { AudioVolumeGroupCallbackHelper vgCbReceiver = new AudioVolumeGroupCallbackHelper(); mAudioManager.registerVolumeGroupCallback(mContext.getMainExecutor(), vgCbReceiver); - final List publicStreams = Ints.asList(PUBLIC_STREAM_TYPES); + final List publicStreams = Ints.asList(AudioManager.getPublicStreamTypes()); try { // Validate Audio Volume Groups callback reception for (final AudioVolumeGroup audioVolumeGroup : audioVolumeGroups) { diff --git a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java index c0f596b974e1..0e918d13e042 100644 --- a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java +++ b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java @@ -20,6 +20,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import android.media.AudioAttributes; +import android.media.AudioManager; import android.media.AudioSystem; import android.media.audiopolicy.AudioProductStrategy; import android.media.audiopolicy.AudioVolumeGroup; @@ -71,7 +72,7 @@ public class AudioProductStrategyTest extends AudioVolumesTestBase { assertNotNull(audioProductStrategies); assertTrue(audioProductStrategies.size() > 0); - for (final int streamType : PUBLIC_STREAM_TYPES) { + for (final int streamType : AudioManager.getPublicStreamTypes()) { AudioAttributes aaFromStreamType = AudioProductStrategy.getAudioAttributesForStrategyWithLegacyStreamType( streamType); diff --git a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumesTestBase.java b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumesTestBase.java index a17d65cf7376..b30ef307855d 100644 --- a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumesTestBase.java +++ b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumesTestBase.java @@ -37,15 +37,10 @@ public class AudioVolumesTestBase extends ActivityInstrumentationTestCase2