diff options
-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 1713324..0ce3526 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); } /** @@ -215,7 +217,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 c179eb8..cb8cb7f 100755 --- a/services/java/com/android/server/NotificationManagerService.java +++ b/services/java/com/android/server/NotificationManagerService.java @@ -711,6 +711,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; @@ -729,18 +732,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) |