Moving additional AudioManager tests to gts/GMSCore
Bug: 183606360 Test: atest GtsGmscoreHostTestCases:AudioServiceHostTest#testAudioVolumeGroups Test: gts-tradefed run gts --skip-device-info --skip-system-status-check com.android.compatibility.common.tradefed.targetprep.NetworkConnectivityChecker -m GtsGmscoreHostTestCases -t 'com.google.android.gts.audioservice.AudioServiceHostTest#testAudioVolumeGroups' Change-Id: I145cfd5602ea9de92012654704d6ebffe723868a
This commit is contained in:
parent
ec51f19cd8
commit
d6f87c8530
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
|
@ -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.
|
||||
*/
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -255,7 +255,7 @@ public class AudioManagerTest extends AudioVolumesTestBase {
|
||||
AudioVolumeGroupCallbackHelper vgCbReceiver = new AudioVolumeGroupCallbackHelper();
|
||||
mAudioManager.registerVolumeGroupCallback(mContext.getMainExecutor(), vgCbReceiver);
|
||||
|
||||
final List<Integer> publicStreams = Ints.asList(PUBLIC_STREAM_TYPES);
|
||||
final List<Integer> publicStreams = Ints.asList(AudioManager.getPublicStreamTypes());
|
||||
try {
|
||||
// Validate Audio Volume Groups callback reception
|
||||
for (final AudioVolumeGroup audioVolumeGroup : audioVolumeGroups) {
|
||||
|
@ -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);
|
||||
|
@ -37,15 +37,10 @@ public class AudioVolumesTestBase extends ActivityInstrumentationTestCase2<Audio
|
||||
// Default matches the invalid (empty) attributes from native.
|
||||
// The difference is the input source default which is not aligned between native and java
|
||||
public static final AudioAttributes sDefaultAttributes =
|
||||
AudioProductStrategy.sDefaultAttributes;
|
||||
AudioProductStrategy.getDefaultAttributes();
|
||||
|
||||
public static final AudioAttributes sInvalidAttributes = new AudioAttributes.Builder().build();
|
||||
|
||||
public 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 };
|
||||
|
||||
public AudioVolumesTestBase() {
|
||||
super("com.android.audiopolicytest", AudioPolicyTest.class);
|
||||
}
|
||||
@ -63,7 +58,7 @@ public class AudioVolumesTestBase extends ActivityInstrumentationTestCase2<Audio
|
||||
}
|
||||
AudioAttributes avgAttributes = sDefaultAttributes;
|
||||
for (final AudioAttributes aa : avg.getAudioAttributes()) {
|
||||
if (!aa.equals(AudioProductStrategy.sDefaultAttributes)) {
|
||||
if (!aa.equals(AudioProductStrategy.getDefaultAttributes())) {
|
||||
avgAttributes = aa;
|
||||
break;
|
||||
}
|
||||
@ -89,7 +84,7 @@ public class AudioVolumesTestBase extends ActivityInstrumentationTestCase2<Audio
|
||||
assertTrue(!avg.getAudioAttributes().isEmpty());
|
||||
AudioAttributes avgAttributes = sDefaultAttributes;
|
||||
for (final AudioAttributes aa : avg.getAudioAttributes()) {
|
||||
if (!aa.equals(AudioProductStrategy.sDefaultAttributes)) {
|
||||
if (!aa.equals(AudioProductStrategy.getDefaultAttributes())) {
|
||||
avgAttributes = aa;
|
||||
break;
|
||||
}
|
||||
@ -114,7 +109,7 @@ public class AudioVolumesTestBase extends ActivityInstrumentationTestCase2<Audio
|
||||
|
||||
// Store the original volumes that that they can be recovered in tearDown().
|
||||
mOriginalStreamVolumes.clear();
|
||||
for (int streamType : PUBLIC_STREAM_TYPES) {
|
||||
for (int streamType : AudioManager.getPublicStreamTypes()) {
|
||||
mOriginalStreamVolumes.put(streamType, mAudioManager.getStreamVolume(streamType));
|
||||
}
|
||||
// Store the original volume per attributes so that they can be recovered in tearDown()
|
||||
|
@ -3470,7 +3470,7 @@ public class AudioService extends IAudioService.Stub
|
||||
}
|
||||
// The default volume group is the one hosted by default product strategy, i.e.
|
||||
// supporting Default Attributes
|
||||
return getVolumeGroupIdForAttributesInt(AudioProductStrategy.sDefaultAttributes);
|
||||
return getVolumeGroupIdForAttributesInt(AudioProductStrategy.getDefaultAttributes());
|
||||
}
|
||||
|
||||
private int getVolumeGroupIdForAttributesInt(@NonNull AudioAttributes attributes) {
|
||||
@ -6162,7 +6162,7 @@ public class AudioService extends IAudioService.Stub
|
||||
|
||||
private void ensureValidAttributes(AudioVolumeGroup avg) {
|
||||
boolean hasAtLeastOneValidAudioAttributes = avg.getAudioAttributes().stream()
|
||||
.anyMatch(aa -> !aa.equals(AudioProductStrategy.sDefaultAttributes));
|
||||
.anyMatch(aa -> !aa.equals(AudioProductStrategy.getDefaultAttributes()));
|
||||
if (!hasAtLeastOneValidAudioAttributes) {
|
||||
throw new IllegalArgumentException("Volume Group " + avg.name()
|
||||
+ " has no valid audio attributes");
|
||||
@ -6210,7 +6210,7 @@ public class AudioService extends IAudioService.Stub
|
||||
private int mIndexMax;
|
||||
private int mLegacyStreamType = AudioSystem.STREAM_DEFAULT;
|
||||
private int mPublicStreamType = AudioSystem.STREAM_MUSIC;
|
||||
private AudioAttributes mAudioAttributes = AudioProductStrategy.sDefaultAttributes;
|
||||
private AudioAttributes mAudioAttributes = AudioProductStrategy.getDefaultAttributes();
|
||||
|
||||
// No API in AudioSystem to get a device from strategy or from attributes.
|
||||
// Need a valid public stream type to use current API getDeviceForStream
|
||||
@ -6223,8 +6223,9 @@ public class AudioService extends IAudioService.Stub
|
||||
if (DEBUG_VOL) {
|
||||
Log.v(TAG, "VolumeGroupState for " + avg.toString());
|
||||
}
|
||||
// mAudioAttributes is the default at this point
|
||||
for (final AudioAttributes aa : avg.getAudioAttributes()) {
|
||||
if (!aa.equals(AudioProductStrategy.sDefaultAttributes)) {
|
||||
if (!aa.equals(mAudioAttributes)) {
|
||||
mAudioAttributes = aa;
|
||||
break;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user