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

Commit 09a95924 authored by jiabin's avatar jiabin
Browse files

Add package name when creating AudioTrack.

The package name can be used when starting an external vibration, which
is used by vibrator service to check if the application has the
permission to start vibration.

Bug: 165910728
Bug: 162343845
Test: atest AudioTrackTest MediaPlayerTest
Test: start audio-coupled-haptic playback
Change-Id: I6d12c4e141c037ee94ee79cbb9bf537421ec9507
parent 4a603cd0
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -210,7 +210,11 @@ status_t AudioTrack::getMetrics(mediametrics::Item * &item)
    return NO_ERROR;
}

AudioTrack::AudioTrack()
AudioTrack::AudioTrack() : AudioTrack("" /*opPackageName*/)
{
}

AudioTrack::AudioTrack(const std::string& opPackageName)
    : mStatus(NO_INIT),
      mState(STATE_STOPPED),
      mPreviousPriority(ANDROID_PRIORITY_NORMAL),
@@ -218,6 +222,7 @@ AudioTrack::AudioTrack()
      mPausedPosition(0),
      mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE),
      mRoutedDeviceId(AUDIO_PORT_HANDLE_NONE),
      mOpPackageName(opPackageName),
      mAudioTrackCallback(new AudioTrackCallback())
{
    mAttributes.content_type = AUDIO_CONTENT_TYPE_UNKNOWN;
@@ -244,12 +249,14 @@ AudioTrack::AudioTrack(
        const audio_attributes_t* pAttributes,
        bool doNotReconnect,
        float maxRequiredSpeed,
        audio_port_handle_t selectedDeviceId)
        audio_port_handle_t selectedDeviceId,
        const std::string& opPackageName)
    : mStatus(NO_INIT),
      mState(STATE_STOPPED),
      mPreviousPriority(ANDROID_PRIORITY_NORMAL),
      mPreviousSchedulingGroup(SP_DEFAULT),
      mPausedPosition(0),
      mOpPackageName(opPackageName),
      mAudioTrackCallback(new AudioTrackCallback())
{
    mAttributes = AUDIO_ATTRIBUTES_INITIALIZER;
@@ -277,13 +284,15 @@ AudioTrack::AudioTrack(
        pid_t pid,
        const audio_attributes_t* pAttributes,
        bool doNotReconnect,
        float maxRequiredSpeed)
        float maxRequiredSpeed,
        const std::string& opPackageName)
    : mStatus(NO_INIT),
      mState(STATE_STOPPED),
      mPreviousPriority(ANDROID_PRIORITY_NORMAL),
      mPreviousSchedulingGroup(SP_DEFAULT),
      mPausedPosition(0),
      mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE),
      mOpPackageName(opPackageName),
      mAudioTrackCallback(new AudioTrackCallback())
{
    mAttributes = AUDIO_ATTRIBUTES_INITIALIZER;
@@ -1555,6 +1564,7 @@ status_t AudioTrack::createTrack_l()
    input.selectedDeviceId = mSelectedDeviceId;
    input.sessionId = mSessionId;
    input.audioTrackCallback = mAudioTrackCallback;
    input.opPackageName = mOpPackageName;

    IAudioFlinger::CreateTrackOutput output;

+10 −2
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@
#include <media/Modulo.h>
#include <utils/threads.h>

#include <string>

#include "android/media/BnAudioTrackCallback.h"
#include "android/media/IAudioTrackCallback.h"

@@ -177,6 +179,8 @@ public:
     */
                        AudioTrack();

                        AudioTrack(const std::string& opPackageName);

    /* Creates an AudioTrack object and registers it with AudioFlinger.
     * Once created, the track needs to be started before it can be used.
     * Unspecified values are set to appropriate default values.
@@ -258,7 +262,8 @@ public:
                                    const audio_attributes_t* pAttributes = NULL,
                                    bool doNotReconnect = false,
                                    float maxRequiredSpeed = 1.0f,
                                    audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE);
                                    audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE,
                                    const std::string& opPackageName = "");

    /* Creates an audio track and registers it with AudioFlinger.
     * With this constructor, the track is configured for static buffer mode.
@@ -288,7 +293,8 @@ public:
                                    pid_t pid = -1,
                                    const audio_attributes_t* pAttributes = NULL,
                                    bool doNotReconnect = false,
                                    float maxRequiredSpeed = 1.0f);
                                    float maxRequiredSpeed = 1.0f,
                                    const std::string& opPackageName = "");

    /* Terminates the AudioTrack and unregisters it from AudioFlinger.
     * Also destroys all resources associated with the AudioTrack.
@@ -1236,6 +1242,8 @@ public:

    sp<media::VolumeHandler>       mVolumeHandler;

    const std::string      mOpPackageName;

private:
    class DeathNotifier : public IBinder::DeathRecipient {
    public:
+8 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@
#include <system/audio_policy.h>
#include <utils/String8.h>
#include <media/MicrophoneInfo.h>
#include <string>
#include <vector>

#include "android/media/IAudioRecord.h"
@@ -85,6 +86,11 @@ public:
            speed = parcel->readFloat();
            audioTrackCallback = interface_cast<media::IAudioTrackCallback>(
                    parcel->readStrongBinder());
            const char* opPackageNamePtr = parcel->readCString();
            if (opPackageNamePtr == nullptr) {
                return FAILED_TRANSACTION;
            }
            opPackageName = opPackageNamePtr;

            /* input/output arguments*/
            (void)parcel->read(&flags, sizeof(audio_output_flags_t));
@@ -109,6 +115,7 @@ public:
            (void)parcel->writeInt32(notificationsPerBuffer);
            (void)parcel->writeFloat(speed);
            (void)parcel->writeStrongBinder(IInterface::asBinder(audioTrackCallback));
            (void)parcel->writeCString(opPackageName.c_str());

            /* input/output arguments*/
            (void)parcel->write(&flags, sizeof(audio_output_flags_t));
@@ -127,6 +134,7 @@ public:
        uint32_t notificationsPerBuffer;
        float speed;
        sp<media::IAudioTrackCallback> audioTrackCallback;
        std::string opPackageName;

        /* input/output */
        audio_output_flags_t flags;
+9 −2
Original line number Diff line number Diff line
@@ -62,11 +62,13 @@ public:
    }

    virtual sp<IMediaPlayer> create(
            const sp<IMediaPlayerClient>& client, audio_session_t audioSessionId) {
            const sp<IMediaPlayerClient>& client, audio_session_t audioSessionId,
            const std::string opPackageName) {
        Parcel data, reply;
        data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor());
        data.writeStrongBinder(IInterface::asBinder(client));
        data.writeInt32(audioSessionId);
        data.writeCString(opPackageName.c_str());

        remote()->transact(CREATE, data, &reply);
        return interface_cast<IMediaPlayer>(reply.readStrongBinder());
@@ -127,7 +129,12 @@ status_t BnMediaPlayerService::onTransact(
            sp<IMediaPlayerClient> client =
                interface_cast<IMediaPlayerClient>(data.readStrongBinder());
            audio_session_t audioSessionId = (audio_session_t) data.readInt32();
            sp<IMediaPlayer> player = create(client, audioSessionId);
            const char* opPackageName = data.readCString();
            if (opPackageName == nullptr) {
                return FAILED_TRANSACTION;
            }
            std::string opPackageNameStr(opPackageName);
            sp<IMediaPlayer> player = create(client, audioSessionId, opPackageNameStr);
            reply->writeStrongBinder(IInterface::asBinder(player));
            return NO_ERROR;
        } break;
+4 −1
Original line number Diff line number Diff line
@@ -28,6 +28,8 @@
#include <media/IMediaPlayerClient.h>
#include <media/IMediaMetadataRetriever.h>

#include <string>

namespace android {

class IMediaPlayer;
@@ -47,7 +49,8 @@ public:
    virtual sp<IMediaRecorder> createMediaRecorder(const String16 &opPackageName) = 0;
    virtual sp<IMediaMetadataRetriever> createMetadataRetriever() = 0;
    virtual sp<IMediaPlayer> create(const sp<IMediaPlayerClient>& client,
            audio_session_t audioSessionId = AUDIO_SESSION_ALLOCATE) = 0;
            audio_session_t audioSessionId = AUDIO_SESSION_ALLOCATE,
            const std::string opPackage = "") = 0;
    virtual sp<IMediaCodecList> getCodecList() const = 0;

    // Connects to a remote display.
Loading