From d39f86f3c886e91377edeab3ffe9c4432e115cc0 Mon Sep 17 00:00:00 2001 From: MrYoranimo Date: Thu, 11 Apr 2024 15:53:10 +0200 Subject: [PATCH] Xiaomi: fix music volume command only increasing volume Earlier Xiaomi devices would send either 0 or 100 for the requested volume to indicate whether the app should increase or decrease the phone's volume. Newer devices send the volume to change to, based on the known current volume. We therefore need to check whether the device increased or decreased the volume based on the current volume ourselves in order to determine which event we want to fire. --- .../devices/xiaomi/services/XiaomiMusicService.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiMusicService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiMusicService.java index 129c3d603..cae01839b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiMusicService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiMusicService.java @@ -85,13 +85,18 @@ public class XiaomiMusicService extends AbstractXiaomiService { case BUTTON_NEXT: deviceEventMusicControl.event = GBDeviceEventMusicControl.Event.NEXT; break; - case BUTTON_VOLUME: - if (music.getMediaKey().getVolume() > 0) { + case BUTTON_VOLUME: { + final int requestedVolume = music.getMediaKey().getVolume(); + final int currentVolume = MediaManager.getPhoneVolume(getSupport().getContext()); + + if (requestedVolume > currentVolume) { deviceEventMusicControl.event = GBDeviceEventMusicControl.Event.VOLUMEUP; } else { deviceEventMusicControl.event = GBDeviceEventMusicControl.Event.VOLUMEDOWN; } + break; + } default: LOG.warn("Unexpected media button key {}", music.getMediaKey().getKey()); return;