Revert "Revert "AudioService: fix volume adjustment suppression""

This reverts commit f4580a24ab.

Reason for revert: someone submitted it by mistake

Bug: 156335617
Bug: 156010854
Test: see bug 156010854 for manual steps

Change-Id: Ia9e6b91eca5f47d35b54393cc7256fb54f58f276
This commit is contained in:
Jean-Michel Trivi
2020-05-13 18:25:34 +00:00
parent f4580a24ab
commit ac20057c01

View File

@@ -7369,10 +7369,32 @@ public class AudioService extends IAudioService.Stub
return false;
}
boolean suppress = false;
if (resolvedStream != AudioSystem.STREAM_MUSIC && mController != null) {
// Intended behavior:
// 1/ if the stream is not the default UI stream, do not suppress (as it is not involved
// in bringing up the UI)
// 2/ if the resolved and default stream is MUSIC, and media is playing, do not suppress
// 3/ otherwise suppress the first adjustments that occur during the "long press
// timeout" interval. Note this is true regardless of whether this is a "real long
// press" (where the user keeps pressing on the volume button), or repeated single
// presses (here we don't know if we are in a real long press, or repeated fast
// button presses).
// Once the long press timeout occurs (mNextLongPress reset to 0), do not suppress.
// Example: for a default and resolved stream of MUSIC, this allows modifying rapidly
// the volume when media is playing (whether by long press or repeated individual
// presses), or to bring up the volume UI when media is not playing, in order to make
// another change (e.g. switch ringer modes) without changing media volume.
if (resolvedStream == DEFAULT_VOL_STREAM_NO_PLAYBACK && mController != null) {
// never suppress media vol adjustement during media playback
if (resolvedStream == AudioSystem.STREAM_MUSIC
&& AudioSystem.isStreamActive(AudioSystem.STREAM_MUSIC, mLongPressTimeout))
{
// media is playing, adjust the volume right away
return false;
}
final long now = SystemClock.uptimeMillis();
if ((flags & AudioManager.FLAG_SHOW_UI) != 0 && !mVisible) {
// ui will become visible
// UI is not visible yet, adjustment is ignored
if (mNextLongPress < now) {
mNextLongPress = now + mLongPressTimeout;
}