Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c78752f authored by Eric Laurent's avatar Eric Laurent
Browse files

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
parent 2411c336
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -239,9 +239,7 @@ public class VolumePreference extends SeekBarDialogPreference implements
            public void onChange(boolean selfChange) {
                super.onChange(selfChange);
                if (mSeekBar != null && mAudioManager != null) {
                    int volume = mAudioManager.isStreamMute(mStreamType) ?
                            mAudioManager.getLastAudibleStreamVolume(mStreamType)
                            : mAudioManager.getStreamVolume(mStreamType);
                    int volume = mAudioManager.getStreamVolume(mStreamType);
                    mSeekBar.setProgress(volume);
                }
            }
+24 −25
Original line number Diff line number Diff line
@@ -296,41 +296,33 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie

    private boolean isMuted(int streamType) {
        if (streamType == STREAM_MASTER) {
            return mAudioService.isMasterMute();
            return mAudioManager.isMasterMute();
        } else {
            return mAudioService.isStreamMute(streamType);
            return mAudioManager.isStreamMute(streamType);
        }
    }

    private int getStreamMaxVolume(int streamType) {
        if (streamType == STREAM_MASTER) {
            return mAudioService.getMasterMaxVolume();
            return mAudioManager.getMasterMaxVolume();
        } else {
            return mAudioService.getStreamMaxVolume(streamType);
            return mAudioManager.getStreamMaxVolume(streamType);
        }
    }

    private int getStreamVolume(int streamType) {
        if (streamType == STREAM_MASTER) {
            return mAudioService.getMasterVolume();
            return mAudioManager.getMasterVolume();
        } else {
            return mAudioService.getStreamVolume(streamType);
            return mAudioManager.getStreamVolume(streamType);
        }
    }

    private void setStreamVolume(int streamType, int index, int flags) {
        if (streamType == STREAM_MASTER) {
            mAudioService.setMasterVolume(index, flags);
            mAudioManager.setMasterVolume(index, flags);
        } else {
            mAudioService.setStreamVolume(streamType, index, flags);
        }
    }

    private int getLastAudibleStreamVolume(int streamType) {
        if (streamType == STREAM_MASTER) {
            return mAudioService.getLastAudibleMasterVolume();
        } else {
            return mAudioService.getLastAudibleStreamVolume(streamType);
            mAudioManager.setStreamVolume(streamType, index, flags);
        }
    }

@@ -399,13 +391,18 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie

    /** Update the mute and progress state of a slider */
    private void updateSlider(StreamControl sc) {
        sc.seekbarView.setProgress(getLastAudibleStreamVolume(sc.streamType));
        sc.seekbarView.setProgress(getStreamVolume(sc.streamType));
        final boolean muted = isMuted(sc.streamType);
        sc.icon.setImageResource(muted ? sc.iconMuteRes : sc.iconRes);
        if (sc.streamType == AudioManager.STREAM_RING && muted
                && mAudioManager.shouldVibrate(AudioManager.VIBRATE_TYPE_RINGER)) {
        if (sc.streamType == AudioManager.STREAM_RING &&
                mAudioManager.getRingerMode() == AudioManager.RINGER_MODE_VIBRATE) {
            sc.icon.setImageResource(R.drawable.ic_audio_ring_notif_vibrate);
        }
        if (sc.streamType != mAudioManager.getMasterStreamType() && muted) {
            sc.seekbarView.setEnabled(false);
        } else {
            sc.seekbarView.setEnabled(true);
        }
    }

    private boolean isExpanded() {
@@ -510,9 +507,7 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie
    }

    protected void onShowVolumeChanged(int streamType, int flags) {
        int index = isMuted(streamType) ?
                getLastAudibleStreamVolume(streamType)
                : getStreamVolume(streamType);
        int index = getStreamVolume(streamType);

        mRingIsSilent = false;

@@ -592,6 +587,11 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie
                sc.seekbarView.setMax(max);
            }
            sc.seekbarView.setProgress(index);
            if (streamType != mAudioManager.getMasterStreamType() && isMuted(streamType)) {
                sc.seekbarView.setEnabled(false);
            } else {
                sc.seekbarView.setEnabled(true);
            }
        }

        if (!mDialog.isShowing()) {
@@ -607,8 +607,7 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie
        // Do a little vibrate if applicable (only when going into vibrate mode)
        if ((flags & AudioManager.FLAG_VIBRATE) != 0 &&
                mAudioService.isStreamAffectedByRingerMode(streamType) &&
                mAudioService.getRingerMode() == AudioManager.RINGER_MODE_VIBRATE &&
                mAudioService.shouldVibrate(AudioManager.VIBRATE_TYPE_RINGER)) {
                mAudioManager.getRingerMode() == AudioManager.RINGER_MODE_VIBRATE) {
            sendMessageDelayed(obtainMessage(MSG_VIBRATE), VIBRATE_DELAY);
        }
    }
@@ -646,7 +645,7 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie
    protected void onVibrate() {

        // Make sure we ended up in vibrate ringer mode
        if (mAudioService.getRingerMode() != AudioManager.RINGER_MODE_VIBRATE) {
        if (mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_VIBRATE) {
            return;
        }

+4 −0
Original line number Diff line number Diff line
@@ -701,6 +701,10 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
            // Check if the ringer mode changes with this volume adjustment. If
            // it does, it will handle adjusting the volume, so we won't below
            adjustVolume = checkForRingerModeChange(aliasIndex, direction, step);
            if ((streamTypeAlias == getMasterStreamType()) &&
                    (mRingerMode == AudioManager.RINGER_MODE_SILENT)) {
                streamState.setLastAudibleIndex(0, device);
            }
        }

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