summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2014-06-04 18:11:10 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-06-04 18:11:11 +0000
commit83438ce6cbbff49ca26d4bd694ffdad4842ded5a (patch)
tree47fc04b2f5d72d054f9438cb2ae6538cd988503c /services
parent0d843fdc91c98d447c3c3e357020d07b783c7bc0 (diff)
parent5284ed53c14cd4d15bd793000ede7166d143e69a (diff)
downloadframeworks_av-83438ce6cbbff49ca26d4bd694ffdad4842ded5a.zip
frameworks_av-83438ce6cbbff49ca26d4bd694ffdad4842ded5a.tar.gz
frameworks_av-83438ce6cbbff49ca26d4bd694ffdad4842ded5a.tar.bz2
Merge "audio policy: add permission for routing APIs." into lmp-preview-dev
Diffstat (limited to 'services')
-rw-r--r--services/audioflinger/ServiceUtilities.cpp7
-rw-r--r--services/audioflinger/ServiceUtilities.h1
-rw-r--r--services/audiopolicy/AudioPolicyInterfaceImpl.cpp18
3 files changed, 26 insertions, 0 deletions
diff --git a/services/audioflinger/ServiceUtilities.cpp b/services/audioflinger/ServiceUtilities.cpp
index 152455d..8246fef 100644
--- a/services/audioflinger/ServiceUtilities.cpp
+++ b/services/audioflinger/ServiceUtilities.cpp
@@ -59,6 +59,13 @@ bool settingsAllowed() {
return ok;
}
+bool modifyAudioRoutingAllowed() {
+ static const String16 sModifyAudioRoutingAllowed("android.permission.MODIFY_AUDIO_ROUTING");
+ bool ok = checkCallingPermission(sModifyAudioRoutingAllowed);
+ if (!ok) ALOGE("android.permission.MODIFY_AUDIO_ROUTING");
+ return ok;
+}
+
bool dumpAllowed() {
// don't optimize for same pid, since mediaserver never dumps itself
static const String16 sDump("android.permission.DUMP");
diff --git a/services/audioflinger/ServiceUtilities.h b/services/audioflinger/ServiceUtilities.h
index 531bc56..df6f6f4 100644
--- a/services/audioflinger/ServiceUtilities.h
+++ b/services/audioflinger/ServiceUtilities.h
@@ -24,6 +24,7 @@ bool recordingAllowed();
bool captureAudioOutputAllowed();
bool captureHotwordAllowed();
bool settingsAllowed();
+bool modifyAudioRoutingAllowed();
bool dumpAllowed();
}
diff --git a/services/audiopolicy/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/AudioPolicyInterfaceImpl.cpp
index 2b33703..8cc386a 100644
--- a/services/audiopolicy/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/AudioPolicyInterfaceImpl.cpp
@@ -470,6 +470,9 @@ status_t AudioPolicyService::listAudioPorts(audio_port_role_t role,
unsigned int *generation)
{
Mutex::Autolock _l(mLock);
+ if(!modifyAudioRoutingAllowed()) {
+ return PERMISSION_DENIED;
+ }
if (mAudioPolicyManager == NULL) {
return NO_INIT;
}
@@ -480,6 +483,9 @@ status_t AudioPolicyService::listAudioPorts(audio_port_role_t role,
status_t AudioPolicyService::getAudioPort(struct audio_port *port)
{
Mutex::Autolock _l(mLock);
+ if(!modifyAudioRoutingAllowed()) {
+ return PERMISSION_DENIED;
+ }
if (mAudioPolicyManager == NULL) {
return NO_INIT;
}
@@ -491,6 +497,9 @@ status_t AudioPolicyService::createAudioPatch(const struct audio_patch *patch,
audio_patch_handle_t *handle)
{
Mutex::Autolock _l(mLock);
+ if(!modifyAudioRoutingAllowed()) {
+ return PERMISSION_DENIED;
+ }
if (mAudioPolicyManager == NULL) {
return NO_INIT;
}
@@ -501,6 +510,9 @@ status_t AudioPolicyService::createAudioPatch(const struct audio_patch *patch,
status_t AudioPolicyService::releaseAudioPatch(audio_patch_handle_t handle)
{
Mutex::Autolock _l(mLock);
+ if(!modifyAudioRoutingAllowed()) {
+ return PERMISSION_DENIED;
+ }
if (mAudioPolicyManager == NULL) {
return NO_INIT;
}
@@ -514,6 +526,9 @@ status_t AudioPolicyService::listAudioPatches(unsigned int *num_patches,
unsigned int *generation)
{
Mutex::Autolock _l(mLock);
+ if(!modifyAudioRoutingAllowed()) {
+ return PERMISSION_DENIED;
+ }
if (mAudioPolicyManager == NULL) {
return NO_INIT;
}
@@ -524,6 +539,9 @@ status_t AudioPolicyService::listAudioPatches(unsigned int *num_patches,
status_t AudioPolicyService::setAudioPortConfig(const struct audio_port_config *config)
{
Mutex::Autolock _l(mLock);
+ if(!modifyAudioRoutingAllowed()) {
+ return PERMISSION_DENIED;
+ }
if (mAudioPolicyManager == NULL) {
return NO_INIT;
}