summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2009-11-27 05:07:55 -0800
committerEric Laurent <elaurent@google.com>2009-11-27 05:07:55 -0800
commit524dc046b1225087f481878a5c3ae7f733c9f0e2 (patch)
tree27cfbc540b394b8a0a80e20658ee20842f178530
parentbcab01f6d0158c4d928f42b034949dc9608665a6 (diff)
downloadframeworks_base-524dc046b1225087f481878a5c3ae7f733c9f0e2.zip
frameworks_base-524dc046b1225087f481878a5c3ae7f733c9f0e2.tar.gz
frameworks_base-524dc046b1225087f481878a5c3ae7f733c9f0e2.tar.bz2
Fix issue 2192673: Music Pausing Even when notifications are set to silent.
Do not play ringtones, notifications or camera sounds if ringer mode is silent.
-rw-r--r--camera/libcameraservice/CameraService.cpp20
-rw-r--r--media/java/android/media/Ringtone.java8
-rwxr-xr-xservices/java/com/android/server/NotificationManagerService.java21
3 files changed, 36 insertions, 13 deletions
diff --git a/camera/libcameraservice/CameraService.cpp b/camera/libcameraservice/CameraService.cpp
index df59dcf..6419a5c 100644
--- a/camera/libcameraservice/CameraService.cpp
+++ b/camera/libcameraservice/CameraService.cpp
@@ -669,8 +669,14 @@ status_t CameraService::Client::startRecording()
LOGD("startRecording (pid %d)", getCallingPid());
if (mMediaPlayerBeep.get() != NULL) {
- mMediaPlayerBeep->seekTo(0);
- mMediaPlayerBeep->start();
+ // do not play record jingle if stream volume is 0
+ // (typically because ringer mode is silent).
+ int index;
+ AudioSystem::getStreamVolumeIndex(AudioSystem::ENFORCED_AUDIBLE, &index);
+ if (index != 0) {
+ mMediaPlayerBeep->seekTo(0);
+ mMediaPlayerBeep->start();
+ }
}
mHardware->enableMsgType(CAMERA_MSG_VIDEO_FRAME);
@@ -888,8 +894,14 @@ void CameraService::Client::handleShutter(
{
// Play shutter sound.
if (mMediaPlayerClick.get() != NULL) {
- mMediaPlayerClick->seekTo(0);
- mMediaPlayerClick->start();
+ // do not play shutter sound if stream volume is 0
+ // (typically because ringer mode is silent).
+ int index;
+ AudioSystem::getStreamVolumeIndex(AudioSystem::ENFORCED_AUDIBLE, &index);
+ if (index != 0) {
+ mMediaPlayerClick->seekTo(0);
+ mMediaPlayerClick->start();
+ }
}
// Screen goes black after the buffer is unregistered.
diff --git a/media/java/android/media/Ringtone.java b/media/java/android/media/Ringtone.java
index e80d8aa..f988d2b 100644
--- a/media/java/android/media/Ringtone.java
+++ b/media/java/android/media/Ringtone.java
@@ -63,11 +63,13 @@ public class Ringtone {
private AssetFileDescriptor mAssetFileDescriptor;
private int mStreamType = AudioManager.STREAM_RING;
+ private AudioManager mAudioManager;
private Context mContext;
Ringtone(Context context) {
mContext = context;
+ mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
}
/**
@@ -209,7 +211,11 @@ public class Ringtone {
}
}
if (mAudio != null) {
- mAudio.start();
+ // do not ringtones if stream volume is 0
+ // (typically because ringer mode is silent).
+ if (mAudioManager.getStreamVolume(mStreamType) != 0) {
+ mAudio.start();
+ }
}
}
diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java
index ff23a13..94aa458 100755
--- a/services/java/com/android/server/NotificationManagerService.java
+++ b/services/java/com/android/server/NotificationManagerService.java
@@ -704,6 +704,9 @@ class NotificationManagerService extends INotificationManager.Stub
&& (!(old != null
&& (notification.flags & Notification.FLAG_ONLY_ALERT_ONCE) != 0 ))
&& mSystemReady) {
+
+ final AudioManager audioManager = (AudioManager) mContext
+ .getSystemService(Context.AUDIO_SERVICE);
// sound
final boolean useDefaultSound =
(notification.defaults & Notification.DEFAULT_SOUND) != 0;
@@ -722,18 +725,20 @@ class NotificationManagerService extends INotificationManager.Stub
audioStreamType = DEFAULT_STREAM_TYPE;
}
mSoundNotification = r;
- long identity = Binder.clearCallingIdentity();
- try {
- mSound.play(mContext, uri, looping, audioStreamType);
- }
- finally {
- Binder.restoreCallingIdentity(identity);
+ // do not play notifications if stream volume is 0
+ // (typically because ringer mode is silent).
+ if (audioManager.getStreamVolume(audioStreamType) != 0) {
+ long identity = Binder.clearCallingIdentity();
+ try {
+ mSound.play(mContext, uri, looping, audioStreamType);
+ }
+ finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
}
// vibrate
- final AudioManager audioManager = (AudioManager) mContext
- .getSystemService(Context.AUDIO_SERVICE);
final boolean useDefaultVibrate =
(notification.defaults & Notification.DEFAULT_VIBRATE) != 0;
if ((useDefaultVibrate || notification.vibrate != null)