From 93646b4b136cf85c0566d4e3d931177771a9c985 Mon Sep 17 00:00:00 2001 From: Kushagra Golash Date: Mon, 27 Apr 2026 14:18:39 +0400 Subject: [PATCH] fix: route short-press volume to active stream during calls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When Button Remap consumes the volume DOWN event via FLAG_REQUEST_FILTER_KEY_EVENTS and re-simulates short-press behaviour on UP, three call sites passed STREAM_MUSIC explicitly, which overrode Android's default stream routing during calls, ringing, and other active-stream contexts. Switch each site to adjustSuggestedStreamVolume with USE_DEFAULT_STREAM_TYPE — the documented API for "do what hardware volume keys would normally do". The system then routes to STREAM_VOICE_CALL during calls, STREAM_RING while ringing, STREAM_MUSIC while music plays, and falls back to the suggested type when nothing is active. Sites changed: - ButtonRemapHandler.kt:153 accessibility-service path - InputEventListenerService.kt:171 Shizuku /dev/input, torch on - InputEventListenerService.kt:199 Shizuku /dev/input, torch off The toggleMediaVolume() helper at ButtonRemapHandler.kt:244,251 stays on STREAM_MUSIC by design — it backs the user-selected "Toggle media volume" mapping action. The ~500ms perceived latency that comes from the consume-then-replay design is structural to short-press handling and is not addressed here. --- .../essentials/services/InputEventListenerService.kt | 8 ++++---- .../essentials/services/handlers/ButtonRemapHandler.kt | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/services/InputEventListenerService.kt b/app/src/main/java/com/sameerasw/essentials/services/InputEventListenerService.kt index 4a7788a03..02d6edd9d 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/InputEventListenerService.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/InputEventListenerService.kt @@ -168,9 +168,9 @@ class InputEventListenerService : Service() { android.media.AudioManager.ADJUST_RAISE else android.media.AudioManager.ADJUST_LOWER - am.adjustStreamVolume( - android.media.AudioManager.STREAM_MUSIC, + am.adjustSuggestedStreamVolume( direction, + android.media.AudioManager.USE_DEFAULT_STREAM_TYPE, android.media.AudioManager.FLAG_SHOW_UI ) } @@ -196,9 +196,9 @@ class InputEventListenerService : Service() { android.media.AudioManager.ADJUST_RAISE else android.media.AudioManager.ADJUST_LOWER - am.adjustStreamVolume( - android.media.AudioManager.STREAM_MUSIC, + am.adjustSuggestedStreamVolume( dirKey, + android.media.AudioManager.USE_DEFAULT_STREAM_TYPE, android.media.AudioManager.FLAG_SHOW_UI ) } diff --git a/app/src/main/java/com/sameerasw/essentials/services/handlers/ButtonRemapHandler.kt b/app/src/main/java/com/sameerasw/essentials/services/handlers/ButtonRemapHandler.kt index b483194b9..93cf2a3a2 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/handlers/ButtonRemapHandler.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/handlers/ButtonRemapHandler.kt @@ -150,9 +150,9 @@ class ButtonRemapHandler( val am = service.getSystemService(Context.AUDIO_SERVICE) as AudioManager val direction = if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) AudioManager.ADJUST_RAISE else AudioManager.ADJUST_LOWER - am.adjustStreamVolume( - AudioManager.STREAM_MUSIC, + am.adjustSuggestedStreamVolume( direction, + AudioManager.USE_DEFAULT_STREAM_TYPE, AudioManager.FLAG_SHOW_UI ) }