summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDalingrin <dalingrin@gmail.com>2012-03-29 21:55:54 -0500
committerDalingrin <dalingrin@gmail.com>2012-03-30 18:56:39 -0500
commitc8177eb3e43d7dbfd6a18bfc6272007c99236e65 (patch)
tree0a048750d38708ba08a344683bf7ac4c2cdea824
parent901b54ffad1446b06ce41471e2052363f5599b87 (diff)
downloadframeworks_base-c8177eb3e43d7dbfd6a18bfc6272007c99236e65.zip
frameworks_base-c8177eb3e43d7dbfd6a18bfc6272007c99236e65.tar.gz
frameworks_base-c8177eb3e43d7dbfd6a18bfc6272007c99236e65.tar.bz2
Add separate headset and speaker volumes
This is a simple implementation of keeping separate volume settings for the wired headset and the speaker without overhauling the audio system. This allows a person with sensitive headphones to keep music, ringer and other stream volumes lower than they would usually keep the speaker volumes. Change-Id: Ia614c1e3ac548ff4e0104a090cda13b9daef09cb
-rw-r--r--media/java/android/media/AudioService.java49
1 files changed, 49 insertions, 0 deletions
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 4912731..78ccf30 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -51,6 +51,7 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemProperties;
import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
import android.provider.Settings.System;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
@@ -204,6 +205,24 @@ public class AudioService extends IAudioService.Stub {
AudioSystem.STREAM_MUSIC // STREAM_TTS
};
+ private static final String[] STREAM_VOLUME_HEADSET_SETTINGS = new String[] {
+ "AudioService.SAVED_VOICE_CALL_HEADSET_VOL",
+ "AudioService.SAVED_SYSTEM_HEADSET_VOL",
+ "AudioService.SAVED_RING_HEADSET_VOL",
+ "AudioService.SAVED_MUSIC_HEADSET_VOL",
+ "AudioService.SAVED_ALARM_HEADSET_VOL",
+ "AudioService.SAVED_NOTIFICATION_HEADSET_VOL",
+ };
+
+ private static final String[] STREAM_VOLUME_SPEAKER_SETTINGS = new String[] {
+ "AudioService.SAVED_VOICE_CALL_SPEAKER_VOL",
+ "AudioService.SAVED_SYSTEM_SPEAKER_VOL",
+ "AudioService.SAVED_RING_SPEAKER_VOL",
+ "AudioService.SAVED_MUSIC_SPEAKER_VOL",
+ "AudioService.SAVED_ALARM_SPEAKER_VOL",
+ "AudioService.SAVED_NOTIFICATION_SPEAKER_VOL",
+ };
+
private AudioSystem.ErrorCallback mAudioSystemCallback = new AudioSystem.ErrorCallback() {
public void onError(int error) {
switch (error) {
@@ -2541,6 +2560,36 @@ public class AudioService extends IAudioService.Stub {
int state = intent.getIntExtra("state", 0);
int microphone = intent.getIntExtra("microphone", 0);
+ //Save and restore volumes for headset and speaker
+ int lastVolume;
+ if (state == 1) {
+ for (int stream = 0; stream < STREAM_VOLUME_HEADSET_SETTINGS.length; stream++) {
+ try {
+ lastVolume = System.getInt(mContentResolver,
+ STREAM_VOLUME_HEADSET_SETTINGS[stream]);
+ } catch (SettingNotFoundException e) {
+ lastVolume = -1;
+ }
+ System.putInt(mContentResolver, STREAM_VOLUME_SPEAKER_SETTINGS[stream],
+ getStreamVolume(stream));
+ if (lastVolume >= 0)
+ setStreamVolume(stream, lastVolume, 0);
+ }
+ } else {
+ for (int stream = 0; stream < STREAM_VOLUME_SPEAKER_SETTINGS.length; stream++) {
+ try {
+ lastVolume = System.getInt(mContentResolver,
+ STREAM_VOLUME_SPEAKER_SETTINGS[stream]);
+ } catch (SettingNotFoundException e) {
+ lastVolume = -1;
+ }
+ System.putInt(mContentResolver, STREAM_VOLUME_HEADSET_SETTINGS[stream],
+ getStreamVolume(stream));
+ if (lastVolume >= 0)
+ setStreamVolume(stream, lastVolume, 0);
+ }
+ }
+
synchronized (mConnectedDevices) {
if (microphone != 0) {
boolean isConnected =