audioflinger: fix App Ops for services
Do not check app ops for audio playback for services in
general, not just for audioserver or root user.
Bug: 133178934
Test: audio smoke tests
Change-Id: I3a34e6418dc750cc12ed35d465ca8874b0ce0f73
diff --git a/services/audioflinger/PlaybackTracks.h b/services/audioflinger/PlaybackTracks.h
index 7008cee..a093893 100644
--- a/services/audioflinger/PlaybackTracks.h
+++ b/services/audioflinger/PlaybackTracks.h
@@ -31,6 +31,7 @@
private:
OpPlayAudioMonitor(uid_t uid, audio_usage_t usage, int id);
void onFirstRef() override;
+ static void getPackagesForUid(uid_t uid, Vector<String16>& packages);
AppOpsManager mAppOpsManager;
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp
index b0817ed..78db80c 100644
--- a/services/audioflinger/Tracks.cpp
+++ b/services/audioflinger/Tracks.cpp
@@ -389,9 +389,16 @@
AudioFlinger::PlaybackThread::OpPlayAudioMonitor::createIfNeeded(
uid_t uid, const audio_attributes_t& attr, int id, audio_stream_type_t streamType)
{
- if (isAudioServerOrRootUid(uid)) {
- ALOGD("OpPlayAudio: not muting track:%d usage:%d root or audioserver", id, attr.usage);
- return nullptr;
+ if (isServiceUid(uid)) {
+ Vector <String16> packages;
+ getPackagesForUid(uid, packages);
+ if (packages.isEmpty()) {
+ ALOGD("OpPlayAudio: not muting track:%d usage:%d for service UID %d",
+ id,
+ attr.usage,
+ uid);
+ return nullptr;
+ }
}
// stream type has been filtered by audio policy to indicate whether it can be muted
if (streamType == AUDIO_STREAM_ENFORCED_AUDIBLE) {
@@ -423,8 +430,7 @@
void AudioFlinger::PlaybackThread::OpPlayAudioMonitor::onFirstRef()
{
- PermissionController permissionController;
- permissionController.getPackagesForUid(mUid, mPackages);
+ getPackagesForUid(mUid, mPackages);
checkPlayAudioForUsage();
if (!mPackages.isEmpty()) {
mOpCallback = new PlayAudioOpCallback(this);
@@ -475,6 +481,14 @@
}
}
+// static
+void AudioFlinger::PlaybackThread::OpPlayAudioMonitor::getPackagesForUid(
+ uid_t uid, Vector<String16>& packages)
+{
+ PermissionController permissionController;
+ permissionController.getPackagesForUid(uid, packages);
+}
+
// ----------------------------------------------------------------------------
#undef LOG_TAG
#define LOG_TAG "AF::Track"