From 524dc046b1225087f481878a5c3ae7f733c9f0e2 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Fri, 27 Nov 2009 05:07:55 -0800 Subject: 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. --- camera/libcameraservice/CameraService.cpp | 20 ++++++++++++++++---- media/java/android/media/Ringtone.java | 8 +++++++- .../android/server/NotificationManagerService.java | 21 +++++++++++++-------- 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) -- cgit v1.1