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

Commit 00dba06e authored by Eric Laurent's avatar Eric Laurent
Browse files

AudioSystem: add owner UID to setPhoneState API.

Communicate current audio mode owner UID to native service
when changing audio mode via setPhoneState.

This will be used by call audio capture restriction rules.

Bug: 148368476
Test: manual phone call tests
Change-Id: Icf6f168bb431b5232f6127877c40789c0c537bde
parent b5ed8797
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -842,13 +842,13 @@ status_t AudioSystem::handleDeviceConfigChange(audio_devices_t device,
    return aps->handleDeviceConfigChange(device, address, name, encodedFormat);
}

status_t AudioSystem::setPhoneState(audio_mode_t state)
status_t AudioSystem::setPhoneState(audio_mode_t state, uid_t uid)
{
    if (uint32_t(state) >= AUDIO_MODE_CNT) return BAD_VALUE;
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    if (aps == 0) return PERMISSION_DENIED;

    return aps->setPhoneState(state);
    return aps->setPhoneState(state, uid);
}

status_t AudioSystem::setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config)
+4 −2
Original line number Diff line number Diff line
@@ -170,11 +170,12 @@ public:
        return static_cast <status_t> (reply.readInt32());
    }

    virtual status_t setPhoneState(audio_mode_t state)
    virtual status_t setPhoneState(audio_mode_t state, uid_t uid)
    {
        Parcel data, reply;
        data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
        data.writeInt32(state);
        data.writeInt32(uid);
        remote()->transact(SET_PHONE_STATE, data, &reply);
        return static_cast <status_t> (reply.readInt32());
    }
@@ -1596,7 +1597,8 @@ status_t BnAudioPolicyService::onTransact(
        case SET_PHONE_STATE: {
            CHECK_INTERFACE(IAudioPolicyService, data, reply);
            reply->writeInt32(static_cast <uint32_t>(setPhoneState(
                    (audio_mode_t) data.readInt32())));
                    (audio_mode_t) data.readInt32(),
                    (uid_t) data.readInt32())));
            return NO_ERROR;
        } break;

+1 −1
Original line number Diff line number Diff line
@@ -230,7 +230,7 @@ public:
                                             const char *device_address,
                                             const char *device_name,
                                             audio_format_t encodedFormat);
    static status_t setPhoneState(audio_mode_t state);
    static status_t setPhoneState(audio_mode_t state, uid_t uid);
    static status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config);
    static audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage);

+1 −1
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ public:
                                              const char *device_address,
                                              const char *device_name,
                                              audio_format_t encodedFormat) = 0;
    virtual status_t setPhoneState(audio_mode_t state) = 0;
    virtual status_t setPhoneState(audio_mode_t state, uid_t uid) = 0;
    virtual status_t setForceUse(audio_policy_force_use_t usage,
                                    audio_policy_forced_cfg_t config) = 0;
    virtual audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage) = 0;
+2 −1
Original line number Diff line number Diff line
@@ -121,7 +121,7 @@ status_t AudioPolicyService::handleDeviceConfigChange(audio_devices_t device,
                                                         device_name, encodedFormat);
}

status_t AudioPolicyService::setPhoneState(audio_mode_t state)
status_t AudioPolicyService::setPhoneState(audio_mode_t state, uid_t uid)
{
    if (mAudioPolicyManager == NULL) {
        return NO_INIT;
@@ -145,6 +145,7 @@ status_t AudioPolicyService::setPhoneState(audio_mode_t state)
    AutoCallerClear acc;
    mAudioPolicyManager->setPhoneState(state);
    mPhoneState = state;
    mPhoneStateOwnerUid = uid;
    return NO_ERROR;
}

Loading