Skip to content

Commit 8c78752

Browse files
author
Eric Laurent
committed
Implement new volume display policy.
Whenever a stream type is muted, the progress bar in volume panel is at 0. If a stream is muted by ringer mode and does not control ringer mode, the progress bar is disabled. Pressing VOL- when in vibrate or silent mode resets the last audible volume of ringtone stream (music strem on tablets) to 0. VolumePanel implementation: - Always prefer AudioManager APIs over AudioService APIs when available on both. - Do not use AudioManager.shouldVibrate() (deprecated). Change-Id: I57fcb19ada4e8d729b6b41d668496562ebe340c3
1 parent 2411c33 commit 8c78752

File tree

3 files changed

+29
-28
lines changed

3 files changed

+29
-28
lines changed

core/java/android/preference/VolumePreference.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Runnable {
239239
public void onChange(boolean selfChange) {
240240
super.onChange(selfChange);
241241
if (mSeekBar != null && mAudioManager != null) {
242-
int volume = mAudioManager.isStreamMute(mStreamType) ?
243-
mAudioManager.getLastAudibleStreamVolume(mStreamType)
244-
: mAudioManager.getStreamVolume(mStreamType);
242+
int volume = mAudioManager.getStreamVolume(mStreamType);
245243
mSeekBar.setProgress(volume);
246244
}
247245
}

core/java/android/view/VolumePanel.java

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -296,41 +296,33 @@ public void onReceive(Context context, Intent intent) {
296296

297297
private boolean isMuted(int streamType) {
298298
if (streamType == STREAM_MASTER) {
299-
return mAudioService.isMasterMute();
299+
return mAudioManager.isMasterMute();
300300
} else {
301-
return mAudioService.isStreamMute(streamType);
301+
return mAudioManager.isStreamMute(streamType);
302302
}
303303
}
304304

305305
private int getStreamMaxVolume(int streamType) {
306306
if (streamType == STREAM_MASTER) {
307-
return mAudioService.getMasterMaxVolume();
307+
return mAudioManager.getMasterMaxVolume();
308308
} else {
309-
return mAudioService.getStreamMaxVolume(streamType);
309+
return mAudioManager.getStreamMaxVolume(streamType);
310310
}
311311
}
312312

313313
private int getStreamVolume(int streamType) {
314314
if (streamType == STREAM_MASTER) {
315-
return mAudioService.getMasterVolume();
315+
return mAudioManager.getMasterVolume();
316316
} else {
317-
return mAudioService.getStreamVolume(streamType);
317+
return mAudioManager.getStreamVolume(streamType);
318318
}
319319
}
320320

321321
private void setStreamVolume(int streamType, int index, int flags) {
322322
if (streamType == STREAM_MASTER) {
323-
mAudioService.setMasterVolume(index, flags);
323+
mAudioManager.setMasterVolume(index, flags);
324324
} else {
325-
mAudioService.setStreamVolume(streamType, index, flags);
326-
}
327-
}
328-
329-
private int getLastAudibleStreamVolume(int streamType) {
330-
if (streamType == STREAM_MASTER) {
331-
return mAudioService.getLastAudibleMasterVolume();
332-
} else {
333-
return mAudioService.getLastAudibleStreamVolume(streamType);
325+
mAudioManager.setStreamVolume(streamType, index, flags);
334326
}
335327
}
336328

@@ -399,13 +391,18 @@ private void addOtherVolumes() {
399391

400392
/** Update the mute and progress state of a slider */
401393
private void updateSlider(StreamControl sc) {
402-
sc.seekbarView.setProgress(getLastAudibleStreamVolume(sc.streamType));
394+
sc.seekbarView.setProgress(getStreamVolume(sc.streamType));
403395
final boolean muted = isMuted(sc.streamType);
404396
sc.icon.setImageResource(muted ? sc.iconMuteRes : sc.iconRes);
405-
if (sc.streamType == AudioManager.STREAM_RING && muted
406-
&& mAudioManager.shouldVibrate(AudioManager.VIBRATE_TYPE_RINGER)) {
397+
if (sc.streamType == AudioManager.STREAM_RING &&
398+
mAudioManager.getRingerMode() == AudioManager.RINGER_MODE_VIBRATE) {
407399
sc.icon.setImageResource(R.drawable.ic_audio_ring_notif_vibrate);
408400
}
401+
if (sc.streamType != mAudioManager.getMasterStreamType() && muted) {
402+
sc.seekbarView.setEnabled(false);
403+
} else {
404+
sc.seekbarView.setEnabled(true);
405+
}
409406
}
410407

411408
private boolean isExpanded() {
@@ -510,9 +507,7 @@ protected void onMuteChanged(int streamType, int flags) {
510507
}
511508

512509
protected void onShowVolumeChanged(int streamType, int flags) {
513-
int index = isMuted(streamType) ?
514-
getLastAudibleStreamVolume(streamType)
515-
: getStreamVolume(streamType);
510+
int index = getStreamVolume(streamType);
516511

517512
mRingIsSilent = false;
518513

@@ -592,6 +587,11 @@ protected void onShowVolumeChanged(int streamType, int flags) {
592587
sc.seekbarView.setMax(max);
593588
}
594589
sc.seekbarView.setProgress(index);
590+
if (streamType != mAudioManager.getMasterStreamType() && isMuted(streamType)) {
591+
sc.seekbarView.setEnabled(false);
592+
} else {
593+
sc.seekbarView.setEnabled(true);
594+
}
595595
}
596596

597597
if (!mDialog.isShowing()) {
@@ -607,8 +607,7 @@ protected void onShowVolumeChanged(int streamType, int flags) {
607607
// Do a little vibrate if applicable (only when going into vibrate mode)
608608
if ((flags & AudioManager.FLAG_VIBRATE) != 0 &&
609609
mAudioService.isStreamAffectedByRingerMode(streamType) &&
610-
mAudioService.getRingerMode() == AudioManager.RINGER_MODE_VIBRATE &&
611-
mAudioService.shouldVibrate(AudioManager.VIBRATE_TYPE_RINGER)) {
610+
mAudioManager.getRingerMode() == AudioManager.RINGER_MODE_VIBRATE) {
612611
sendMessageDelayed(obtainMessage(MSG_VIBRATE), VIBRATE_DELAY);
613612
}
614613
}
@@ -646,7 +645,7 @@ protected void onStopSounds() {
646645
protected void onVibrate() {
647646

648647
// Make sure we ended up in vibrate ringer mode
649-
if (mAudioService.getRingerMode() != AudioManager.RINGER_MODE_VIBRATE) {
648+
if (mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_VIBRATE) {
650649
return;
651650
}
652651

media/java/android/media/AudioService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -701,6 +701,10 @@ public void adjustStreamVolume(int streamType, int direction, int flags) {
701701
// Check if the ringer mode changes with this volume adjustment. If
702702
// it does, it will handle adjusting the volume, so we won't below
703703
adjustVolume = checkForRingerModeChange(aliasIndex, direction, step);
704+
if ((streamTypeAlias == getMasterStreamType()) &&
705+
(mRingerMode == AudioManager.RINGER_MODE_SILENT)) {
706+
streamState.setLastAudibleIndex(0, device);
707+
}
704708
}
705709

706710
// If stream is muted, adjust last audible index only

0 commit comments

Comments
 (0)