audio policy: receive assistant and a11y service UIDs
Add APIs to communicate assistant and accessibility service UIDs
to audio policy service in order to implement the new concurrent
capture policy.
Bug: 111438757
Test: enable and disable Google Assistant and Voice Access.
Change-Id: Ia804613051edab2ebd57d317b5b7509c98e7c6b4
diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index 02ab07f..59c8f10 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -1135,4 +1135,18 @@
return mAudioPolicyManager->setSurroundFormatEnabled(audioFormat, enabled);
}
+status_t AudioPolicyService::setAssistantUid(uid_t uid)
+{
+ Mutex::Autolock _l(mLock);
+ mUidPolicy->setAssistantUid(uid);
+ return NO_ERROR;
+}
+
+status_t AudioPolicyService::setA11yServicesUids(const std::vector<uid_t>& uids)
+{
+ Mutex::Autolock _l(mLock);
+ mUidPolicy->setA11yUids(uids);
+ return NO_ERROR;
+}
+
} // namespace android
diff --git a/services/audiopolicy/service/AudioPolicyService.cpp b/services/audiopolicy/service/AudioPolicyService.cpp
index 6da1f9f..018d9e3 100644
--- a/services/audiopolicy/service/AudioPolicyService.cpp
+++ b/services/audiopolicy/service/AudioPolicyService.cpp
@@ -637,6 +637,12 @@
}
}
+bool AudioPolicyService::UidPolicy::isA11yUid(uid_t uid)
+{
+ std::vector<uid_t>::iterator it = find(mA11yUids.begin(), mA11yUids.end(), uid);
+ return it != mA11yUids.end();
+}
+
// ----------- AudioPolicyService::AudioCommandThread implementation ----------
AudioPolicyService::AudioCommandThread::AudioCommandThread(String8 name,
diff --git a/services/audiopolicy/service/AudioPolicyService.h b/services/audiopolicy/service/AudioPolicyService.h
index a341145..ec32511 100644
--- a/services/audiopolicy/service/AudioPolicyService.h
+++ b/services/audiopolicy/service/AudioPolicyService.h
@@ -214,6 +214,9 @@
bool reported);
virtual status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled);
+ virtual status_t setAssistantUid(uid_t uid);
+ virtual status_t setA11yServicesUids(const std::vector<uid_t>& uids);
+
status_t doStopOutput(audio_port_handle_t portId);
void doReleaseOutput(audio_port_handle_t portId);
@@ -277,7 +280,7 @@
class UidPolicy : public BnUidObserver, public virtual IBinder::DeathRecipient {
public:
explicit UidPolicy(wp<AudioPolicyService> service)
- : mService(service), mObserverRegistered(false) {}
+ : mService(service), mObserverRegistered(false), mAssistantUid(0) {}
void registerSelf();
void unregisterSelf();
@@ -286,6 +289,10 @@
void binderDied(const wp<IBinder> &who) override;
bool isUidActive(uid_t uid);
+ void setAssistantUid(uid_t uid) { mAssistantUid = uid; }
+ bool isAssistantUid(uid_t uid) { return uid == mAssistantUid; }
+ void setA11yUids(const std::vector<uid_t>& uids) { mA11yUids.clear(); mA11yUids = uids; }
+ bool isA11yUid(uid_t uid);
// BnUidObserver implementation
void onUidActive(uid_t uid) override;
@@ -307,6 +314,8 @@
bool mObserverRegistered;
std::unordered_map<uid_t, bool> mOverrideUids;
std::unordered_map<uid_t, bool> mCachedUids;
+ uid_t mAssistantUid;
+ std::vector<uid_t> mA11yUids;
};
// Thread used to send audio config commands to audio flinger