Loading api/system-current.txt +3 −0 Original line number Diff line number Diff line Loading @@ -3001,6 +3001,7 @@ package android.media { field public static final int AUDIOFOCUS_FLAG_LOCK = 4; // 0x4 field public static final int AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS = 2; // 0x2 field public static final int FLAG_FROM_KEY = 65536; // 0x10000 field public static final int SUCCESS = 0; // 0x0 } public static abstract class AudioManager.AudioServerStateCallback { Loading Loading @@ -3117,8 +3118,10 @@ package android.media.audiopolicy { method public int detachMixes(java.util.List<android.media.audiopolicy.AudioMix>); method public int getFocusDuckingBehavior(); method public int getStatus(); method public int removeUidDeviceAffinity(int); method public int setFocusDuckingBehavior(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void setRegistration(java.lang.String); method public int setUidDeviceAffinity(int, java.util.List<android.media.AudioDeviceInfo>); method public java.lang.String toLogFriendlyString(); field public static final int FOCUS_POLICY_DUCKING_DEFAULT = 0; // 0x0 field public static final int FOCUS_POLICY_DUCKING_IN_APP = 0; // 0x0 Loading core/jni/android_media_AudioSystem.cpp +51 −0 Original line number Diff line number Diff line Loading @@ -1906,6 +1906,53 @@ exit: return jStatus; } static jint android_media_AudioSystem_setUidDeviceAffinities(JNIEnv *env, jobject clazz, jint uid, jintArray deviceTypes, jobjectArray deviceAddresses) { if (deviceTypes == nullptr || deviceAddresses == nullptr) { return (jint) AUDIO_JAVA_BAD_VALUE; } jsize nb = env->GetArrayLength(deviceTypes); if (nb == 0 || nb != env->GetArrayLength(deviceAddresses)) { return (jint) AUDIO_JAVA_BAD_VALUE; } // retrieve all device types std::vector<audio_devices_t> deviceTypesVector; jint* typesPtr = nullptr; typesPtr = env->GetIntArrayElements(deviceTypes, 0); if (typesPtr == nullptr) { return (jint) AUDIO_JAVA_BAD_VALUE; } for (jint i = 0; i < nb; i++) { deviceTypesVector.push_back((audio_devices_t) typesPtr[i]); } env->ReleaseIntArrayElements(deviceTypes, typesPtr, 0); // check each address is a string and add device type/address to list for device affinity Vector<AudioDeviceTypeAddr> deviceVector; jclass stringClass = FindClassOrDie(env, "java/lang/String"); for (jint i = 0; i < nb; i++) { jobject addrJobj = env->GetObjectArrayElement(deviceAddresses, i); if (!env->IsInstanceOf(addrJobj, stringClass)) { return (jint) AUDIO_JAVA_BAD_VALUE; } String8 address = String8(env->GetStringUTFChars((jstring) addrJobj, NULL)); AudioDeviceTypeAddr dev = AudioDeviceTypeAddr(typesPtr[i], address); deviceVector.add(dev); } status_t status = AudioSystem::setUidDeviceAffinities((uid_t) uid, deviceVector); return (jint) nativeToJavaStatus(status); } static jint android_media_AudioSystem_removeUidDeviceAffinities(JNIEnv *env, jobject clazz, jint uid) { //### status_t status = NO_ERROR;//AudioSystem::removeUidDeviceAffinities(); return (jint) nativeToJavaStatus(status); } static jint android_media_AudioSystem_systemReady(JNIEnv *env, jobject thiz) { Loading Loading @@ -2133,6 +2180,10 @@ static const JNINativeMethod gMethods[] = { (void *)android_media_AudioSystem_getAudioHwSyncForSession}, {"registerPolicyMixes", "(Ljava/util/ArrayList;Z)I", (void *)android_media_AudioSystem_registerPolicyMixes}, {"setUidDeviceAffinities", "(I[I[Ljava/lang/String;)I", (void *)android_media_AudioSystem_setUidDeviceAffinities}, {"removeUidDeviceAffinities", "(I)I", (void *)android_media_AudioSystem_removeUidDeviceAffinities}, {"native_register_dynamic_policy_callback", "()V", (void *)android_media_AudioSystem_registerDynPolicyCallback}, {"native_register_recording_callback", "()V", Loading media/java/android/media/AudioManager.java +2 −3 Original line number Diff line number Diff line Loading @@ -4280,9 +4280,8 @@ public class AudioManager { * Return codes for listAudioPorts(), createAudioPatch() ... */ /** @hide * CANDIDATE FOR PUBLIC API */ /** @hide */ @SystemApi public static final int SUCCESS = AudioSystem.SUCCESS; /** * A default error code. Loading media/java/android/media/AudioSystem.java +7 −0 Original line number Diff line number Diff line Loading @@ -916,6 +916,13 @@ public class AudioSystem public static native int registerPolicyMixes(ArrayList<AudioMix> mixes, boolean register); /** see AudioPolicy.setUidDeviceAffinities() */ public static native int setUidDeviceAffinities(int uid, @NonNull int[] types, @NonNull String[] addresses); /** see AudioPolicy.removeUidDeviceAffinities() */ public static native int removeUidDeviceAffinities(int uid); public static native int systemReady(); public static native float getStreamVolumeDB(int stream, int index, int device); Loading media/java/android/media/IAudioService.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -223,6 +223,11 @@ interface IAudioService { boolean isAudioServerRunning(); int setUidDeviceAffinity(in IAudioPolicyCallback pcb, in int uid, in int[] deviceTypes, in String[] deviceAddresses); int removeUidDeviceAffinity(in IAudioPolicyCallback pcb, in int uid); // WARNING: read warning at top of file, new methods that need to be used by native // code via IAudioManager.h need to be added to the top section. } Loading
api/system-current.txt +3 −0 Original line number Diff line number Diff line Loading @@ -3001,6 +3001,7 @@ package android.media { field public static final int AUDIOFOCUS_FLAG_LOCK = 4; // 0x4 field public static final int AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS = 2; // 0x2 field public static final int FLAG_FROM_KEY = 65536; // 0x10000 field public static final int SUCCESS = 0; // 0x0 } public static abstract class AudioManager.AudioServerStateCallback { Loading Loading @@ -3117,8 +3118,10 @@ package android.media.audiopolicy { method public int detachMixes(java.util.List<android.media.audiopolicy.AudioMix>); method public int getFocusDuckingBehavior(); method public int getStatus(); method public int removeUidDeviceAffinity(int); method public int setFocusDuckingBehavior(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void setRegistration(java.lang.String); method public int setUidDeviceAffinity(int, java.util.List<android.media.AudioDeviceInfo>); method public java.lang.String toLogFriendlyString(); field public static final int FOCUS_POLICY_DUCKING_DEFAULT = 0; // 0x0 field public static final int FOCUS_POLICY_DUCKING_IN_APP = 0; // 0x0 Loading
core/jni/android_media_AudioSystem.cpp +51 −0 Original line number Diff line number Diff line Loading @@ -1906,6 +1906,53 @@ exit: return jStatus; } static jint android_media_AudioSystem_setUidDeviceAffinities(JNIEnv *env, jobject clazz, jint uid, jintArray deviceTypes, jobjectArray deviceAddresses) { if (deviceTypes == nullptr || deviceAddresses == nullptr) { return (jint) AUDIO_JAVA_BAD_VALUE; } jsize nb = env->GetArrayLength(deviceTypes); if (nb == 0 || nb != env->GetArrayLength(deviceAddresses)) { return (jint) AUDIO_JAVA_BAD_VALUE; } // retrieve all device types std::vector<audio_devices_t> deviceTypesVector; jint* typesPtr = nullptr; typesPtr = env->GetIntArrayElements(deviceTypes, 0); if (typesPtr == nullptr) { return (jint) AUDIO_JAVA_BAD_VALUE; } for (jint i = 0; i < nb; i++) { deviceTypesVector.push_back((audio_devices_t) typesPtr[i]); } env->ReleaseIntArrayElements(deviceTypes, typesPtr, 0); // check each address is a string and add device type/address to list for device affinity Vector<AudioDeviceTypeAddr> deviceVector; jclass stringClass = FindClassOrDie(env, "java/lang/String"); for (jint i = 0; i < nb; i++) { jobject addrJobj = env->GetObjectArrayElement(deviceAddresses, i); if (!env->IsInstanceOf(addrJobj, stringClass)) { return (jint) AUDIO_JAVA_BAD_VALUE; } String8 address = String8(env->GetStringUTFChars((jstring) addrJobj, NULL)); AudioDeviceTypeAddr dev = AudioDeviceTypeAddr(typesPtr[i], address); deviceVector.add(dev); } status_t status = AudioSystem::setUidDeviceAffinities((uid_t) uid, deviceVector); return (jint) nativeToJavaStatus(status); } static jint android_media_AudioSystem_removeUidDeviceAffinities(JNIEnv *env, jobject clazz, jint uid) { //### status_t status = NO_ERROR;//AudioSystem::removeUidDeviceAffinities(); return (jint) nativeToJavaStatus(status); } static jint android_media_AudioSystem_systemReady(JNIEnv *env, jobject thiz) { Loading Loading @@ -2133,6 +2180,10 @@ static const JNINativeMethod gMethods[] = { (void *)android_media_AudioSystem_getAudioHwSyncForSession}, {"registerPolicyMixes", "(Ljava/util/ArrayList;Z)I", (void *)android_media_AudioSystem_registerPolicyMixes}, {"setUidDeviceAffinities", "(I[I[Ljava/lang/String;)I", (void *)android_media_AudioSystem_setUidDeviceAffinities}, {"removeUidDeviceAffinities", "(I)I", (void *)android_media_AudioSystem_removeUidDeviceAffinities}, {"native_register_dynamic_policy_callback", "()V", (void *)android_media_AudioSystem_registerDynPolicyCallback}, {"native_register_recording_callback", "()V", Loading
media/java/android/media/AudioManager.java +2 −3 Original line number Diff line number Diff line Loading @@ -4280,9 +4280,8 @@ public class AudioManager { * Return codes for listAudioPorts(), createAudioPatch() ... */ /** @hide * CANDIDATE FOR PUBLIC API */ /** @hide */ @SystemApi public static final int SUCCESS = AudioSystem.SUCCESS; /** * A default error code. Loading
media/java/android/media/AudioSystem.java +7 −0 Original line number Diff line number Diff line Loading @@ -916,6 +916,13 @@ public class AudioSystem public static native int registerPolicyMixes(ArrayList<AudioMix> mixes, boolean register); /** see AudioPolicy.setUidDeviceAffinities() */ public static native int setUidDeviceAffinities(int uid, @NonNull int[] types, @NonNull String[] addresses); /** see AudioPolicy.removeUidDeviceAffinities() */ public static native int removeUidDeviceAffinities(int uid); public static native int systemReady(); public static native float getStreamVolumeDB(int stream, int index, int device); Loading
media/java/android/media/IAudioService.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -223,6 +223,11 @@ interface IAudioService { boolean isAudioServerRunning(); int setUidDeviceAffinity(in IAudioPolicyCallback pcb, in int uid, in int[] deviceTypes, in String[] deviceAddresses); int removeUidDeviceAffinity(in IAudioPolicyCallback pcb, in int uid); // WARNING: read warning at top of file, new methods that need to be used by native // code via IAudioManager.h need to be added to the top section. }