From 403bd3429bff82e4926694d0c02d08bf4a6ca277 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Tue, 11 Jul 2017 16:21:44 -0700 Subject: [PATCH] audioservice: modify default music volume Default music volume is changed from 3/4 of max to 1/3 of max to reduce initial volume over headphones percieved as too agressive. Also add a property ro.config.media_vol_default to modify this default value. Bug: 62608451 Test: verify default music volume over headphones after factory reset. Change-Id: Icadb99e1bafe88984d3a3a05014d4d4648830693 --- media/java/android/media/AudioSystem.java | 8 ++-- .../android/server/audio/AudioService.java | 48 ++++++++++++++----- 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java index 29fe275777b03..ea4d8024911dc 100644 --- a/media/java/android/media/AudioSystem.java +++ b/media/java/android/media/AudioSystem.java @@ -803,14 +803,14 @@ public class AudioSystem 4, // STREAM_VOICE_CALL 7, // STREAM_SYSTEM 5, // STREAM_RING - 11, // STREAM_MUSIC + 5, // STREAM_MUSIC 6, // STREAM_ALARM 5, // STREAM_NOTIFICATION 7, // STREAM_BLUETOOTH_SCO 7, // STREAM_SYSTEM_ENFORCED - 11, // STREAM_DTMF - 11, // STREAM_TTS - 11, // STREAM_ACCESSIBILITY + 5, // STREAM_DTMF + 5, // STREAM_TTS + 5, // STREAM_ACCESSIBILITY }; public static String streamToString(int stream) { diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 2199bba9bbacb..c93a636db3141 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -648,20 +648,29 @@ public class AudioService extends IAudioService.Stub mHasVibrator = vibrator == null ? false : vibrator.hasVibrator(); // Initialize volume - int maxVolume = SystemProperties.getInt("ro.config.vc_call_vol_steps", - MAX_STREAM_VOLUME[AudioSystem.STREAM_VOICE_CALL]); - if (maxVolume != MAX_STREAM_VOLUME[AudioSystem.STREAM_VOICE_CALL]) { - MAX_STREAM_VOLUME[AudioSystem.STREAM_VOICE_CALL] = maxVolume; - AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_VOICE_CALL] = (maxVolume * 3) / 4; + int maxCallVolume = SystemProperties.getInt("ro.config.vc_call_vol_steps", -1); + if (maxCallVolume != -1) { + MAX_STREAM_VOLUME[AudioSystem.STREAM_VOICE_CALL] = maxCallVolume; + AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_VOICE_CALL] = + (maxCallVolume * 3) / 4; } - maxVolume = SystemProperties.getInt("ro.config.media_vol_steps", - MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC]); - if (maxVolume != MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC]) { - MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = maxVolume; + + int maxMusicVolume = SystemProperties.getInt("ro.config.media_vol_steps", -1); + if (maxMusicVolume != -1) { + MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = maxMusicVolume; + } + + int defaultMusicVolume = SystemProperties.getInt("ro.config.media_vol_default", -1); + if (defaultMusicVolume != -1 && + defaultMusicVolume <= MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC]) { + AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = defaultMusicVolume; + } else { if (isPlatformTelevision()) { - AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = maxVolume / 4; + AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = + MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] / 4; } else { - AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = (maxVolume * 3) / 4; + AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = + MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] / 3; } } @@ -979,6 +988,19 @@ public class AudioService extends IAudioService.Stub checkAllFixedVolumeDevices(); checkAllAliasStreamVolumes(); checkMuteAffectedStreams(); + updateDefaultVolumes(); + } + + // Update default indexes from aliased streams. Must be called after mStreamStates is created + private void updateDefaultVolumes() { + for (int stream = 0; stream < mStreamStates.length; stream++) { + if (stream != mStreamVolumeAlias[stream]) { + AudioSystem.DEFAULT_STREAM_VOLUME[stream] = rescaleIndex( + AudioSystem.DEFAULT_STREAM_VOLUME[mStreamVolumeAlias[stream]], + mStreamVolumeAlias[stream], + stream); + } + } } private void dumpStreamStates(PrintWriter pw) { @@ -1027,7 +1049,9 @@ public class AudioService extends IAudioService.Stub mStreamVolumeAlias[AudioSystem.STREAM_DTMF] = dtmfStreamAlias; mStreamVolumeAlias[AudioSystem.STREAM_ACCESSIBILITY] = a11yStreamAlias; - if (updateVolumes) { + if (updateVolumes && mStreamStates != null) { + updateDefaultVolumes(); + mStreamStates[AudioSystem.STREAM_DTMF].setAllIndexes(mStreamStates[dtmfStreamAlias], caller);