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

Commit bdefaf0a authored by Marvin Ramin's avatar Marvin Ramin
Browse files

Add support to get registered policy mixes

This new (Test)Api exposes all AudioMixes registered with AudioPolicyManager.
The TestApi is very useful in verifying AudioMix/AudioPolicy behavior in
the Java and Native layer to debug and assert the correct behavior.

Bug: 309080867
Test: atest AudioHostTest

Change-Id: Icdc2a482228ab06ac7386915ddbeb0cfcc24889d
parent f4a6c87c
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -122,6 +122,12 @@ java_aconfig_library {
    defaults: ["framework-minus-apex-aconfig-java-defaults"],
}

cc_aconfig_library {
    name: "android.media.audiopolicy-aconfig-cc",
    aconfig_declarations: "android.media.audiopolicy-aconfig",
    defaults: ["audio-aconfig-cc-defaults"],
}

filegroup {
    name: "audio-framework-aconfig",
    srcs: [
+8 −0
Original line number Diff line number Diff line
@@ -5,6 +5,14 @@

package: "android.media.audiopolicy"

flag {
    name: "audio_mix_test_api"
    namespace: "media_audio"
    description: "Enable new Test APIs that provide access to registered AudioMixes on system server and native side."
    bug: "309080867"
    is_fixed_read_only: true
}

flag {
    name: "audio_policy_update_mixing_rules_api"
    namespace: "media_audio"
+2 −0
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ cc_library {
        "libaudioclient_aidl_conversion",
        "libaudioutils",
        "libbinder",
        "libbinder_ndk",
        "libcutils",
        "liblog",
        "libutils",
@@ -121,6 +122,7 @@ cc_library {
        "latest_android_media_audio_common_types_cpp_shared",
    ],
    shared_libs: [
        "android.media.audiopolicy-aconfig-cc",
        "audioclient-types-aidl-cpp",
        "audioflinger-aidl-cpp",
        "audiopolicy-aidl-cpp",
+22 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include <android/media/IAudioPolicyService.h>
#include <android/media/AudioMixUpdate.h>
#include <android/media/BnCaptureStateListener.h>
#include <android_media_audiopolicy.h>
#include <binder/IServiceManager.h>
#include <binder/ProcessState.h>
#include <binder/IPCThreadState.h>
@@ -44,6 +45,8 @@

// ----------------------------------------------------------------------------

namespace audio_flags = android::media::audiopolicy;

namespace android {
using aidl_utils::statusTFromBinderStatus;
using binder::Status;
@@ -1843,6 +1846,25 @@ status_t AudioSystem::registerPolicyMixes(const Vector<AudioMix>& mixes, bool re
    return statusTFromBinderStatus(aps->registerPolicyMixes(mixesAidl, registration));
}

status_t AudioSystem::getRegisteredPolicyMixes(std::vector<AudioMix>& mixes) {
    if (!audio_flags::audio_mix_test_api()) {
        return INVALID_OPERATION;
    }

    const sp<IAudioPolicyService> aps = AudioSystem::get_audio_policy_service();
    if (aps == nullptr) return PERMISSION_DENIED;

    std::vector<::android::media::AudioMix> aidlMixes;
    Status status = aps->getRegisteredPolicyMixes(&aidlMixes);

    for (const auto& aidlMix : aidlMixes) {
        AudioMix mix = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioMix(aidlMix));
        mixes.push_back(mix);
    }

    return statusTFromBinderStatus(status);
}

status_t AudioSystem::updatePolicyMixes(
        const std::vector<std::pair<AudioMix, std::vector<AudioMixMatchCriterion>>>&
                mixesWithUpdates) {
+2 −0
Original line number Diff line number Diff line
@@ -263,6 +263,8 @@ interface IAudioPolicyService {

    void registerPolicyMixes(in AudioMix[] mixes, boolean registration);

    List<AudioMix> getRegisteredPolicyMixes();

    void updatePolicyMixes(in AudioMixUpdate[] updates);

    void setUidDeviceAffinities(int /* uid_t */ uid, in AudioDevice[] devices);
Loading