diff options
author | Daniel Hillenbrand <codeworkx@cyanogenmod.com> | 2012-08-03 01:50:25 +0400 |
---|---|---|
committer | Gerrit Code Review <gerrit@review.cyanogenmod.com> | 2012-08-03 01:50:25 +0400 |
commit | adfae956aaba88446b5ba5ca2b8b505b0cb1af53 (patch) | |
tree | 8cb1c9f494bf4d19b77954d3523ecd85a570a47f | |
parent | 5f2e018e35d04ae6199308077c5bfd2e9eb2f417 (diff) | |
parent | 49433621b038a3b021db3a0cef9c130d62b48f0d (diff) | |
download | frameworks_base-adfae956aaba88446b5ba5ca2b8b505b0cb1af53.zip frameworks_base-adfae956aaba88446b5ba5ca2b8b505b0cb1af53.tar.gz frameworks_base-adfae956aaba88446b5ba5ca2b8b505b0cb1af53.tar.bz2 |
Merge "Fix ring/notification volume not restoring correctly on headset (dis)connect" into ics
-rw-r--r-- | media/java/android/media/AudioService.java | 70 |
1 files changed, 39 insertions, 31 deletions
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index b557dd9..8cfed1b 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -226,6 +226,10 @@ public class AudioService extends IAudioService.Stub { "AudioService.SAVED_NOTIFICATION_SPEAKER_VOL", }; + private static final int HEADSET_VOLUME_RESTORE_CAP_VOICE_CALL = 3; // Out of 5 + private static final int HEADSET_VOLUME_RESTORE_CAP_MUSIC = 8; // Out of 15 + private static final int HEADSET_VOLUME_RESTORE_CAP_OTHER = 4; // Out of 7 + private AudioSystem.ErrorCallback mAudioSystemCallback = new AudioSystem.ErrorCallback() { public void onError(int error) { switch (error) { @@ -2573,56 +2577,60 @@ public class AudioService extends IAudioService.Stub { int lastVolume; if (state == 1) { // Headset plugged in - int volumeRestoreCap; - if (Settings.System.getInt(mContentResolver, - Settings.System.SAFE_HEADSET_VOLUME_RESTORE, 1) == 0) { - // Don't cap - volumeRestoreCap = 8; - } else { - volumeRestoreCap = 4; - } + final boolean capVolumeRestore = Settings.System.getInt(mContentResolver, + Settings.System.SAFE_HEADSET_VOLUME_RESTORE, 1) == 1; for (int stream = 0; stream < STREAM_VOLUME_HEADSET_SETTINGS.length; stream++) { + final int streamAlias = STREAM_VOLUME_ALIAS[stream]; + // Save speaker volume + System.putInt(mContentResolver, STREAM_VOLUME_SPEAKER_SETTINGS[stream], + getStreamVolume(streamAlias)); + // Restore headset volume try { lastVolume = System.getInt(mContentResolver, - STREAM_VOLUME_HEADSET_SETTINGS[stream]); + STREAM_VOLUME_HEADSET_SETTINGS[streamAlias]); } catch (SettingNotFoundException e) { lastVolume = -1; } - System.putInt(mContentResolver, STREAM_VOLUME_SPEAKER_SETTINGS[stream], - getStreamVolume(stream)); - if (lastVolume >= 0) - if (stream == 0) { - // Don't touch voice call volume - setStreamVolume(stream, lastVolume, 0); - } else if (stream != 3) { - if (lastVolume > volumeRestoreCap) { - setStreamVolume(stream, volumeRestoreCap, 0); - } else { - setStreamVolume(stream, lastVolume, 0); + if (lastVolume >= 0) { + if (capVolumeRestore) { + final int volumeCap; + switch (streamAlias) { + case AudioSystem.STREAM_VOICE_CALL: + volumeCap = HEADSET_VOLUME_RESTORE_CAP_VOICE_CALL; + break; + case AudioSystem.STREAM_MUSIC: + volumeCap = HEADSET_VOLUME_RESTORE_CAP_MUSIC; + break; + case AudioSystem.STREAM_SYSTEM: + case AudioSystem.STREAM_RING: + case AudioSystem.STREAM_ALARM: + case AudioSystem.STREAM_NOTIFICATION: + default: + volumeCap = HEADSET_VOLUME_RESTORE_CAP_OTHER; + break; } + setStreamVolume(streamAlias, Math.min(volumeCap, lastVolume), 0); } else { - // For media volume the cap is doubled to correspond - // with its finer granularity - if (lastVolume > (volumeRestoreCap * 2)) { - setStreamVolume(stream, (volumeRestoreCap * 2), 0); - } else { - setStreamVolume(stream, lastVolume, 0); - } + setStreamVolume(streamAlias, lastVolume, 0); } + } } } else { // Headset disconnected for (int stream = 0; stream < STREAM_VOLUME_SPEAKER_SETTINGS.length; stream++) { + final int streamAlias = STREAM_VOLUME_ALIAS[stream]; + // Save headset volume + System.putInt(mContentResolver, STREAM_VOLUME_HEADSET_SETTINGS[stream], + getStreamVolume(streamAlias)); + // Restore speaker volume try { lastVolume = System.getInt(mContentResolver, - STREAM_VOLUME_SPEAKER_SETTINGS[stream]); + STREAM_VOLUME_SPEAKER_SETTINGS[streamAlias]); } catch (SettingNotFoundException e) { lastVolume = -1; } - System.putInt(mContentResolver, STREAM_VOLUME_HEADSET_SETTINGS[stream], - getStreamVolume(stream)); if (lastVolume >= 0) - setStreamVolume(stream, lastVolume, 0); + setStreamVolume(streamAlias, lastVolume, 0); } } |