am 13bd3ed4: am f9fac2c5: Merge "Add multi user volume management" into jb-mr1-dev

* commit '13bd3ed4796fae13f0daaa8ce062fdd8effec737':
  Add multi user volume management
This commit is contained in:
Eric Laurent
2012-09-20 13:00:55 -07:00
committed by Android Git Automerger
3 changed files with 78 additions and 37 deletions

View File

@@ -18791,6 +18791,7 @@ package android.provider {
field public static final java.lang.String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled";
field public static final java.lang.String DEVICE_PROVISIONED = "device_provisioned";
field public static final java.lang.String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
field public static final java.lang.String MODE_RINGER = "mode_ringer";
field public static final java.lang.String NETWORK_PREFERENCE = "network_preference";
field public static final java.lang.String RADIO_BLUETOOTH = "bluetooth";
field public static final java.lang.String RADIO_CELL = "cell";
@@ -18954,7 +18955,7 @@ package android.provider {
field public static final deprecated java.lang.String LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = "lock_pattern_tactile_feedback_enabled";
field public static final deprecated java.lang.String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern";
field public static final deprecated java.lang.String LOGGING_ID = "logging_id";
field public static final java.lang.String MODE_RINGER = "mode_ringer";
field public static final deprecated java.lang.String MODE_RINGER = "mode_ringer";
field public static final java.lang.String MODE_RINGER_STREAMS_AFFECTED = "mode_ringer_streams_affected";
field public static final java.lang.String MUTE_STREAMS_AFFECTED = "mute_streams_affected";
field public static final deprecated java.lang.String NETWORK_PREFERENCE = "network_preference";

View File

@@ -934,6 +934,7 @@ public final class Settings {
MOVED_TO_GLOBAL.add(Settings.Global.POWER_SOUNDS_ENABLED);
MOVED_TO_GLOBAL.add(Settings.Global.STAY_ON_WHILE_PLUGGED_IN);
MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SLEEP_POLICY);
MOVED_TO_GLOBAL.add(Settings.Global.MODE_RINGER);
}
private static void lazyInitCache() {
@@ -1497,6 +1498,12 @@ public final class Settings {
@Deprecated
public static final int WIFI_SLEEP_POLICY_NEVER = Global.WIFI_SLEEP_POLICY_NEVER;
/**
* @deprecated Use {@link android.provider.Settings.Global#MODE_RINGER} instead
*/
@Deprecated
public static final String MODE_RINGER = Global.MODE_RINGER;
//TODO: deprecate static IP constants
/**
* Whether to use static IP and other static network attributes.
@@ -1666,13 +1673,6 @@ public final class Settings {
public static final String ALWAYS_FINISH_ACTIVITIES =
"always_finish_activities";
/**
* Ringer mode. This is used internally, changing this value will not
* change the ringer mode. See AudioManager.
*/
public static final String MODE_RINGER = "mode_ringer";
/**
* Determines which streams are affected by ringer mode changes. The
* stream type's bit should be set to 1 if it should be muted when going
@@ -5738,7 +5738,11 @@ public final class Settings {
*/
public static final String WTF_IS_FATAL = "wtf_is_fatal";
/**
* Ringer mode. This is used internally, changing this value will not
* change the ringer mode. See AudioManager.
*/
public static final String MODE_RINGER = "mode_ringer";
// Populated lazily, guarded by class object:

View File

@@ -480,6 +480,7 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
intentFilter.addAction(Intent.ACTION_BOOT_COMPLETED);
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
intentFilter.addAction(Intent.ACTION_USER_SWITCHED);
// Register a configuration change listener only if requested by system properties
// to monitor orientation changes (off by default)
@@ -608,7 +609,7 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
final ContentResolver cr = mContentResolver;
int ringerModeFromSettings =
System.getInt(cr, System.MODE_RINGER, AudioManager.RINGER_MODE_NORMAL);
Settings.Global.getInt(cr, System.MODE_RINGER, AudioManager.RINGER_MODE_NORMAL);
int ringerMode = ringerModeFromSettings;
// sanity check in case the settings are restored from a device with incompatible
// ringer modes
@@ -619,7 +620,7 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
ringerMode = AudioManager.RINGER_MODE_SILENT;
}
if (ringerMode != ringerModeFromSettings) {
System.putInt(cr, System.MODE_RINGER, ringerMode);
Settings.Global.putInt(cr, System.MODE_RINGER, ringerMode);
}
synchronized(mSettingsLock) {
mRingerMode = ringerMode;
@@ -638,23 +639,30 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
// make sure settings for ringer mode are consistent with device type: non voice capable
// devices (tablets) include media stream in silent mode whereas phones don't.
mRingerModeAffectedStreams = Settings.System.getInt(cr,
mRingerModeAffectedStreams = Settings.System.getIntForUser(cr,
Settings.System.MODE_RINGER_STREAMS_AFFECTED,
((1 << AudioSystem.STREAM_RING)|(1 << AudioSystem.STREAM_NOTIFICATION)|
(1 << AudioSystem.STREAM_SYSTEM)|(1 << AudioSystem.STREAM_SYSTEM_ENFORCED)));
(1 << AudioSystem.STREAM_SYSTEM)|(1 << AudioSystem.STREAM_SYSTEM_ENFORCED)),
UserHandle.USER_CURRENT);
if (mVoiceCapable) {
mRingerModeAffectedStreams &= ~(1 << AudioSystem.STREAM_MUSIC);
} else {
mRingerModeAffectedStreams |= (1 << AudioSystem.STREAM_MUSIC);
}
Settings.System.putInt(cr,
Settings.System.MODE_RINGER_STREAMS_AFFECTED, mRingerModeAffectedStreams);
Settings.System.putIntForUser(cr,
Settings.System.MODE_RINGER_STREAMS_AFFECTED,
mRingerModeAffectedStreams,
UserHandle.USER_CURRENT);
mMuteAffectedStreams = System.getInt(cr,
mMuteAffectedStreams = System.getIntForUser(cr,
System.MUTE_STREAMS_AFFECTED,
((1 << AudioSystem.STREAM_MUSIC)|(1 << AudioSystem.STREAM_RING)|(1 << AudioSystem.STREAM_SYSTEM)));
((1 << AudioSystem.STREAM_MUSIC)|
(1 << AudioSystem.STREAM_RING)|
(1 << AudioSystem.STREAM_SYSTEM)),
UserHandle.USER_CURRENT);
boolean masterMute = System.getInt(cr, System.VOLUME_MASTER_MUTE, 0) == 1;
boolean masterMute = System.getIntForUser(cr, System.VOLUME_MASTER_MUTE,
0, UserHandle.USER_CURRENT) == 1;
AudioSystem.setMasterMute(masterMute);
broadcastMasterMuteStatus(masterMute);
@@ -1237,8 +1245,8 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
private void restoreMasterVolume() {
if (mUseMasterVolume) {
float volume = Settings.System.getFloat(mContentResolver,
Settings.System.VOLUME_MASTER, -1.0f);
float volume = Settings.System.getFloatForUser(mContentResolver,
Settings.System.VOLUME_MASTER, -1.0f, UserHandle.USER_CURRENT);
if (volume >= 0.0f) {
AudioSystem.setMasterVolume(volume);
}
@@ -1674,6 +1682,10 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
/** @see AudioManager#reloadAudioSettings() */
public void reloadAudioSettings() {
readAudioSettings(false /*userSwitch*/);
}
private void readAudioSettings(boolean userSwitch) {
// restore ringer mode, ringer mode affected streams, mute affected streams and vibrate settings
readPersistedSettings();
@@ -1682,6 +1694,10 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
for (int streamType = 0; streamType < numStreamTypes; streamType++) {
VolumeStreamState streamState = mStreamStates[streamType];
if (userSwitch && mStreamVolumeAlias[streamType] == AudioSystem.STREAM_MUSIC) {
continue;
}
synchronized (streamState) {
streamState.readSettings();
@@ -2536,7 +2552,8 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
// device, continue otherwise
int defaultIndex = (device == AudioSystem.DEVICE_OUT_DEFAULT) ?
AudioManager.DEFAULT_STREAM_VOLUME[mStreamType] : -1;
int index = Settings.System.getInt(mContentResolver, name, defaultIndex);
int index = Settings.System.getIntForUser(
mContentResolver, name, defaultIndex, UserHandle.USER_CURRENT);
if (index == -1) {
continue;
}
@@ -2547,7 +2564,8 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
// or default index
defaultIndex = (index > 0) ?
index : AudioManager.DEFAULT_STREAM_VOLUME[mStreamType];
int lastAudibleIndex = Settings.System.getInt(mContentResolver, name, defaultIndex);
int lastAudibleIndex = Settings.System.getIntForUser(
mContentResolver, name, defaultIndex, UserHandle.USER_CURRENT);
// a last audible index of 0 should never be stored for ring and notification
// streams on phones (voice capable devices).
@@ -2959,19 +2977,21 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
int persistType,
int device) {
if ((persistType & PERSIST_CURRENT) != 0) {
System.putInt(mContentResolver,
System.putIntForUser(mContentResolver,
streamState.getSettingNameForDevice(false /* lastAudible */, device),
(streamState.getIndex(device, false /* lastAudible */) + 5)/ 10);
(streamState.getIndex(device, false /* lastAudible */) + 5)/ 10,
UserHandle.USER_CURRENT);
}
if ((persistType & PERSIST_LAST_AUDIBLE) != 0) {
System.putInt(mContentResolver,
System.putIntForUser(mContentResolver,
streamState.getSettingNameForDevice(true /* lastAudible */, device),
(streamState.getIndex(device, true /* lastAudible */) + 5) / 10);
(streamState.getIndex(device, true /* lastAudible */) + 5) / 10,
UserHandle.USER_CURRENT);
}
}
private void persistRingerMode(int ringerMode) {
System.putInt(mContentResolver, System.MODE_RINGER, ringerMode);
Settings.Global.putInt(mContentResolver, System.MODE_RINGER, ringerMode);
}
private void playSoundEffect(int effectType, int volume) {
@@ -3021,8 +3041,10 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
}
private void onHandlePersistMediaButtonReceiver(ComponentName receiver) {
Settings.System.putString(mContentResolver, Settings.System.MEDIA_BUTTON_RECEIVER,
receiver == null ? "" : receiver.flattenToString());
Settings.System.putStringForUser(mContentResolver,
Settings.System.MEDIA_BUTTON_RECEIVER,
receiver == null ? "" : receiver.flattenToString(),
UserHandle.USER_CURRENT);
}
private void cleanupPlayer(MediaPlayer mp) {
@@ -3058,13 +3080,17 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
break;
case MSG_PERSIST_MASTER_VOLUME:
Settings.System.putFloat(mContentResolver, Settings.System.VOLUME_MASTER,
(float)msg.arg1 / (float)1000.0);
Settings.System.putFloatForUser(mContentResolver,
Settings.System.VOLUME_MASTER,
(float)msg.arg1 / (float)1000.0,
UserHandle.USER_CURRENT);
break;
case MSG_PERSIST_MASTER_VOLUME_MUTE:
Settings.System.putInt(mContentResolver, Settings.System.VOLUME_MASTER_MUTE,
msg.arg1);
Settings.System.putIntForUser(mContentResolver,
Settings.System.VOLUME_MASTER_MUTE,
msg.arg1,
UserHandle.USER_CURRENT);
break;
case MSG_PERSIST_RINGER_MODE:
@@ -3248,10 +3274,11 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
// and mRingerModeAffectedStreams, so will leave this synchronized for now.
// mRingerModeMutedStreams and mMuteAffectedStreams are safe (only accessed once).
synchronized (mSettingsLock) {
int ringerModeAffectedStreams = Settings.System.getInt(mContentResolver,
int ringerModeAffectedStreams = Settings.System.getIntForUser(mContentResolver,
Settings.System.MODE_RINGER_STREAMS_AFFECTED,
((1 << AudioSystem.STREAM_RING)|(1 << AudioSystem.STREAM_NOTIFICATION)|
(1 << AudioSystem.STREAM_SYSTEM)|(1 << AudioSystem.STREAM_SYSTEM_ENFORCED)));
(1 << AudioSystem.STREAM_SYSTEM)|(1 << AudioSystem.STREAM_SYSTEM_ENFORCED)),
UserHandle.USER_CURRENT);
if (mVoiceCapable) {
ringerModeAffectedStreams &= ~(1 << AudioSystem.STREAM_MUSIC);
} else {
@@ -3673,6 +3700,15 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
AudioSystem.setParameters("screen_state=off");
} else if (action.equalsIgnoreCase(Intent.ACTION_CONFIGURATION_CHANGED)) {
handleConfigurationChanged(context);
} else if (action.equals(Intent.ACTION_USER_SWITCHED)) {
readAudioSettings(true /*userSwitch*/);
// preserve STREAM_MUSIC volume from one user to the next.
sendMsg(mAudioHandler,
MSG_SET_ALL_VOLUMES,
SENDMSG_QUEUE,
0,
0,
mStreamStates[AudioSystem.STREAM_MUSIC], 0);
}
}
}
@@ -4547,8 +4583,8 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
* Restore remote control receiver from the system settings.
*/
private void restoreMediaButtonReceiver() {
String receiverName = Settings.System.getString(mContentResolver,
Settings.System.MEDIA_BUTTON_RECEIVER);
String receiverName = Settings.System.getStringForUser(mContentResolver,
Settings.System.MEDIA_BUTTON_RECEIVER, UserHandle.USER_CURRENT);
if ((null != receiverName) && !receiverName.isEmpty()) {
ComponentName eventReceiver = ComponentName.unflattenFromString(receiverName);
// construct a PendingIntent targeted to the restored component name