AI 143327: am: CL 143177 am: CL 142889 Fix issue #1736153 Camera shutter sound can be muted by new AlarmClock setting.

Current implementation of Camera service plays the camera shutter sound over the ALARM stream so that it cannot be muted by silent mode in order to comply to some country specific requirement. A recent change made it possible for the user to mute the ALARM stream thus making this stream not suitable any more for the camera shutter sound.
  The fix consists in creating a new stream type only accessible by native code and that cannot be muted and use it to play camera sounds.
  Original author: elaurent
  Merged from: //branches/cupcake/...
  Original author: android-build
  Merged from: //branches/donutburger/...

Automated import of CL 143327
This commit is contained in:
Eric Laurent
2009-03-27 18:18:46 -07:00
committed by The Android Open Source Project
parent 052eb7131b
commit 63e45f2854
3 changed files with 16 additions and 4 deletions

View File

@ -32,6 +32,8 @@
#include <media/AudioSystem.h>
#include "CameraService.h"
#include <cutils/properties.h>
namespace android {
extern "C" {
@ -157,7 +159,13 @@ static sp<MediaPlayer> newMediaPlayer(const char *file)
{
sp<MediaPlayer> mp = new MediaPlayer();
if (mp->setDataSource(file) == NO_ERROR) {
mp->setAudioStreamType(AudioSystem::ALARM);
char value[PROPERTY_VALUE_MAX];
property_get("ro.camera.sound.forced", value, "0");
if (atoi(value)) {
mp->setAudioStreamType(AudioSystem::ENFORCED_AUDIBLE);
} else {
mp->setAudioStreamType(AudioSystem::SYSTEM);
}
mp->prepare();
} else {
mp.clear();

View File

@ -38,6 +38,7 @@ public:
ALARM = 4,
NOTIFICATION = 5,
BLUETOOTH_SCO = 6,
ENFORCED_AUDIBLE = 7, // Sounds that cannot be muted by user and must be routed to speaker
NUM_STREAM_TYPES
};

View File

@ -243,7 +243,8 @@ bool AudioFlinger::streamForcedToSpeaker(int streamType)
// AudioSystem::routedToA2dpOutput(streamType) == false
return (streamType == AudioSystem::RING ||
streamType == AudioSystem::ALARM ||
streamType == AudioSystem::NOTIFICATION);
streamType == AudioSystem::NOTIFICATION ||
streamType == AudioSystem::ENFORCED_AUDIBLE);
}
status_t AudioFlinger::dumpClients(int fd, const Vector<String16>& args)
@ -645,7 +646,8 @@ status_t AudioFlinger::setStreamVolume(int stream, float value)
return PERMISSION_DENIED;
}
if (uint32_t(stream) >= AudioSystem::NUM_STREAM_TYPES) {
if (uint32_t(stream) >= AudioSystem::NUM_STREAM_TYPES ||
uint32_t(stream) == AudioSystem::ENFORCED_AUDIBLE) {
return BAD_VALUE;
}
@ -680,7 +682,8 @@ status_t AudioFlinger::setStreamMute(int stream, bool muted)
return PERMISSION_DENIED;
}
if (uint32_t(stream) >= AudioSystem::NUM_STREAM_TYPES) {
if (uint32_t(stream) >= AudioSystem::NUM_STREAM_TYPES ||
uint32_t(stream) == AudioSystem::ENFORCED_AUDIBLE) {
return BAD_VALUE;
}