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

Commit deee1290 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi Committed by android-build-merger
Browse files

Merge "APM: support product strategy routing"

am: 2c76260f

Change-Id: I9e96bef513f9b9c5467cdc8ca24f0e8635b819fc
parents 48a56397 2c76260f
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -1525,6 +1525,35 @@ status_t AudioSystem::setRttEnabled(bool enabled)
    return aps->setRttEnabled(enabled);
}

status_t AudioSystem::setPreferredDeviceForStrategy(product_strategy_t strategy,
                                                    const AudioDeviceTypeAddr &device)
{
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    if (aps == 0) {
        return PERMISSION_DENIED;
    }
    return aps->setPreferredDeviceForStrategy(strategy, device);
}

status_t AudioSystem::removePreferredDeviceForStrategy(product_strategy_t strategy)
{
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    if (aps == 0) {
        return PERMISSION_DENIED;
    }
    return aps->removePreferredDeviceForStrategy(strategy);
}

status_t AudioSystem::getPreferredDeviceForStrategy(product_strategy_t strategy,
        AudioDeviceTypeAddr &device)
{
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    if (aps == 0) {
        return PERMISSION_DENIED;
    }
    return aps->getPreferredDeviceForStrategy(strategy, device);
}

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

int AudioSystem::AudioPolicyServiceClient::addAudioPortCallback(
+91 −2
Original line number Diff line number Diff line
@@ -104,7 +104,10 @@ enum {
    GET_VOLUME_GROUP_FOR_ATTRIBUTES,
    SET_ALLOWED_CAPTURE_POLICY,
    MOVE_EFFECTS_TO_IO,
    SET_RTT_ENABLED
    SET_RTT_ENABLED,
    SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY,
    REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY,
    GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY,
};

#define MAX_ITEMS_PER_LIST 1024
@@ -1284,6 +1287,55 @@ public:
        }
        return static_cast<status_t>(reply.readInt32());
    }

    virtual status_t setPreferredDeviceForStrategy(product_strategy_t strategy,
            const AudioDeviceTypeAddr &device)
    {
        Parcel data, reply;
        data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
        data.writeUint32(static_cast<uint32_t>(strategy));
        status_t status = device.writeToParcel(&data);
        if (status != NO_ERROR) {
            return BAD_VALUE;
        }
        status = remote()->transact(SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY,
                data, &reply);
        if (status != NO_ERROR) {
           return status;
        }
        return static_cast<status_t>(reply.readInt32());
    }

    virtual status_t removePreferredDeviceForStrategy(product_strategy_t strategy)
    {
        Parcel data, reply;
        data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
        data.writeUint32(static_cast<uint32_t>(strategy));
        status_t status = remote()->transact(REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY,
                data, &reply);
        if (status != NO_ERROR) {
           return status;
        }
        return static_cast<status_t>(reply.readInt32());
    }

    virtual status_t getPreferredDeviceForStrategy(product_strategy_t strategy,
            AudioDeviceTypeAddr &device)
    {
        Parcel data, reply;
        data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
        data.writeUint32(static_cast<uint32_t>(strategy));
        status_t status = remote()->transact(GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY,
                data, &reply);
        if (status != NO_ERROR) {
            return status;
        }
        status = device.readFromParcel(&reply);
        if (status != NO_ERROR) {
            return status;
        }
        return static_cast<status_t>(reply.readInt32());
    }
};

IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService");
@@ -1346,7 +1398,10 @@ status_t BnAudioPolicyService::onTransact(
        case GET_OFFLOAD_FORMATS_A2DP:
        case LIST_AUDIO_VOLUME_GROUPS:
        case GET_VOLUME_GROUP_FOR_ATTRIBUTES:
        case SET_RTT_ENABLED: {
        case SET_RTT_ENABLED:
        case SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY:
        case REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY:
        case GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: {
            if (!isServiceUid(IPCThreadState::self()->getCallingUid())) {
                ALOGW("%s: transaction %d received from PID %d unauthorized UID %d",
                      __func__, code, IPCThreadState::self()->getCallingPid(),
@@ -2369,6 +2424,40 @@ status_t BnAudioPolicyService::onTransact(
            return NO_ERROR;
        }

        case SET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: {
            CHECK_INTERFACE(IAudioPolicyService, data, reply);
            product_strategy_t strategy = (product_strategy_t) data.readUint32();
            AudioDeviceTypeAddr device;
            status_t status = device.readFromParcel((Parcel*)&data);
            if (status != NO_ERROR) {
                return status;
            }
            status = setPreferredDeviceForStrategy(strategy, device);
            reply->writeInt32(status);
            return NO_ERROR;
        }

        case REMOVE_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: {
            CHECK_INTERFACE(IAudioPolicyService, data, reply);
            product_strategy_t strategy = (product_strategy_t) data.readUint32();
            status_t status = removePreferredDeviceForStrategy(strategy);
            reply->writeInt32(status);
            return NO_ERROR;
        }

        case GET_PREFERRED_DEVICE_FOR_PRODUCT_STRATEGY: {
            CHECK_INTERFACE(IAudioPolicyService, data, reply);
            product_strategy_t strategy = (product_strategy_t) data.readUint32();
            AudioDeviceTypeAddr device;
            status_t status = getPreferredDeviceForStrategy(strategy, device);
            status_t marshall_status = device.writeToParcel(reply);
            if (marshall_status != NO_ERROR) {
                return marshall_status;
            }
            reply->writeInt32(status);
            return NO_ERROR;
        }

        default:
            return BBinder::onTransact(code, data, reply, flags);
    }
+11 −0
Original line number Diff line number Diff line
@@ -403,6 +403,17 @@ public:
     */
    static status_t setAudioHalPids(const std::vector<pid_t>& pids);

    static status_t setPreferredDeviceForStrategy(product_strategy_t strategy,
            const AudioDeviceTypeAddr &device);

    static status_t removePreferredDeviceForStrategy(product_strategy_t strategy);

    static status_t getPreferredDeviceForStrategy(product_strategy_t strategy,
            AudioDeviceTypeAddr &device);

    static status_t getDeviceForStrategy(product_strategy_t strategy,
            AudioDeviceTypeAddr &device);

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

    class AudioVolumeGroupCallback : public RefBase
+8 −0
Original line number Diff line number Diff line
@@ -223,6 +223,14 @@ public:
                                                       volume_group_t &volumeGroup) = 0;

    virtual status_t setRttEnabled(bool enabled) = 0;

    virtual status_t setPreferredDeviceForStrategy(product_strategy_t strategy,
                                                   const AudioDeviceTypeAddr &device) = 0;

    virtual status_t removePreferredDeviceForStrategy(product_strategy_t strategy) = 0;

    virtual status_t getPreferredDeviceForStrategy(product_strategy_t strategy,
                                                   AudioDeviceTypeAddr &device) = 0;
};


+2 −0
Original line number Diff line number Diff line
@@ -37,6 +37,8 @@ struct AudioDeviceTypeAddr : public Parcelable {

    bool equals(const AudioDeviceTypeAddr& other) const;

    AudioDeviceTypeAddr& operator= (const AudioDeviceTypeAddr&) = default;

    void reset();

    status_t readFromParcel(const Parcel *parcel) override;
Loading