summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/media/AudioSystem.h2
-rw-r--r--include/media/IAudioPolicyService.h2
-rw-r--r--media/libmedia/AudioSystem.cpp9
-rw-r--r--media/libmedia/AudioTrack.cpp9
-rw-r--r--media/libmedia/IAudioPolicyService.cpp20
-rw-r--r--services/audiopolicy/AudioPolicyInterfaceImpl.cpp7
-rw-r--r--services/audiopolicy/AudioPolicyInterfaceImplLegacy.cpp7
-rw-r--r--services/audiopolicy/AudioPolicyService.cpp2
-rw-r--r--services/audiopolicy/AudioPolicyService.h3
9 files changed, 58 insertions, 3 deletions
diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h
index dd63a23..f8c0198 100644
--- a/include/media/AudioSystem.h
+++ b/include/media/AudioSystem.h
@@ -320,6 +320,8 @@ public:
audio_devices_t *device);
static status_t releaseSoundTriggerSession(audio_session_t session);
+ static audio_mode_t getPhoneState();
+
// ----------------------------------------------------------------------------
class AudioPortCallback : public RefBase
diff --git a/include/media/IAudioPolicyService.h b/include/media/IAudioPolicyService.h
index c251439..16fe9cf 100644
--- a/include/media/IAudioPolicyService.h
+++ b/include/media/IAudioPolicyService.h
@@ -142,6 +142,8 @@ public:
audio_devices_t *device) = 0;
virtual status_t releaseSoundTriggerSession(audio_session_t session) = 0;
+
+ virtual audio_mode_t getPhoneState() = 0;
};
diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp
index 1742fbe..dda3657 100644
--- a/media/libmedia/AudioSystem.cpp
+++ b/media/libmedia/AudioSystem.cpp
@@ -939,6 +939,15 @@ status_t AudioSystem::releaseSoundTriggerSession(audio_session_t session)
if (aps == 0) return PERMISSION_DENIED;
return aps->releaseSoundTriggerSession(session);
}
+
+audio_mode_t AudioSystem::getPhoneState()
+{
+ const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
+ if (aps == 0) return AUDIO_MODE_INVALID;
+ return aps->getPhoneState();
+}
+
+
// ---------------------------------------------------------------------------
void AudioSystem::AudioPolicyServiceClient::binderDied(const wp<IBinder>& who __unused)
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index ea7b279..e3beba5 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -2124,9 +2124,16 @@ void AudioTrack::setStreamTypeFromAttributes(audio_attributes_t& aa) {
// usage to stream type mapping
switch (aa.usage) {
+ case AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY:
+ // TODO once AudioPolicyManager fully supports audio_attributes_t,
+ // remove stream change based on phone state
+ if (AudioSystem::getPhoneState() == AUDIO_MODE_RINGTONE) {
+ mStreamType = AUDIO_STREAM_RING;
+ break;
+ }
+ /// FALL THROUGH
case AUDIO_USAGE_MEDIA:
case AUDIO_USAGE_GAME:
- case AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY:
case AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE:
mStreamType = AUDIO_STREAM_MUSIC;
return;
diff --git a/media/libmedia/IAudioPolicyService.cpp b/media/libmedia/IAudioPolicyService.cpp
index b57f747..256cb3f 100644
--- a/media/libmedia/IAudioPolicyService.cpp
+++ b/media/libmedia/IAudioPolicyService.cpp
@@ -67,7 +67,8 @@ enum {
REGISTER_CLIENT,
GET_OUTPUT_FOR_ATTR,
ACQUIRE_SOUNDTRIGGER_SESSION,
- RELEASE_SOUNDTRIGGER_SESSION
+ RELEASE_SOUNDTRIGGER_SESSION,
+ GET_PHONE_STATE
};
class BpAudioPolicyService : public BpInterface<IAudioPolicyService>
@@ -607,6 +608,17 @@ public:
}
return (status_t)reply.readInt32();
}
+
+ virtual audio_mode_t getPhoneState()
+ {
+ Parcel data, reply;
+ data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
+ status_t status = remote()->transact(GET_PHONE_STATE, data, &reply);
+ if (status != NO_ERROR) {
+ return AUDIO_MODE_INVALID;
+ }
+ return (audio_mode_t)reply.readInt32();
+ }
};
IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService");
@@ -1057,6 +1069,12 @@ status_t BnAudioPolicyService::onTransact(
return NO_ERROR;
} break;
+ case GET_PHONE_STATE: {
+ CHECK_INTERFACE(IAudioPolicyService, data, reply);
+ reply->writeInt32((int32_t)getPhoneState());
+ return NO_ERROR;
+ } break;
+
default:
return BBinder::onTransact(code, data, reply, flags);
}
diff --git a/services/audiopolicy/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/AudioPolicyInterfaceImpl.cpp
index 2c51e25..b212ca6 100644
--- a/services/audiopolicy/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/AudioPolicyInterfaceImpl.cpp
@@ -80,9 +80,16 @@ status_t AudioPolicyService::setPhoneState(audio_mode_t state)
Mutex::Autolock _l(mLock);
mAudioPolicyManager->setPhoneState(state);
+ mPhoneState = state;
return NO_ERROR;
}
+audio_mode_t AudioPolicyService::getPhoneState()
+{
+ Mutex::Autolock _l(mLock);
+ return mPhoneState;
+}
+
status_t AudioPolicyService::setForceUse(audio_policy_force_use_t usage,
audio_policy_forced_cfg_t config)
{
diff --git a/services/audiopolicy/AudioPolicyInterfaceImplLegacy.cpp b/services/audiopolicy/AudioPolicyInterfaceImplLegacy.cpp
index f20c070..1e40bc3 100644
--- a/services/audiopolicy/AudioPolicyInterfaceImplLegacy.cpp
+++ b/services/audiopolicy/AudioPolicyInterfaceImplLegacy.cpp
@@ -84,9 +84,16 @@ status_t AudioPolicyService::setPhoneState(audio_mode_t state)
Mutex::Autolock _l(mLock);
mpAudioPolicy->set_phone_state(mpAudioPolicy, state);
+ mPhoneState = state;
return NO_ERROR;
}
+audio_mode_t AudioPolicyService::getPhoneState()
+{
+ Mutex::Autolock _l(mLock);
+ return mPhoneState;
+}
+
status_t AudioPolicyService::setForceUse(audio_policy_force_use_t usage,
audio_policy_forced_cfg_t config)
{
diff --git a/services/audiopolicy/AudioPolicyService.cpp b/services/audiopolicy/AudioPolicyService.cpp
index 50bb8c7..647cda4 100644
--- a/services/audiopolicy/AudioPolicyService.cpp
+++ b/services/audiopolicy/AudioPolicyService.cpp
@@ -59,7 +59,7 @@ namespace {
AudioPolicyService::AudioPolicyService()
: BnAudioPolicyService(), mpAudioPolicyDev(NULL), mpAudioPolicy(NULL),
- mAudioPolicyManager(NULL), mAudioPolicyClient(NULL)
+ mAudioPolicyManager(NULL), mAudioPolicyClient(NULL), mPhoneState(AUDIO_MODE_INVALID)
{
char value[PROPERTY_VALUE_MAX];
const struct hw_module_t *module;
diff --git a/services/audiopolicy/AudioPolicyService.h b/services/audiopolicy/AudioPolicyService.h
index 0044e7a..2cea40b 100644
--- a/services/audiopolicy/AudioPolicyService.h
+++ b/services/audiopolicy/AudioPolicyService.h
@@ -174,6 +174,8 @@ public:
virtual status_t releaseSoundTriggerSession(audio_session_t session);
+ virtual audio_mode_t getPhoneState();
+
status_t doStopOutput(audio_io_handle_t output,
audio_stream_type_t stream,
int session = 0);
@@ -493,6 +495,7 @@ private:
// Manage all effects configured in audio_effects.conf
sp<AudioPolicyEffects> mAudioPolicyEffects;
+ audio_mode_t mPhoneState;
};
}; // namespace android