Monitoring of recording: uid of recording session

Pass uid of recording session along with other existing information
  in the recording monitoring callback.
Define new structure, record_client_info, to group uid (new),
  session id (existing) and source (existing) and simplify
  method signatures and marshalling code.

Test: run cts -m CtsMediaTestCases -t android.media.cts.AudioRecordingConfigurationTest#testAudioManagerGetActiveRecordConfigurations
Bug 62579636

Change-Id: I18f66d7e55640a21f31021416a12a3e8094c3690
diff --git a/services/audiopolicy/AudioPolicyInterface.h b/services/audiopolicy/AudioPolicyInterface.h
index 84e9426..dd3317d 100644
--- a/services/audiopolicy/AudioPolicyInterface.h
+++ b/services/audiopolicy/AudioPolicyInterface.h
@@ -349,8 +349,8 @@
 
     virtual void onDynamicPolicyMixStateUpdate(String8 regId, int32_t state) = 0;
 
-    virtual void onRecordingConfigurationUpdate(int event, audio_session_t session,
-                    audio_source_t source,
+    virtual void onRecordingConfigurationUpdate(int event,
+                    const record_client_info_t *clientInfo,
                     const struct audio_config_base *clientConfig,
                     const struct audio_config_base *deviceConfig,
                     audio_patch_handle_t patchHandle) = 0;
diff --git a/services/audiopolicy/common/managerdefinitions/include/AudioSession.h b/services/audiopolicy/common/managerdefinitions/include/AudioSession.h
index 18fba25..2e653e2 100644
--- a/services/audiopolicy/common/managerdefinitions/include/AudioSession.h
+++ b/services/audiopolicy/common/managerdefinitions/include/AudioSession.h
@@ -22,6 +22,7 @@
 #include <utils/Errors.h>
 #include <utils/KeyedVector.h>
 #include <media/AudioPolicy.h>
+#include <media/IAudioPolicyServiceClient.h>
 #include "AudioSessionInfoProvider.h"
 
 namespace android {
@@ -44,13 +45,13 @@
 
     status_t dump(int fd, int spaces, int index) const;
 
-    audio_session_t session() const { return mSession; }
-    audio_source_t inputSource()const { return mInputSource; }
+    audio_session_t session() const { return mRecordClientInfo.session; }
+    audio_source_t inputSource()const { return mRecordClientInfo.source; }
     audio_format_t format() const { return mConfig.format; }
     uint32_t sampleRate() const { return mConfig.sample_rate; }
     audio_channel_mask_t channelMask() const { return mConfig.channel_mask; }
     audio_input_flags_t flags() const { return mFlags; }
-    uid_t uid() const { return mUid; }
+    uid_t uid() const { return mRecordClientInfo.uid; }
     bool matches(const sp<AudioSession> &other) const;
     bool isSoundTrigger() const { return mIsSoundTrigger; }
     uint32_t openCount() const { return mOpenCount; } ;
@@ -64,11 +65,9 @@
     virtual void onSessionInfoUpdate() const;
 
 private:
-    const audio_session_t mSession;
-    const audio_source_t mInputSource;
+    const record_client_info_t mRecordClientInfo;
     const struct audio_config_base mConfig;
     const audio_input_flags_t mFlags;
-    const uid_t mUid;
     bool  mIsSoundTrigger;
     uint32_t  mOpenCount;
     uint32_t  mActiveCount;
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioSession.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioSession.cpp
index bea9f4f..5b57d3d 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioSession.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioSession.cpp
@@ -38,9 +38,9 @@
                            bool isSoundTrigger,
                            AudioMix* policyMix,
                            AudioPolicyClientInterface *clientInterface) :
-    mSession(session), mInputSource(inputSource),
+    mRecordClientInfo({ .uid = uid, .session = session, .source = inputSource}),
     mConfig({ .format = format, .sample_rate = sampleRate, .channel_mask = channelMask}),
-    mFlags(flags), mUid(uid), mIsSoundTrigger(isSoundTrigger),
+    mFlags(flags), mIsSoundTrigger(isSoundTrigger),
     mOpenCount(1), mActiveCount(0), mPolicyMix(policyMix), mClientInterface(clientInterface),
     mInfoProvider(NULL)
 {
@@ -92,7 +92,7 @@
         const audio_patch_handle_t patchHandle = (provider != NULL) ? provider->getPatchHandle() :
                 AUDIO_PATCH_HANDLE_NONE;
         if (patchHandle != AUDIO_PATCH_HANDLE_NONE) {
-            mClientInterface->onRecordingConfigurationUpdate(event, mSession, mInputSource,
+            mClientInterface->onRecordingConfigurationUpdate(event, &mRecordClientInfo,
                     &mConfig, &deviceConfig, patchHandle);
         }
     }
@@ -102,13 +102,13 @@
 
 bool AudioSession::matches(const sp<AudioSession> &other) const
 {
-    if (other->session() == mSession &&
-        other->inputSource() == mInputSource &&
+    if (other->session() == mRecordClientInfo.session &&
+        other->inputSource() == mRecordClientInfo.source &&
         other->format() == mConfig.format &&
         other->sampleRate() == mConfig.sample_rate &&
         other->channelMask() == mConfig.channel_mask &&
         other->flags() == mFlags &&
-        other->uid() == mUid) {
+        other->uid() == mRecordClientInfo.uid) {
         return true;
     }
     return false;
@@ -130,8 +130,7 @@
                 AUDIO_PATCH_HANDLE_NONE;
         if (patchHandle != AUDIO_PATCH_HANDLE_NONE) {
             mClientInterface->onRecordingConfigurationUpdate(RECORD_CONFIG_EVENT_START,
-                    mSession, mInputSource,
-                    &mConfig, &deviceConfig, patchHandle);
+                    &mRecordClientInfo, &mConfig, &deviceConfig, patchHandle);
         }
     }
 }
@@ -144,11 +143,11 @@
 
     snprintf(buffer, SIZE, "%*sAudio session %d:\n", spaces, "", index+1);
     result.append(buffer);
-    snprintf(buffer, SIZE, "%*s- session: %2d\n", spaces, "", mSession);
+    snprintf(buffer, SIZE, "%*s- session: %2d\n", spaces, "", mRecordClientInfo.session);
     result.append(buffer);
-    snprintf(buffer, SIZE, "%*s- owner uid: %2d\n", spaces, "", mUid);
+    snprintf(buffer, SIZE, "%*s- owner uid: %2d\n", spaces, "", mRecordClientInfo.uid);
     result.append(buffer);
-    snprintf(buffer, SIZE, "%*s- input source: %d\n", spaces, "", mInputSource);
+    snprintf(buffer, SIZE, "%*s- input source: %d\n", spaces, "", mRecordClientInfo.source);
     result.append(buffer);
     snprintf(buffer, SIZE, "%*s- format: %08x\n", spaces, "", mConfig.format);
     result.append(buffer);
diff --git a/services/audiopolicy/service/AudioPolicyClientImpl.cpp b/services/audiopolicy/service/AudioPolicyClientImpl.cpp
index dbcc070..31c9575 100644
--- a/services/audiopolicy/service/AudioPolicyClientImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyClientImpl.cpp
@@ -220,11 +220,11 @@
 }
 
 void AudioPolicyService::AudioPolicyClient::onRecordingConfigurationUpdate(
-        int event, audio_session_t session, audio_source_t source,
+        int event, const record_client_info_t *clientInfo,
         const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig,
         audio_patch_handle_t patchHandle)
 {
-    mAudioPolicyService->onRecordingConfigurationUpdate(event, session, source,
+    mAudioPolicyService->onRecordingConfigurationUpdate(event, clientInfo,
             clientConfig, deviceConfig, patchHandle);
 }
 
diff --git a/services/audiopolicy/service/AudioPolicyService.cpp b/services/audiopolicy/service/AudioPolicyService.cpp
index c4f6367..b417631 100644
--- a/services/audiopolicy/service/AudioPolicyService.cpp
+++ b/services/audiopolicy/service/AudioPolicyService.cpp
@@ -185,21 +185,21 @@
     }
 }
 
-void AudioPolicyService::onRecordingConfigurationUpdate(int event, audio_session_t session,
-        audio_source_t source, const audio_config_base_t *clientConfig,
+void AudioPolicyService::onRecordingConfigurationUpdate(int event,
+        const record_client_info_t *clientInfo, const audio_config_base_t *clientConfig,
         const audio_config_base_t *deviceConfig, audio_patch_handle_t patchHandle)
 {
-    mOutputCommandThread->recordingConfigurationUpdateCommand(event, session, source,
+    mOutputCommandThread->recordingConfigurationUpdateCommand(event, clientInfo,
             clientConfig, deviceConfig, patchHandle);
 }
 
-void AudioPolicyService::doOnRecordingConfigurationUpdate(int event, audio_session_t session,
-        audio_source_t source, const audio_config_base_t *clientConfig,
+void AudioPolicyService::doOnRecordingConfigurationUpdate(int event,
+        const record_client_info_t *clientInfo, const audio_config_base_t *clientConfig,
         const audio_config_base_t *deviceConfig, audio_patch_handle_t patchHandle)
 {
     Mutex::Autolock _l(mNotificationClientsLock);
     for (size_t i = 0; i < mNotificationClients.size(); i++) {
-        mNotificationClients.valueAt(i)->onRecordingConfigurationUpdate(event, session, source,
+        mNotificationClients.valueAt(i)->onRecordingConfigurationUpdate(event, clientInfo,
                 clientConfig, deviceConfig, patchHandle);
     }
 }
@@ -267,12 +267,12 @@
 }
 
 void AudioPolicyService::NotificationClient::onRecordingConfigurationUpdate(
-        int event, audio_session_t session, audio_source_t source,
+        int event, const record_client_info_t *clientInfo,
         const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig,
         audio_patch_handle_t patchHandle)
 {
     if (mAudioPolicyServiceClient != 0) {
-        mAudioPolicyServiceClient->onRecordingConfigurationUpdate(event, session, source,
+        mAudioPolicyServiceClient->onRecordingConfigurationUpdate(event, clientInfo,
                 clientConfig, deviceConfig, patchHandle);
     }
 }
@@ -544,8 +544,8 @@
                         break;
                     }
                     mLock.unlock();
-                    svc->doOnRecordingConfigurationUpdate(data->mEvent, data->mSession,
-                            data->mSource, &data->mClientConfig, &data->mDeviceConfig,
+                    svc->doOnRecordingConfigurationUpdate(data->mEvent, &data->mClientInfo,
+                            &data->mClientConfig, &data->mDeviceConfig,
                             data->mPatchHandle);
                     mLock.lock();
                     } break;
@@ -810,7 +810,7 @@
 }
 
 void AudioPolicyService::AudioCommandThread::recordingConfigurationUpdateCommand(
-        int event, audio_session_t session, audio_source_t source,
+        int event, const record_client_info_t *clientInfo,
         const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig,
         audio_patch_handle_t patchHandle)
 {
@@ -818,14 +818,13 @@
     command->mCommand = RECORDING_CONFIGURATION_UPDATE;
     RecordingConfigurationUpdateData *data = new RecordingConfigurationUpdateData();
     data->mEvent = event;
-    data->mSession = session;
-    data->mSource = source;
+    data->mClientInfo = *clientInfo;
     data->mClientConfig = *clientConfig;
     data->mDeviceConfig = *deviceConfig;
     data->mPatchHandle = patchHandle;
     command->mParam = data;
-    ALOGV("AudioCommandThread() adding recording configuration update event %d, source %d",
-            event, source);
+    ALOGV("AudioCommandThread() adding recording configuration update event %d, source %d uid %u",
+            event, clientInfo->source, clientInfo->uid);
     sendCommand(command);
 }
 
diff --git a/services/audiopolicy/service/AudioPolicyService.h b/services/audiopolicy/service/AudioPolicyService.h
index 2cd26ac..24bc144 100644
--- a/services/audiopolicy/service/AudioPolicyService.h
+++ b/services/audiopolicy/service/AudioPolicyService.h
@@ -228,11 +228,11 @@
 
             void onDynamicPolicyMixStateUpdate(const String8& regId, int32_t state);
             void doOnDynamicPolicyMixStateUpdate(const String8& regId, int32_t state);
-            void onRecordingConfigurationUpdate(int event, audio_session_t session,
-                    audio_source_t source, const audio_config_base_t *clientConfig,
+            void onRecordingConfigurationUpdate(int event, const record_client_info_t *clientInfo,
+                    const audio_config_base_t *clientConfig,
                     const audio_config_base_t *deviceConfig, audio_patch_handle_t patchHandle);
-            void doOnRecordingConfigurationUpdate(int event, audio_session_t session,
-                    audio_source_t source, const audio_config_base_t *clientConfig,
+            void doOnRecordingConfigurationUpdate(int event, const record_client_info_t *clientInfo,
+                    const audio_config_base_t *clientConfig,
                     const audio_config_base_t *deviceConfig, audio_patch_handle_t patchHandle);
 
 private:
@@ -306,8 +306,8 @@
                                                           int delayMs);
                     void        dynamicPolicyMixStateUpdateCommand(const String8& regId, int32_t state);
                     void        recordingConfigurationUpdateCommand(
-                                                        int event, audio_session_t session,
-                                                        audio_source_t source,
+                                                        int event,
+                                                        const record_client_info_t *clientInfo,
                                                         const audio_config_base_t *clientConfig,
                                                         const audio_config_base_t *deviceConfig,
                                                         audio_patch_handle_t patchHandle);
@@ -404,8 +404,7 @@
         class RecordingConfigurationUpdateData : public AudioCommandData {
         public:
             int mEvent;
-            audio_session_t mSession;
-            audio_source_t mSource;
+            record_client_info_t mClientInfo;
             struct audio_config_base mClientConfig;
             struct audio_config_base mDeviceConfig;
             audio_patch_handle_t mPatchHandle;
@@ -518,7 +517,7 @@
         virtual void onAudioPatchListUpdate();
         virtual void onDynamicPolicyMixStateUpdate(String8 regId, int32_t state);
         virtual void onRecordingConfigurationUpdate(int event,
-                        audio_session_t session, audio_source_t source,
+                        const record_client_info_t *clientInfo,
                         const audio_config_base_t *clientConfig,
                         const audio_config_base_t *deviceConfig, audio_patch_handle_t patchHandle);
 
@@ -540,8 +539,7 @@
                             void      onAudioPatchListUpdate();
                             void      onDynamicPolicyMixStateUpdate(const String8& regId, int32_t state);
                             void      onRecordingConfigurationUpdate(
-                                        int event, audio_session_t session,
-                                        audio_source_t source,
+                                        int event, const record_client_info_t *clientInfo,
                                         const audio_config_base_t *clientConfig,
                                         const audio_config_base_t *deviceConfig,
                                         audio_patch_handle_t patchHandle);