summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android/src/org/rockbox/RockboxPCM.java16
-rw-r--r--apps/misc.c11
2 files changed, 23 insertions, 4 deletions
diff --git a/android/src/org/rockbox/RockboxPCM.java b/android/src/org/rockbox/RockboxPCM.java
index 7d01da6150..47bc42f976 100644
--- a/android/src/org/rockbox/RockboxPCM.java
+++ b/android/src/org/rockbox/RockboxPCM.java
@@ -85,9 +85,19 @@ public class RockboxPCM extends AudioTrack
85 pcmrange = getMaxVolume() - minpcmvolume; 85 pcmrange = getMaxVolume() - minpcmvolume;
86 86
87 setupVolumeHandler(); 87 setupVolumeHandler();
88 postVolume(audiomanager.getStreamVolume(streamtype));
88 } 89 }
89 90
90 private native void postVolumeChangedEvent(int volume); 91 private native void postVolumeChangedEvent(int volume);
92
93 private void postVolume(int volume)
94 {
95 int rbvolume = ((maxstreamvolume - volume) * -99) /
96 maxstreamvolume;
97 LOG("java:postVolumeChangedEvent, avol "+volume+" rbvol "+rbvolume);
98 postVolumeChangedEvent(rbvolume);
99 }
100
91 private void setupVolumeHandler() 101 private void setupVolumeHandler()
92 { 102 {
93 BroadcastReceiver broadcastReceiver = new BroadcastReceiver() 103 BroadcastReceiver broadcastReceiver = new BroadcastReceiver()
@@ -105,9 +115,7 @@ public class RockboxPCM extends AudioTrack
105 volume != setstreamvolume && 115 volume != setstreamvolume &&
106 rbservice.isRockboxRunning()) 116 rbservice.isRockboxRunning())
107 { 117 {
108 int rbvolume = ((maxstreamvolume - volume) * -99) / 118 postVolume(volume);
109 maxstreamvolume;
110 postVolumeChangedEvent(rbvolume);
111 } 119 }
112 } 120 }
113 }; 121 };
@@ -190,6 +198,7 @@ public class RockboxPCM extends AudioTrack
190 198
191 private void set_volume(int volume) 199 private void set_volume(int volume)
192 { 200 {
201 LOG("java:set_volume("+volume+")");
193 /* Rockbox 'volume' is 0..-990 deci-dB attenuation. 202 /* Rockbox 'volume' is 0..-990 deci-dB attenuation.
194 Android streams have rather low resolution volume control, 203 Android streams have rather low resolution volume control,
195 typically 8 or 15 steps. 204 typically 8 or 15 steps.
@@ -209,6 +218,7 @@ public class RockboxPCM extends AudioTrack
209 218
210 int oldstreamvolume = audiomanager.getStreamVolume(streamtype); 219 int oldstreamvolume = audiomanager.getStreamVolume(streamtype);
211 if (streamvolume != oldstreamvolume) { 220 if (streamvolume != oldstreamvolume) {
221 LOG("java:setStreamVolume("+streamvolume+")");
212 setstreamvolume = streamvolume; 222 setstreamvolume = streamvolume;
213 audiomanager.setStreamVolume(streamtype, streamvolume, 0); 223 audiomanager.setStreamVolume(streamtype, streamvolume, 0);
214 } 224 }
diff --git a/apps/misc.c b/apps/misc.c
index 0d25e2aa96..e4a5c42d0d 100644
--- a/apps/misc.c
+++ b/apps/misc.c
@@ -58,6 +58,8 @@
58#include "yesno.h" 58#include "yesno.h"
59#include "viewport.h" 59#include "viewport.h"
60 60
61#include "debug.h"
62
61#if CONFIG_TUNER 63#if CONFIG_TUNER
62#include "radio.h" 64#include "radio.h"
63#endif 65#endif
@@ -632,9 +634,16 @@ long default_event_handler_ex(long event, void (*callback)(void *), void *parame
632#if (CONFIG_PLATFORM & PLATFORM_HOSTED) && defined(PLATFORM_HAS_VOLUME_CHANGE) 634#if (CONFIG_PLATFORM & PLATFORM_HOSTED) && defined(PLATFORM_HAS_VOLUME_CHANGE)
633 case SYS_VOLUME_CHANGED: 635 case SYS_VOLUME_CHANGED:
634 { 636 {
637 static bool firstvolume = true;
635 int volume = hosted_get_volume(); 638 int volume = hosted_get_volume();
636 if (global_settings.volume != volume) 639 DEBUGF("SYS_VOLUME_CHANGED: %d\n", volume);
640 if (global_settings.volume != volume) {
637 global_settings.volume = volume; 641 global_settings.volume = volume;
642 if (firstvolume) {
643 setvol();
644 firstvolume = false;
645 }
646 }
638 return 0; 647 return 0;
639 } 648 }
640#endif 649#endif