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

Commit a9683db7 authored by Paul Wang's avatar Paul Wang Committed by Android (Google) Code Review
Browse files

Merge changes from topic "exclude_device"

* changes:
  Expose API to set audio device as non-default playback
  [Audio Policy Engine] Allow adding new disabled devices to existing list
parents c9b4f249 5d7cdb56
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -2223,8 +2223,25 @@ status_t AudioSystem::setDevicesRoleForStrategy(product_strategy_t strategy,
            aps->setDevicesRoleForStrategy(strategyAidl, roleAidl, devicesAidl));
}

status_t AudioSystem::removeDevicesRoleForStrategy(product_strategy_t strategy,
                                                   device_role_t role,
                                                   const AudioDeviceTypeAddrVector& devices) {
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    if (aps == 0) {
        return PERMISSION_DENIED;
    }

    int32_t strategyAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_product_strategy_t_int32_t(strategy));
    media::DeviceRole roleAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_device_role_t_DeviceRole(role));
    std::vector<AudioDevice> devicesAidl = VALUE_OR_RETURN_STATUS(
            convertContainer<std::vector<AudioDevice>>(devices,
                                                       legacy2aidl_AudioDeviceTypeAddress));
    return statusTFromBinderStatus(
            aps->removeDevicesRoleForStrategy(strategyAidl, roleAidl, devicesAidl));
}

status_t
AudioSystem::removeDevicesRoleForStrategy(product_strategy_t strategy, device_role_t role) {
AudioSystem::clearDevicesRoleForStrategy(product_strategy_t strategy, device_role_t role) {
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    if (aps == 0) {
        return PERMISSION_DENIED;
@@ -2232,7 +2249,7 @@ AudioSystem::removeDevicesRoleForStrategy(product_strategy_t strategy, device_ro
    int32_t strategyAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_product_strategy_t_int32_t(strategy));
    media::DeviceRole roleAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_device_role_t_DeviceRole(role));
    return statusTFromBinderStatus(
            aps->removeDevicesRoleForStrategy(strategyAidl, roleAidl));
            aps->clearDevicesRoleForStrategy(strategyAidl, roleAidl));
}

status_t AudioSystem::getDevicesForRoleAndStrategy(product_strategy_t strategy,
+4 −1
Original line number Diff line number Diff line
@@ -330,7 +330,10 @@ interface IAudioPolicyService {
                                   in AudioDevice[] devices);

    void removeDevicesRoleForStrategy(int /* product_strategy_t */ strategy,
                                       DeviceRole role);
                                      DeviceRole role,
                                      in AudioDevice[] devices);

    void clearDevicesRoleForStrategy(int /* product_strategy_t */ strategy, DeviceRole role);

    AudioDevice[] getDevicesForRoleAndStrategy(int /* product_strategy_t */ strategy,
                                               DeviceRole role);
+5 −1
Original line number Diff line number Diff line
@@ -523,7 +523,11 @@ public:
    static status_t setDevicesRoleForStrategy(product_strategy_t strategy,
            device_role_t role, const AudioDeviceTypeAddrVector &devices);

    static status_t removeDevicesRoleForStrategy(product_strategy_t strategy, device_role_t role);
    static status_t removeDevicesRoleForStrategy(product_strategy_t strategy,
            device_role_t role, const AudioDeviceTypeAddrVector &devices);

    static status_t clearDevicesRoleForStrategy(product_strategy_t strategy,
            device_role_t role);

    static status_t getDevicesForRoleAndStrategy(product_strategy_t strategy,
            device_role_t role, AudioDeviceTypeAddrVector &devices);
+2 −2
Original line number Diff line number Diff line
@@ -405,7 +405,7 @@ TEST_F(AudioSystemTest, DevicesForRoleAndStrategy) {
        EXPECT_EQ(OK, AudioSystem::getDevicesForRoleAndStrategy(mediaStrategy.getId(),
                                                                DEVICE_ROLE_PREFERRED, devices));
        EXPECT_EQ(devices, outputDevices);
        EXPECT_EQ(OK, AudioSystem::removeDevicesRoleForStrategy(mediaStrategy.getId(),
        EXPECT_EQ(OK, AudioSystem::clearDevicesRoleForStrategy(mediaStrategy.getId(),
                                                               DEVICE_ROLE_PREFERRED));
        EXPECT_EQ(NAME_NOT_FOUND, AudioSystem::getDevicesForRoleAndStrategy(
                                          mediaStrategy.getId(), DEVICE_ROLE_PREFERRED, devices));
+14 −0
Original line number Diff line number Diff line
@@ -150,6 +150,20 @@ AudioDeviceTypeAddrVector excludeDeviceTypeAddrsFrom(
    return remainedDevices;
}

AudioDeviceTypeAddrVector joinDeviceTypeAddrs(
        const AudioDeviceTypeAddrVector& devices,
        const AudioDeviceTypeAddrVector& devicesToJoin) {
    std::set<AudioDeviceTypeAddr> devicesSet(devices.begin(), devices.end());
    std::set<AudioDeviceTypeAddr> devicesToJoinSet(devicesToJoin.begin(), devicesToJoin.end());
    AudioDeviceTypeAddrVector joinedDevices;

    std::set_union(devicesSet.begin(), devicesSet.end(),
                   devicesToJoinSet.begin(), devicesToJoinSet.end(),
                   std::back_inserter(joinedDevices));

    return joinedDevices;
}

std::string dumpAudioDeviceTypeAddrVector(const AudioDeviceTypeAddrVector& deviceTypeAddrs,
                                          bool includeSensitiveInfo) {
    std::stringstream stream;
Loading