Merge "AudioService: improve initial safe volume delay" into jb-mr1.1-dev
This commit is contained in:
@ -5314,6 +5314,12 @@ public final class Settings {
|
|||||||
*/
|
*/
|
||||||
public static final String DOCK_AUDIO_MEDIA_ENABLED = "dock_audio_media_enabled";
|
public static final String DOCK_AUDIO_MEDIA_ENABLED = "dock_audio_media_enabled";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Persisted safe headphone volume management state by AudioService
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final String AUDIO_SAFE_VOLUME_STATE = "audio_safe_volume_state";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Settings to backup. This is here so that it's in the same place as the settings
|
* Settings to backup. This is here so that it's in the same place as the settings
|
||||||
* keys and easy to update.
|
* keys and easy to update.
|
||||||
|
@ -157,6 +157,7 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
|
|||||||
private static final int MSG_BROADCAST_AUDIO_BECOMING_NOISY = 25;
|
private static final int MSG_BROADCAST_AUDIO_BECOMING_NOISY = 25;
|
||||||
private static final int MSG_CONFIGURE_SAFE_MEDIA_VOLUME = 26;
|
private static final int MSG_CONFIGURE_SAFE_MEDIA_VOLUME = 26;
|
||||||
private static final int MSG_CONFIGURE_SAFE_MEDIA_VOLUME_FORCED = 27;
|
private static final int MSG_CONFIGURE_SAFE_MEDIA_VOLUME_FORCED = 27;
|
||||||
|
private static final int MSG_PERSIST_SAFE_VOLUME_STATE = 28;
|
||||||
|
|
||||||
// flags for MSG_PERSIST_VOLUME indicating if current and/or last audible volume should be
|
// flags for MSG_PERSIST_VOLUME indicating if current and/or last audible volume should be
|
||||||
// persisted
|
// persisted
|
||||||
@ -481,6 +482,14 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
|
|||||||
null,
|
null,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
mSafeMediaVolumeState = new Integer(Settings.Global.getInt(mContentResolver,
|
||||||
|
Settings.Global.AUDIO_SAFE_VOLUME_STATE,
|
||||||
|
SAFE_MEDIA_VOLUME_NOT_CONFIGURED));
|
||||||
|
// The default safe volume index read here will be replaced by the actual value when
|
||||||
|
// the mcc is read by onConfigureSafeVolume()
|
||||||
|
mSafeMediaVolumeIndex = mContext.getResources().getInteger(
|
||||||
|
com.android.internal.R.integer.config_safe_media_volume_index) * 10;
|
||||||
|
|
||||||
readPersistedSettings();
|
readPersistedSettings();
|
||||||
mSettingsObserver = new SettingsObserver();
|
mSettingsObserver = new SettingsObserver();
|
||||||
updateStreamVolumeAlias(false /*updateVolumes*/);
|
updateStreamVolumeAlias(false /*updateVolumes*/);
|
||||||
@ -488,8 +497,6 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
|
|||||||
|
|
||||||
mMediaServerOk = true;
|
mMediaServerOk = true;
|
||||||
|
|
||||||
mSafeMediaVolumeState = new Integer(SAFE_MEDIA_VOLUME_NOT_CONFIGURED);
|
|
||||||
|
|
||||||
// Call setRingerModeInt() to apply correct mute
|
// Call setRingerModeInt() to apply correct mute
|
||||||
// state on streams affected by ringer mode.
|
// state on streams affected by ringer mode.
|
||||||
mRingerModeMutedStreams = 0;
|
mRingerModeMutedStreams = 0;
|
||||||
@ -822,14 +829,15 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
|
|||||||
// convert one UI step (+/-1) into a number of internal units on the stream alias
|
// convert one UI step (+/-1) into a number of internal units on the stream alias
|
||||||
int step = rescaleIndex(10, streamType, streamTypeAlias);
|
int step = rescaleIndex(10, streamType, streamTypeAlias);
|
||||||
|
|
||||||
if ((direction == AudioManager.ADJUST_RAISE) &&
|
|
||||||
!checkSafeMediaVolume(streamTypeAlias, aliasIndex + step, device)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int index;
|
int index;
|
||||||
int oldIndex;
|
int oldIndex;
|
||||||
|
|
||||||
|
if ((direction == AudioManager.ADJUST_RAISE) &&
|
||||||
|
!checkSafeMediaVolume(streamTypeAlias, aliasIndex + step, device)) {
|
||||||
|
index = mStreamStates[streamType].getIndex(device,
|
||||||
|
(streamState.muteCount() != 0) /* lastAudible */);
|
||||||
|
oldIndex = index;
|
||||||
|
} else {
|
||||||
flags &= ~AudioManager.FLAG_FIXED_VOLUME;
|
flags &= ~AudioManager.FLAG_FIXED_VOLUME;
|
||||||
if ((streamTypeAlias == AudioSystem.STREAM_MUSIC) &&
|
if ((streamTypeAlias == AudioSystem.STREAM_MUSIC) &&
|
||||||
((device & mFixedVolumeDevices) != 0)) {
|
((device & mFixedVolumeDevices) != 0)) {
|
||||||
@ -888,6 +896,7 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
|
|||||||
index = mStreamStates[streamType].getIndex(device, false /* lastAudible */);
|
index = mStreamStates[streamType].getIndex(device, false /* lastAudible */);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
sendVolumeUpdate(streamType, oldIndex, index, flags);
|
sendVolumeUpdate(streamType, oldIndex, index, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2306,13 +2315,31 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
|
|||||||
com.android.internal.R.integer.config_safe_media_volume_index) * 10;
|
com.android.internal.R.integer.config_safe_media_volume_index) * 10;
|
||||||
boolean safeMediaVolumeEnabled = mContext.getResources().getBoolean(
|
boolean safeMediaVolumeEnabled = mContext.getResources().getBoolean(
|
||||||
com.android.internal.R.bool.config_safe_media_volume_enabled);
|
com.android.internal.R.bool.config_safe_media_volume_enabled);
|
||||||
|
|
||||||
|
// The persisted state is either "disabled" or "active": this is the state applied
|
||||||
|
// next time we boot and cannot be "inactive"
|
||||||
|
int persistedState;
|
||||||
if (safeMediaVolumeEnabled) {
|
if (safeMediaVolumeEnabled) {
|
||||||
|
persistedState = SAFE_MEDIA_VOLUME_ACTIVE;
|
||||||
|
// The state can already be "inactive" here if the user has forced it before
|
||||||
|
// the 30 seconds timeout for forced configuration. In this case we don't reset
|
||||||
|
// it to "active".
|
||||||
|
if (mSafeMediaVolumeState != SAFE_MEDIA_VOLUME_INACTIVE) {
|
||||||
mSafeMediaVolumeState = SAFE_MEDIA_VOLUME_ACTIVE;
|
mSafeMediaVolumeState = SAFE_MEDIA_VOLUME_ACTIVE;
|
||||||
enforceSafeMediaVolume();
|
enforceSafeMediaVolume();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
persistedState = SAFE_MEDIA_VOLUME_DISABLED;
|
||||||
mSafeMediaVolumeState = SAFE_MEDIA_VOLUME_DISABLED;
|
mSafeMediaVolumeState = SAFE_MEDIA_VOLUME_DISABLED;
|
||||||
}
|
}
|
||||||
mMcc = mcc;
|
mMcc = mcc;
|
||||||
|
sendMsg(mAudioHandler,
|
||||||
|
MSG_PERSIST_SAFE_VOLUME_STATE,
|
||||||
|
SENDMSG_QUEUE,
|
||||||
|
persistedState,
|
||||||
|
0,
|
||||||
|
null,
|
||||||
|
0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3224,6 +3251,12 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
|
|||||||
AudioSystem.setForceUse(usage, config);
|
AudioSystem.setForceUse(usage, config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void onPersistSafeVolumeState(int state) {
|
||||||
|
Settings.Global.putInt(mContentResolver,
|
||||||
|
Settings.Global.AUDIO_SAFE_VOLUME_STATE,
|
||||||
|
state);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleMessage(Message msg) {
|
public void handleMessage(Message msg) {
|
||||||
|
|
||||||
@ -3433,6 +3466,9 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
|
|||||||
case MSG_CONFIGURE_SAFE_MEDIA_VOLUME:
|
case MSG_CONFIGURE_SAFE_MEDIA_VOLUME:
|
||||||
onConfigureSafeVolume((msg.what == MSG_CONFIGURE_SAFE_MEDIA_VOLUME_FORCED));
|
onConfigureSafeVolume((msg.what == MSG_CONFIGURE_SAFE_MEDIA_VOLUME_FORCED));
|
||||||
break;
|
break;
|
||||||
|
case MSG_PERSIST_SAFE_VOLUME_STATE:
|
||||||
|
onPersistSafeVolumeState(msg.arg1);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user