Merge "Rename AudioDevice to AudioDeviceAttributes"
This commit is contained in:
committed by
Android (Google) Code Review
commit
1c4cb8be3b
@@ -4247,15 +4247,15 @@ package android.media {
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioAttributes.Builder setSystemUsage(int);
|
||||
}
|
||||
|
||||
public final class AudioDevice implements android.os.Parcelable {
|
||||
ctor public AudioDevice(@NonNull android.media.AudioDeviceInfo);
|
||||
ctor public AudioDevice(int, int, @NonNull String);
|
||||
public final class AudioDeviceAttributes implements android.os.Parcelable {
|
||||
ctor public AudioDeviceAttributes(@NonNull android.media.AudioDeviceInfo);
|
||||
ctor public AudioDeviceAttributes(int, int, @NonNull String);
|
||||
method public int describeContents();
|
||||
method @NonNull public String getAddress();
|
||||
method public int getRole();
|
||||
method public int getType();
|
||||
method public void writeToParcel(@NonNull android.os.Parcel, int);
|
||||
field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioDevice> CREATOR;
|
||||
field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioDeviceAttributes> CREATOR;
|
||||
field public static final int ROLE_INPUT = 1; // 0x1
|
||||
field public static final int ROLE_OUTPUT = 2; // 0x2
|
||||
}
|
||||
@@ -4293,11 +4293,11 @@ package android.media {
|
||||
method @IntRange(from=0) public int 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.AudioDevice> getDevicesForAttributes(@NonNull android.media.AudioAttributes);
|
||||
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) @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.AudioDevice getPreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy);
|
||||
method @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioDeviceAttributes getPreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy);
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int[] getSupportedSystemUsages();
|
||||
method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
|
||||
method public boolean isAudioServerRunning();
|
||||
@@ -4312,7 +4312,7 @@ package android.media {
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo, @IntRange(from=0) int);
|
||||
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.AudioDevice);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setPreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy, @NonNull android.media.AudioDeviceAttributes);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setSupportedSystemUsages(@NonNull int[]);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setVolumeIndexForAttributes(@NonNull android.media.AudioAttributes, int, int);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void unregisterAudioPolicy(@NonNull android.media.audiopolicy.AudioPolicy);
|
||||
@@ -4332,7 +4332,7 @@ package android.media {
|
||||
}
|
||||
|
||||
public static interface AudioManager.OnPreferredDeviceForStrategyChangedListener {
|
||||
method public void onPreferredDeviceForStrategyChanged(@NonNull android.media.audiopolicy.AudioProductStrategy, @Nullable android.media.AudioDevice);
|
||||
method public void onPreferredDeviceForStrategyChanged(@NonNull android.media.audiopolicy.AudioProductStrategy, @Nullable android.media.AudioDeviceAttributes);
|
||||
}
|
||||
|
||||
public abstract static class AudioManager.VolumeGroupCallback {
|
||||
@@ -4412,7 +4412,7 @@ package android.media {
|
||||
package android.media.audiofx {
|
||||
|
||||
public class AudioEffect {
|
||||
ctor @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public AudioEffect(@NonNull java.util.UUID, @NonNull android.media.AudioDevice);
|
||||
ctor @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public AudioEffect(@NonNull java.util.UUID, @NonNull android.media.AudioDeviceAttributes);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -153,7 +153,7 @@ cc_library_shared {
|
||||
"android_util_Binder.cpp",
|
||||
"android_util_MemoryIntArray.cpp",
|
||||
"android_util_Process.cpp",
|
||||
"android_media_AudioDevice.cpp",
|
||||
"android_media_AudioDeviceAttributes.cpp",
|
||||
"android_media_AudioEffectDescriptor.cpp",
|
||||
"android_media_AudioRecord.cpp",
|
||||
"android_media_AudioSystem.cpp",
|
||||
|
||||
@@ -86,7 +86,7 @@ extern int register_android_hardware_UsbDeviceConnection(JNIEnv *env);
|
||||
extern int register_android_hardware_UsbRequest(JNIEnv *env);
|
||||
extern int register_android_hardware_location_ActivityRecognitionHardware(JNIEnv* env);
|
||||
|
||||
extern int register_android_media_AudioDevice(JNIEnv* env);
|
||||
extern int register_android_media_AudioDeviceAttributes(JNIEnv* env);
|
||||
extern int register_android_media_AudioEffectDescriptor(JNIEnv *env);
|
||||
extern int register_android_media_AudioRecord(JNIEnv *env);
|
||||
extern int register_android_media_AudioSystem(JNIEnv *env);
|
||||
@@ -1517,7 +1517,7 @@ static const RegJNIRec gRegJNI[] = {
|
||||
REG_JNI(register_android_hardware_UsbDeviceConnection),
|
||||
REG_JNI(register_android_hardware_UsbRequest),
|
||||
REG_JNI(register_android_hardware_location_ActivityRecognitionHardware),
|
||||
REG_JNI(register_android_media_AudioDevice),
|
||||
REG_JNI(register_android_media_AudioDeviceAttributes),
|
||||
REG_JNI(register_android_media_AudioEffectDescriptor),
|
||||
REG_JNI(register_android_media_AudioSystem),
|
||||
REG_JNI(register_android_media_AudioRecord),
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "android_media_AudioDevice.h"
|
||||
#include "android_media_AudioDeviceAttributes.h"
|
||||
#include "android_media_AudioErrors.h"
|
||||
#include "core_jni_helpers.h"
|
||||
|
||||
@@ -22,29 +22,30 @@
|
||||
|
||||
using namespace android;
|
||||
|
||||
static jclass gAudioDeviceClass;
|
||||
static jmethodID gAudioDeviceCstor;
|
||||
static jclass gAudioDeviceAttributesClass;
|
||||
static jmethodID gAudioDeviceAttributesCstor;
|
||||
|
||||
namespace android {
|
||||
|
||||
jint createAudioDeviceFromNative(JNIEnv *env, jobject *jAudioDevice,
|
||||
jint createAudioDeviceAttributesFromNative(JNIEnv *env, jobject *jAudioDeviceAttributes,
|
||||
const AudioDeviceTypeAddr *devTypeAddr) {
|
||||
jint jStatus = (jint)AUDIO_JAVA_SUCCESS;
|
||||
jint jNativeType = (jint)devTypeAddr->mType;
|
||||
ScopedLocalRef<jstring> jAddress(env, env->NewStringUTF(devTypeAddr->mAddress.data()));
|
||||
|
||||
*jAudioDevice =
|
||||
env->NewObject(gAudioDeviceClass, gAudioDeviceCstor, jNativeType, jAddress.get());
|
||||
*jAudioDeviceAttributes = env->NewObject(gAudioDeviceAttributesClass, gAudioDeviceAttributesCstor,
|
||||
jNativeType, jAddress.get());
|
||||
|
||||
return jStatus;
|
||||
}
|
||||
|
||||
} // namespace android
|
||||
|
||||
int register_android_media_AudioDevice(JNIEnv *env) {
|
||||
jclass audioDeviceTypeAddressClass = FindClassOrDie(env, "android/media/AudioDevice");
|
||||
gAudioDeviceClass = MakeGlobalRefOrDie(env, audioDeviceTypeAddressClass);
|
||||
gAudioDeviceCstor =
|
||||
int register_android_media_AudioDeviceAttributes(JNIEnv *env) {
|
||||
jclass audioDeviceTypeAddressClass =
|
||||
FindClassOrDie(env, "android/media/AudioDeviceAttributes");
|
||||
gAudioDeviceAttributesClass = MakeGlobalRefOrDie(env, audioDeviceTypeAddressClass);
|
||||
gAudioDeviceAttributesCstor =
|
||||
GetMethodIDOrDie(env, audioDeviceTypeAddressClass, "<init>", "(ILjava/lang/String;)V");
|
||||
|
||||
return 0;
|
||||
@@ -14,8 +14,8 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef ANDROID_MEDIA_AUDIODEVICE_H
|
||||
#define ANDROID_MEDIA_AUDIODEVICE_H
|
||||
#ifndef ANDROID_MEDIA_AUDIODEVICEATTRIBUTES_H
|
||||
#define ANDROID_MEDIA_AUDIODEVICEATTRIBUTES_H
|
||||
|
||||
#include <media/AudioDeviceTypeAddr.h>
|
||||
#include <system/audio.h>
|
||||
@@ -24,9 +24,9 @@
|
||||
|
||||
namespace android {
|
||||
|
||||
// Create a Java AudioDevice instance from a C++ AudioDeviceTypeAddress
|
||||
// Create a Java AudioDeviceAttributes instance from a C++ AudioDeviceTypeAddress
|
||||
|
||||
extern jint createAudioDeviceFromNative(JNIEnv *env, jobject *jAudioDevice,
|
||||
extern jint createAudioDeviceAttributesFromNative(JNIEnv *env, jobject *jAudioDeviceAttributes,
|
||||
const AudioDeviceTypeAddr *devTypeAddr);
|
||||
} // namespace android
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
#include <system/audio.h>
|
||||
#include <system/audio_policy.h>
|
||||
#include "android_media_AudioAttributes.h"
|
||||
#include "android_media_AudioDevice.h"
|
||||
#include "android_media_AudioDeviceAttributes.h"
|
||||
#include "android_media_AudioEffectDescriptor.h"
|
||||
#include "android_media_AudioErrors.h"
|
||||
#include "android_media_AudioFormat.h"
|
||||
@@ -2352,7 +2352,7 @@ android_media_AudioSystem_getPreferredDeviceForStrategy(JNIEnv *env, jobject thi
|
||||
jint strategy, jobjectArray jDeviceArray)
|
||||
{
|
||||
if (jDeviceArray == nullptr || env->GetArrayLength(jDeviceArray) != 1) {
|
||||
ALOGE("%s invalid array to store AudioDevice", __FUNCTION__);
|
||||
ALOGE("%s invalid array to store AudioDeviceAttributes", __FUNCTION__);
|
||||
return (jint)AUDIO_JAVA_BAD_VALUE;
|
||||
}
|
||||
|
||||
@@ -2362,10 +2362,10 @@ android_media_AudioSystem_getPreferredDeviceForStrategy(JNIEnv *env, jobject thi
|
||||
if (status != NO_ERROR) {
|
||||
return (jint) status;
|
||||
}
|
||||
jobject jAudioDevice = NULL;
|
||||
jint jStatus = createAudioDeviceFromNative(env, &jAudioDevice, &elDevice);
|
||||
jobject jAudioDeviceAttributes = NULL;
|
||||
jint jStatus = createAudioDeviceAttributesFromNative(env, &jAudioDeviceAttributes, &elDevice);
|
||||
if (jStatus == AUDIO_JAVA_SUCCESS) {
|
||||
env->SetObjectArrayElement(jDeviceArray, 0, jAudioDevice);
|
||||
env->SetObjectArrayElement(jDeviceArray, 0, jAudioDeviceAttributes);
|
||||
}
|
||||
return jStatus;
|
||||
}
|
||||
@@ -2380,7 +2380,7 @@ android_media_AudioSystem_getDevicesForAttributes(JNIEnv *env, jobject thiz,
|
||||
// with reverse JNI to make the array grow as need as this would be less efficient, and some
|
||||
// components call this method often
|
||||
if (jDeviceArray == nullptr || maxResultSize == 0) {
|
||||
ALOGE("%s invalid array to store AudioDevice", __FUNCTION__);
|
||||
ALOGE("%s invalid array to store AudioDeviceAttributes", __FUNCTION__);
|
||||
return (jint)AUDIO_JAVA_BAD_VALUE;
|
||||
}
|
||||
|
||||
@@ -2401,13 +2401,13 @@ android_media_AudioSystem_getDevicesForAttributes(JNIEnv *env, jobject thiz,
|
||||
return AUDIO_JAVA_INVALID_OPERATION;
|
||||
}
|
||||
size_t index = 0;
|
||||
jobject jAudioDevice = NULL;
|
||||
jobject jAudioDeviceAttributes = NULL;
|
||||
for (const auto& device : devices) {
|
||||
jStatus = createAudioDeviceFromNative(env, &jAudioDevice, &device);
|
||||
jStatus = createAudioDeviceAttributesFromNative(env, &jAudioDeviceAttributes, &device);
|
||||
if (jStatus != AUDIO_JAVA_SUCCESS) {
|
||||
return jStatus;
|
||||
}
|
||||
env->SetObjectArrayElement(jDeviceArray, index++, jAudioDevice);
|
||||
env->SetObjectArrayElement(jDeviceArray, index++, jAudioDeviceAttributes);
|
||||
}
|
||||
return jStatus;
|
||||
}
|
||||
@@ -2519,10 +2519,10 @@ static const JNINativeMethod gMethods[] =
|
||||
(void *)android_media_AudioSystem_setPreferredDeviceForStrategy},
|
||||
{"removePreferredDeviceForStrategy", "(I)I",
|
||||
(void *)android_media_AudioSystem_removePreferredDeviceForStrategy},
|
||||
{"getPreferredDeviceForStrategy", "(I[Landroid/media/AudioDevice;)I",
|
||||
{"getPreferredDeviceForStrategy", "(I[Landroid/media/AudioDeviceAttributes;)I",
|
||||
(void *)android_media_AudioSystem_getPreferredDeviceForStrategy},
|
||||
{"getDevicesForAttributes",
|
||||
"(Landroid/media/AudioAttributes;[Landroid/media/AudioDevice;)I",
|
||||
"(Landroid/media/AudioAttributes;[Landroid/media/AudioDeviceAttributes;)I",
|
||||
(void *)android_media_AudioSystem_getDevicesForAttributes},
|
||||
{"setUserIdDeviceAffinities", "(I[I[Ljava/lang/String;)I",
|
||||
(void *)android_media_AudioSystem_setUserIdDeviceAffinities},
|
||||
|
||||
@@ -15,4 +15,4 @@
|
||||
|
||||
package android.media;
|
||||
|
||||
parcelable AudioDevice;
|
||||
parcelable AudioDeviceAttributes;
|
||||
@@ -28,8 +28,8 @@ import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @hide
|
||||
* Class to represent device type (speaker, headset...), address (if known) and role (input, output)
|
||||
* of an audio device.
|
||||
* Class to represent the attributes of an audio device: its type (speaker, headset...), address
|
||||
* (if known) and role (input, output).
|
||||
* <p>Unlike {@link AudioDeviceInfo}, the device
|
||||
* doesn't need to be connected to be uniquely identified, it can
|
||||
* for instance represent a specific A2DP headset even after a
|
||||
@@ -39,7 +39,7 @@ import java.util.Objects;
|
||||
* permission, APIs using one rely on MODIFY_AUDIO_ROUTING.
|
||||
*/
|
||||
@SystemApi
|
||||
public final class AudioDevice implements Parcelable {
|
||||
public final class AudioDeviceAttributes implements Parcelable {
|
||||
|
||||
/**
|
||||
* A role identifying input devices, such as microphones.
|
||||
@@ -78,7 +78,7 @@ public final class AudioDevice implements Parcelable {
|
||||
* type and address.
|
||||
*/
|
||||
@SystemApi
|
||||
public AudioDevice(@NonNull AudioDeviceInfo deviceInfo) {
|
||||
public AudioDeviceAttributes(@NonNull AudioDeviceInfo deviceInfo) {
|
||||
Objects.requireNonNull(deviceInfo);
|
||||
mRole = deviceInfo.isSink() ? ROLE_OUTPUT : ROLE_INPUT;
|
||||
mType = deviceInfo.getType();
|
||||
@@ -93,7 +93,7 @@ public final class AudioDevice implements Parcelable {
|
||||
* @param address the address of the device, or an empty string for devices without one
|
||||
*/
|
||||
@SystemApi
|
||||
public AudioDevice(@Role int role, @AudioDeviceInfo.AudioDeviceType int type,
|
||||
public AudioDeviceAttributes(@Role int role, @AudioDeviceInfo.AudioDeviceType int type,
|
||||
@NonNull String address) {
|
||||
Objects.requireNonNull(address);
|
||||
if (role != ROLE_OUTPUT && role != ROLE_INPUT) {
|
||||
@@ -111,7 +111,7 @@ public final class AudioDevice implements Parcelable {
|
||||
mAddress = address;
|
||||
}
|
||||
|
||||
/*package*/ AudioDevice(int nativeType, @NonNull String address) {
|
||||
/*package*/ AudioDeviceAttributes(int nativeType, @NonNull String address) {
|
||||
mRole = (nativeType & AudioSystem.DEVICE_BIT_IN) != 0 ? ROLE_INPUT : ROLE_OUTPUT;
|
||||
mType = AudioDeviceInfo.convertInternalDeviceToDeviceType(nativeType);
|
||||
mAddress = address;
|
||||
@@ -157,7 +157,7 @@ public final class AudioDevice implements Parcelable {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
AudioDevice that = (AudioDevice) o;
|
||||
AudioDeviceAttributes that = (AudioDeviceAttributes) o;
|
||||
return ((mRole == that.mRole)
|
||||
&& (mType == that.mType)
|
||||
&& mAddress.equals(that.mAddress));
|
||||
@@ -170,7 +170,7 @@ public final class AudioDevice implements Parcelable {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new String("AudioDevice:"
|
||||
return new String("AudioDeviceAttributes:"
|
||||
+ " role:" + roleToString(mRole)
|
||||
+ " type:" + (mRole == ROLE_OUTPUT ? AudioSystem.getOutputDeviceName(
|
||||
AudioDeviceInfo.convertDeviceTypeToInternalDevice(mType))
|
||||
@@ -191,25 +191,25 @@ public final class AudioDevice implements Parcelable {
|
||||
dest.writeString(mAddress);
|
||||
}
|
||||
|
||||
private AudioDevice(@NonNull Parcel in) {
|
||||
private AudioDeviceAttributes(@NonNull Parcel in) {
|
||||
mRole = in.readInt();
|
||||
mType = in.readInt();
|
||||
mAddress = in.readString();
|
||||
}
|
||||
|
||||
public static final @NonNull Parcelable.Creator<AudioDevice> CREATOR =
|
||||
new Parcelable.Creator<AudioDevice>() {
|
||||
public static final @NonNull Parcelable.Creator<AudioDeviceAttributes> CREATOR =
|
||||
new Parcelable.Creator<AudioDeviceAttributes>() {
|
||||
/**
|
||||
* Rebuilds an AudioDevice previously stored with writeToParcel().
|
||||
* @param p Parcel object to read the AudioDevice from
|
||||
* @return a new AudioDevice created from the data in the parcel
|
||||
* Rebuilds an AudioDeviceAttributes previously stored with writeToParcel().
|
||||
* @param p Parcel object to read the AudioDeviceAttributes from
|
||||
* @return a new AudioDeviceAttributes created from the data in the parcel
|
||||
*/
|
||||
public AudioDevice createFromParcel(Parcel p) {
|
||||
return new AudioDevice(p);
|
||||
public AudioDeviceAttributes createFromParcel(Parcel p) {
|
||||
return new AudioDeviceAttributes(p);
|
||||
}
|
||||
|
||||
public AudioDevice[] newArray(int size) {
|
||||
return new AudioDevice[size];
|
||||
public AudioDeviceAttributes[] newArray(int size) {
|
||||
return new AudioDeviceAttributes[size];
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -1597,7 +1597,7 @@ public class AudioManager {
|
||||
@SystemApi
|
||||
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
||||
public boolean setPreferredDeviceForStrategy(@NonNull AudioProductStrategy strategy,
|
||||
@NonNull AudioDevice device) {
|
||||
@NonNull AudioDeviceAttributes device) {
|
||||
Objects.requireNonNull(strategy);
|
||||
Objects.requireNonNull(device);
|
||||
try {
|
||||
@@ -1612,7 +1612,7 @@ public class AudioManager {
|
||||
/**
|
||||
* @hide
|
||||
* Removes the preferred audio device previously set with
|
||||
* {@link #setPreferredDeviceForStrategy(AudioProductStrategy, AudioDevice)}.
|
||||
* {@link #setPreferredDeviceForStrategy(AudioProductStrategy, AudioDeviceAttributes)}.
|
||||
* @param strategy the audio strategy whose routing will be affected
|
||||
* @return true if the operation was successful, false otherwise (invalid strategy, or no
|
||||
* device set for example)
|
||||
@@ -1633,14 +1633,14 @@ public class AudioManager {
|
||||
/**
|
||||
* @hide
|
||||
* Return the preferred device for an audio strategy, previously set with
|
||||
* {@link #setPreferredDeviceForStrategy(AudioProductStrategy, AudioDevice)}
|
||||
* {@link #setPreferredDeviceForStrategy(AudioProductStrategy, AudioDeviceAttributes)}
|
||||
* @param strategy the strategy to query
|
||||
* @return the preferred device for that strategy, or null if none was ever set or if the
|
||||
* strategy is invalid
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
||||
public @Nullable AudioDevice getPreferredDeviceForStrategy(
|
||||
public @Nullable AudioDeviceAttributes getPreferredDeviceForStrategy(
|
||||
@NonNull AudioProductStrategy strategy) {
|
||||
Objects.requireNonNull(strategy);
|
||||
try {
|
||||
@@ -1654,7 +1654,7 @@ public class AudioManager {
|
||||
* @hide
|
||||
* Interface to be notified of changes in the preferred audio device set for a given audio
|
||||
* strategy.
|
||||
* @see #setPreferredDeviceForStrategy(AudioProductStrategy, AudioDevice)
|
||||
* @see #setPreferredDeviceForStrategy(AudioProductStrategy, AudioDeviceAttributes)
|
||||
* @see #removePreferredDeviceForStrategy(AudioProductStrategy)
|
||||
* @see #getPreferredDeviceForStrategy(AudioProductStrategy)
|
||||
*/
|
||||
@@ -1668,7 +1668,7 @@ public class AudioManager {
|
||||
* preferred audio device
|
||||
*/
|
||||
void onPreferredDeviceForStrategyChanged(@NonNull AudioProductStrategy strategy,
|
||||
@Nullable AudioDevice device);
|
||||
@Nullable AudioDeviceAttributes device);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1768,7 +1768,8 @@ public class AudioManager {
|
||||
extends IStrategyPreferredDeviceDispatcher.Stub {
|
||||
|
||||
@Override
|
||||
public void dispatchPrefDeviceChanged(int strategyId, @Nullable AudioDevice device) {
|
||||
public void dispatchPrefDeviceChanged(int strategyId,
|
||||
@Nullable AudioDeviceAttributes device) {
|
||||
// make a shallow copy of listeners so callback is not executed under lock
|
||||
final ArrayList<PrefDevListenerInfo> prefDevListeners;
|
||||
synchronized (mPrefDevListenerLock) {
|
||||
@@ -4553,7 +4554,7 @@ public class AudioManager {
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
||||
public @NonNull List<AudioDevice> getDevicesForAttributes(
|
||||
public @NonNull List<AudioDeviceAttributes> getDevicesForAttributes(
|
||||
@NonNull AudioAttributes attributes) {
|
||||
Objects.requireNonNull(attributes);
|
||||
final IAudioService service = getService();
|
||||
|
||||
@@ -1096,18 +1096,18 @@ public class AudioSystem
|
||||
* @return an empty list if there was an issue with the request, a list of audio devices
|
||||
* otherwise (typically one device, except for duplicated paths).
|
||||
*/
|
||||
public static @NonNull ArrayList<AudioDevice> getDevicesForAttributes(
|
||||
public static @NonNull ArrayList<AudioDeviceAttributes> getDevicesForAttributes(
|
||||
@NonNull AudioAttributes attributes) {
|
||||
Objects.requireNonNull(attributes);
|
||||
final AudioDevice[] devices = new AudioDevice[MAX_DEVICE_ROUTING];
|
||||
final AudioDeviceAttributes[] devices = new AudioDeviceAttributes[MAX_DEVICE_ROUTING];
|
||||
final int res = getDevicesForAttributes(attributes, devices);
|
||||
final ArrayList<AudioDevice> routeDevices = new ArrayList<>();
|
||||
final ArrayList<AudioDeviceAttributes> routeDevices = new ArrayList<>();
|
||||
if (res != SUCCESS) {
|
||||
Log.e(TAG, "error " + res + " in getDevicesForAttributes for " + attributes);
|
||||
return routeDevices;
|
||||
}
|
||||
|
||||
for (AudioDevice device : devices) {
|
||||
for (AudioDeviceAttributes device : devices) {
|
||||
if (device != null) {
|
||||
routeDevices.add(device);
|
||||
}
|
||||
@@ -1117,12 +1117,12 @@ public class AudioSystem
|
||||
|
||||
/**
|
||||
* Maximum number of audio devices a track is ever routed to, determines the size of the
|
||||
* array passed to {@link #getDevicesForAttributes(AudioAttributes, AudioDevice[])}
|
||||
* array passed to {@link #getDevicesForAttributes(AudioAttributes, AudioDeviceAttributes[])}
|
||||
*/
|
||||
private static final int MAX_DEVICE_ROUTING = 4;
|
||||
|
||||
private static native int getDevicesForAttributes(@NonNull AudioAttributes aa,
|
||||
@NonNull AudioDevice[] devices);
|
||||
@NonNull AudioDeviceAttributes[] devices);
|
||||
|
||||
/** @hide returns true if master mono is enabled. */
|
||||
public static native boolean getMasterMono();
|
||||
@@ -1257,7 +1257,7 @@ public class AudioSystem
|
||||
* @return {@link #SUCCESS} if successfully set
|
||||
*/
|
||||
public static int setPreferredDeviceForStrategy(
|
||||
int strategy, @NonNull AudioDevice device) {
|
||||
int strategy, @NonNull AudioDeviceAttributes device) {
|
||||
return setPreferredDeviceForStrategy(strategy,
|
||||
AudioDeviceInfo.convertDeviceTypeToInternalDevice(device.getType()),
|
||||
device.getAddress());
|
||||
@@ -1288,7 +1288,7 @@ public class AudioSystem
|
||||
* and written to the array
|
||||
*/
|
||||
public static native int getPreferredDeviceForStrategy(int strategy,
|
||||
AudioDevice[] device);
|
||||
AudioDeviceAttributes[] device);
|
||||
|
||||
// Items shared with audio service
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ package android.media;
|
||||
|
||||
import android.bluetooth.BluetoothDevice;
|
||||
import android.media.AudioAttributes;
|
||||
import android.media.AudioDevice;
|
||||
import android.media.AudioDeviceAttributes;
|
||||
import android.media.AudioFocusInfo;
|
||||
import android.media.AudioPlaybackConfiguration;
|
||||
import android.media.AudioRecordingConfiguration;
|
||||
@@ -275,13 +275,13 @@ interface IAudioService {
|
||||
|
||||
boolean isCallScreeningModeSupported();
|
||||
|
||||
int setPreferredDeviceForStrategy(in int strategy, in AudioDevice device);
|
||||
int setPreferredDeviceForStrategy(in int strategy, in AudioDeviceAttributes device);
|
||||
|
||||
int removePreferredDeviceForStrategy(in int strategy);
|
||||
|
||||
AudioDevice getPreferredDeviceForStrategy(in int strategy);
|
||||
AudioDeviceAttributes getPreferredDeviceForStrategy(in int strategy);
|
||||
|
||||
List<AudioDevice> getDevicesForAttributes(in AudioAttributes attributes);
|
||||
List<AudioDeviceAttributes> getDevicesForAttributes(in AudioAttributes attributes);
|
||||
|
||||
int setAllowedCapturePolicy(in int capturePolicy);
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
package android.media;
|
||||
|
||||
import android.media.AudioDevice;
|
||||
import android.media.AudioDeviceAttributes;
|
||||
|
||||
/**
|
||||
* AIDL for AudioService to signal audio strategy-preferred device updates.
|
||||
@@ -25,6 +25,6 @@ import android.media.AudioDevice;
|
||||
*/
|
||||
oneway interface IStrategyPreferredDeviceDispatcher {
|
||||
|
||||
void dispatchPrefDeviceChanged(int strategyId, in AudioDevice device);
|
||||
void dispatchPrefDeviceChanged(int strategyId, in AudioDeviceAttributes device);
|
||||
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ import android.annotation.SystemApi;
|
||||
import android.annotation.TestApi;
|
||||
import android.app.ActivityThread;
|
||||
import android.compat.annotation.UnsupportedAppUsage;
|
||||
import android.media.AudioDevice;
|
||||
import android.media.AudioDeviceAttributes;
|
||||
import android.media.AudioDeviceInfo;
|
||||
import android.media.AudioSystem;
|
||||
import android.os.Build;
|
||||
@@ -476,12 +476,12 @@ public class AudioEffect {
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(android.Manifest.permission.MODIFY_DEFAULT_AUDIO_EFFECTS)
|
||||
public AudioEffect(@NonNull UUID uuid, @NonNull AudioDevice device) {
|
||||
public AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device) {
|
||||
this(EFFECT_TYPE_NULL, Objects.requireNonNull(uuid), 0, -2, Objects.requireNonNull(device));
|
||||
}
|
||||
|
||||
private AudioEffect(UUID type, UUID uuid, int priority,
|
||||
int audioSession, @Nullable AudioDevice device)
|
||||
int audioSession, @Nullable AudioDeviceAttributes device)
|
||||
throws IllegalArgumentException, UnsupportedOperationException,
|
||||
RuntimeException {
|
||||
int[] id = new int[1];
|
||||
|
||||
@@ -24,7 +24,7 @@ import android.bluetooth.BluetoothProfile;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.media.AudioDevice;
|
||||
import android.media.AudioDeviceAttributes;
|
||||
import android.media.AudioManager;
|
||||
import android.media.AudioRoutesInfo;
|
||||
import android.media.AudioSystem;
|
||||
@@ -403,7 +403,7 @@ import java.io.PrintWriter;
|
||||
}
|
||||
|
||||
/*package*/ int setPreferredDeviceForStrategySync(int strategy,
|
||||
@NonNull AudioDevice device) {
|
||||
@NonNull AudioDeviceAttributes device) {
|
||||
return mDeviceInventory.setPreferredDeviceForStrategySync(strategy, device);
|
||||
}
|
||||
|
||||
@@ -554,7 +554,8 @@ import java.io.PrintWriter;
|
||||
sendLMsgNoDelay(MSG_L_SCOCLIENT_DIED, SENDMSG_QUEUE, obj);
|
||||
}
|
||||
|
||||
/*package*/ void postSaveSetPreferredDeviceForStrategy(int strategy, AudioDevice device)
|
||||
/*package*/ void postSaveSetPreferredDeviceForStrategy(int strategy,
|
||||
AudioDeviceAttributes device)
|
||||
{
|
||||
sendILMsgNoDelay(MSG_IL_SAVE_PREF_DEVICE_FOR_STRATEGY, SENDMSG_QUEUE, strategy, device);
|
||||
}
|
||||
@@ -915,7 +916,7 @@ import java.io.PrintWriter;
|
||||
} break;
|
||||
case MSG_IL_SAVE_PREF_DEVICE_FOR_STRATEGY: {
|
||||
final int strategy = msg.arg1;
|
||||
final AudioDevice device = (AudioDevice) msg.obj;
|
||||
final AudioDeviceAttributes device = (AudioDeviceAttributes) msg.obj;
|
||||
mDeviceInventory.onSaveSetPreferredDevice(strategy, device);
|
||||
} break;
|
||||
case MSG_I_SAVE_REMOVE_PREF_DEVICE_FOR_STRATEGY: {
|
||||
|
||||
@@ -24,7 +24,7 @@ import android.bluetooth.BluetoothDevice;
|
||||
import android.bluetooth.BluetoothHearingAid;
|
||||
import android.bluetooth.BluetoothProfile;
|
||||
import android.content.Intent;
|
||||
import android.media.AudioDevice;
|
||||
import android.media.AudioDeviceAttributes;
|
||||
import android.media.AudioDevicePort;
|
||||
import android.media.AudioFormat;
|
||||
import android.media.AudioManager;
|
||||
@@ -77,7 +77,7 @@ public class AudioDeviceInventory {
|
||||
private final ArrayMap<Integer, String> mApmConnectedDevices = new ArrayMap<>();
|
||||
|
||||
// List of preferred devices for strategies
|
||||
private final ArrayMap<Integer, AudioDevice> mPreferredDevices = new ArrayMap<>();
|
||||
private final ArrayMap<Integer, AudioDeviceAttributes> mPreferredDevices = new ArrayMap<>();
|
||||
|
||||
// the wrapper for AudioSystem static methods, allows us to spy AudioSystem
|
||||
private final @NonNull AudioSystemAdapter mAudioSystem;
|
||||
@@ -474,7 +474,7 @@ public class AudioDeviceInventory {
|
||||
}
|
||||
}
|
||||
|
||||
/*package*/ void onSaveSetPreferredDevice(int strategy, @NonNull AudioDevice device) {
|
||||
/*package*/ void onSaveSetPreferredDevice(int strategy, @NonNull AudioDeviceAttributes device) {
|
||||
mPreferredDevices.put(strategy, device);
|
||||
dispatchPreferredDevice(strategy, device);
|
||||
}
|
||||
@@ -488,7 +488,7 @@ public class AudioDeviceInventory {
|
||||
//
|
||||
|
||||
/*package*/ int setPreferredDeviceForStrategySync(int strategy,
|
||||
@NonNull AudioDevice device) {
|
||||
@NonNull AudioDeviceAttributes device) {
|
||||
final long identity = Binder.clearCallingIdentity();
|
||||
final int status = mAudioSystem.setPreferredDeviceForStrategy(strategy, device);
|
||||
Binder.restoreCallingIdentity(identity);
|
||||
@@ -1112,7 +1112,7 @@ public class AudioDeviceInventory {
|
||||
}
|
||||
}
|
||||
|
||||
private void dispatchPreferredDevice(int strategy, @Nullable AudioDevice device) {
|
||||
private void dispatchPreferredDevice(int strategy, @Nullable AudioDeviceAttributes device) {
|
||||
final int nbDispatchers = mPrefDevDispatchers.beginBroadcast();
|
||||
for (int i = 0; i < nbDispatchers; i++) {
|
||||
try {
|
||||
|
||||
@@ -65,7 +65,7 @@ import android.hardware.usb.UsbManager;
|
||||
import android.hidl.manager.V1_0.IServiceManager;
|
||||
import android.media.AudioAttributes;
|
||||
import android.media.AudioAttributes.AttributeSystemUsage;
|
||||
import android.media.AudioDevice;
|
||||
import android.media.AudioDeviceAttributes;
|
||||
import android.media.AudioDeviceInfo;
|
||||
import android.media.AudioFocusInfo;
|
||||
import android.media.AudioFocusRequest;
|
||||
@@ -1734,7 +1734,7 @@ public class AudioService extends IAudioService.Stub
|
||||
// IPC methods
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
/** @see AudioManager#setPreferredDeviceForStrategy(AudioProductStrategy, AudioDeviceInfo) */
|
||||
public int setPreferredDeviceForStrategy(int strategy, AudioDevice device) {
|
||||
public int setPreferredDeviceForStrategy(int strategy, AudioDeviceAttributes device) {
|
||||
if (device == null) {
|
||||
return AudioSystem.ERROR;
|
||||
}
|
||||
@@ -1743,7 +1743,7 @@ public class AudioService extends IAudioService.Stub
|
||||
"setPreferredDeviceForStrategy u/pid:%d/%d strat:%d dev:%s",
|
||||
Binder.getCallingUid(), Binder.getCallingPid(), strategy, device.toString());
|
||||
sDeviceLogger.log(new AudioEventLogger.StringEvent(logString).printLog(TAG));
|
||||
if (device.getRole() == AudioDevice.ROLE_INPUT) {
|
||||
if (device.getRole() == AudioDeviceAttributes.ROLE_INPUT) {
|
||||
Log.e(TAG, "Unsupported input routing in " + logString);
|
||||
return AudioSystem.ERROR;
|
||||
}
|
||||
@@ -1771,9 +1771,9 @@ public class AudioService extends IAudioService.Stub
|
||||
}
|
||||
|
||||
/** @see AudioManager#getPreferredDeviceForStrategy(AudioProductStrategy) */
|
||||
public AudioDevice getPreferredDeviceForStrategy(int strategy) {
|
||||
public AudioDeviceAttributes getPreferredDeviceForStrategy(int strategy) {
|
||||
enforceModifyAudioRoutingPermission();
|
||||
AudioDevice[] devices = new AudioDevice[1];
|
||||
AudioDeviceAttributes[] devices = new AudioDeviceAttributes[1];
|
||||
final long identity = Binder.clearCallingIdentity();
|
||||
final int status = AudioSystem.getPreferredDeviceForStrategy(strategy, devices);
|
||||
Binder.restoreCallingIdentity(identity);
|
||||
@@ -1807,7 +1807,7 @@ public class AudioService extends IAudioService.Stub
|
||||
}
|
||||
|
||||
/** @see AudioManager#getDevicesForAttributes(AudioAttributes) */
|
||||
public @NonNull ArrayList<AudioDevice> getDevicesForAttributes(
|
||||
public @NonNull ArrayList<AudioDeviceAttributes> getDevicesForAttributes(
|
||||
@NonNull AudioAttributes attributes) {
|
||||
Objects.requireNonNull(attributes);
|
||||
enforceModifyAudioRoutingPermission();
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
package com.android.server.audio;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.media.AudioDevice;
|
||||
import android.media.AudioDeviceAttributes;
|
||||
import android.media.AudioSystem;
|
||||
import android.util.Log;
|
||||
|
||||
@@ -86,12 +86,12 @@ public class AudioSystemAdapter {
|
||||
}
|
||||
|
||||
/**
|
||||
* Same as {@link AudioSystem#setPreferredDeviceForStrategy(int, AudioDevice)}
|
||||
* Same as {@link AudioSystem#setPreferredDeviceForStrategy(int, AudioDeviceAttributes)}
|
||||
* @param strategy
|
||||
* @param device
|
||||
* @return
|
||||
*/
|
||||
public int setPreferredDeviceForStrategy(int strategy, @NonNull AudioDevice device) {
|
||||
public int setPreferredDeviceForStrategy(int strategy, @NonNull AudioDeviceAttributes device) {
|
||||
return AudioSystem.setPreferredDeviceForStrategy(strategy, device);
|
||||
}
|
||||
|
||||
@@ -138,7 +138,8 @@ public class AudioSystemAdapter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int setPreferredDeviceForStrategy(int strategy, @NonNull AudioDevice device) {
|
||||
public int setPreferredDeviceForStrategy(int strategy,
|
||||
@NonNull AudioDeviceAttributes device) {
|
||||
return AudioSystem.AUDIO_STATUS_OK;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user