audio policy: extend API used to silence capture from a given app

In preparation for concurrent capture policy, extend current audio policy
interface setRecordSilenced(uid...) to a more generic API setAppState(uid...)

Bug: 111438757
Test: CTS test AudioRecord.testRecordNoDataForIdleUids
Change-Id: Idba540e2724a6c71ec275a5ff73c312e5b6040a4
diff --git a/services/audiopolicy/AudioPolicyInterface.h b/services/audiopolicy/AudioPolicyInterface.h
index d4c49d9..3c3a82b 100644
--- a/services/audiopolicy/AudioPolicyInterface.h
+++ b/services/audiopolicy/AudioPolicyInterface.h
@@ -242,7 +242,7 @@
                                         bool reported) = 0;
     virtual status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) = 0;
 
-    virtual void     setRecordSilenced(uid_t uid, bool silenced);
+    virtual void     setAppState(uid_t uid, app_state_t state);
 };
 
 
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index d118459..e9e1a22 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -3715,11 +3715,13 @@
     return profileUpdated ? NO_ERROR : INVALID_OPERATION;
 }
 
-void AudioPolicyManager::setRecordSilenced(uid_t uid, bool silenced)
+void AudioPolicyManager::setAppState(uid_t uid, app_state_t state)
 {
+    Vector<sp<AudioInputDescriptor> > activeInputs = mInputs.getActiveInputs();
+    bool silenced = state == APP_STATE_IDLE;
+
     ALOGV("AudioPolicyManager:setRecordSilenced(uid:%d, silenced:%d)", uid, silenced);
 
-    Vector<sp<AudioInputDescriptor> > activeInputs = mInputs.getActiveInputs();
     for (size_t i = 0; i < activeInputs.size(); i++) {
         sp<AudioInputDescriptor> activeDesc = activeInputs[i];
         RecordClientVector clients = activeDesc->clientsList(true /*activeOnly*/);
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.h b/services/audiopolicy/managerdefault/AudioPolicyManager.h
index f559b7f..0436b1d 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.h
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h
@@ -242,7 +242,7 @@
         // return the strategy corresponding to a given stream type
         routing_strategy getStrategy(audio_stream_type_t stream) const;
 
-        virtual void setRecordSilenced(uid_t uid, bool silenced);
+        virtual void setAppState(uid_t uid, app_state_t state);
 
 protected:
         // A constructor that allows more fine-grained control over initialization process,
diff --git a/services/audiopolicy/service/AudioPolicyService.cpp b/services/audiopolicy/service/AudioPolicyService.cpp
index b1ed522..6da1f9f 100644
--- a/services/audiopolicy/service/AudioPolicyService.cpp
+++ b/services/audiopolicy/service/AudioPolicyService.cpp
@@ -340,17 +340,18 @@
     return NO_ERROR;
 }
 
-void AudioPolicyService::setRecordSilenced(uid_t uid, bool silenced)
+void AudioPolicyService::setAppState(uid_t uid, app_state_t state)
 {
     {
         Mutex::Autolock _l(mLock);
         if (mAudioPolicyManager) {
             AutoCallerClear acc;
-            mAudioPolicyManager->setRecordSilenced(uid, silenced);
+            mAudioPolicyManager->setAppState(uid, state);
         }
     }
     sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
     if (af) {
+        bool silenced = state == APP_STATE_IDLE;
         af->setRecordSilenced(uid, silenced);
     }
 }
@@ -585,7 +586,9 @@
 void AudioPolicyService::UidPolicy::notifyService(uid_t uid, bool active) {
     sp<AudioPolicyService> service = mService.promote();
     if (service != nullptr) {
-        service->setRecordSilenced(uid, !active);
+        service->setAppState(uid, active ?
+                              APP_STATE_FOREGROUND :
+                              APP_STATE_IDLE);
     }
 }
 
diff --git a/services/audiopolicy/service/AudioPolicyService.h b/services/audiopolicy/service/AudioPolicyService.h
index 6c55647..a341145 100644
--- a/services/audiopolicy/service/AudioPolicyService.h
+++ b/services/audiopolicy/service/AudioPolicyService.h
@@ -250,7 +250,7 @@
     virtual status_t shellCommand(int in, int out, int err, Vector<String16>& args);
 
     // Sets whether the given UID records only silence
-    virtual void setRecordSilenced(uid_t uid, bool silenced);
+    virtual void setAppState(uid_t uid, app_state_t state);
 
     // Overrides the UID state as if it is idle
     status_t handleSetUidState(Vector<String16>& args, int err);