diff options
author | Eric Laurent <elaurent@google.com> | 2009-11-27 05:07:55 -0800 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2009-11-27 05:07:55 -0800 |
commit | 524dc046b1225087f481878a5c3ae7f733c9f0e2 (patch) | |
tree | 27cfbc540b394b8a0a80e20658ee20842f178530 | |
parent | bcab01f6d0158c4d928f42b034949dc9608665a6 (diff) | |
download | frameworks_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.cpp | 20 | ||||
-rw-r--r-- | media/java/android/media/Ringtone.java | 8 | ||||
-rwxr-xr-x | services/java/com/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) |