From de1bd7c1b865ea77016d92ba6ddcadd70d2bc70d Mon Sep 17 00:00:00 2001 From: dangilcal Date: Fri, 17 Apr 2026 13:46:20 +0200 Subject: [PATCH] Fix sound overlapping and keystore path in pipeline --- .gitea/workflows/android.yml | 4 +-- .../java/com/helldivers/app/SoundManager.java | 30 +++++++++++++------ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/.gitea/workflows/android.yml b/.gitea/workflows/android.yml index 5a7eca4..136e065 100644 --- a/.gitea/workflows/android.yml +++ b/.gitea/workflows/android.yml @@ -23,9 +23,9 @@ jobs: - name: Setup Keystore run: | - echo "${{ secrets.ANDROIDKEYSTOREBASE64 }}" | base64 -d > helldivers.keystore + echo "${{ secrets.ANDROIDKEYSTOREBASE64 }}" | base64 -d > app/helldivers.keystore env: - ANDROIDKEYSTOREPATH: helldivers.keystore + ANDROIDKEYSTOREPATH: app/helldivers.keystore ANDROIDKEYSTOREPASS: ${{ secrets.ANDROIDKEYSTOREPASS }} ANDROIDKEYALIAS: ${{ secrets.ANDROIDKEYALIAS }} ANDROIDKEYPASS: ${{ secrets.ANDROIDKEYPASS }} diff --git a/app/src/main/java/com/helldivers/app/SoundManager.java b/app/src/main/java/com/helldivers/app/SoundManager.java index 6fbddbd..d944518 100644 --- a/app/src/main/java/com/helldivers/app/SoundManager.java +++ b/app/src/main/java/com/helldivers/app/SoundManager.java @@ -17,38 +17,44 @@ public class SoundManager { private ToneGenerator toneGenerator; private Handler handler; private boolean enabled = true; + private boolean isPlaying = false; + private Runnable stopToneRunnable; public SoundManager(Context context) { // ToneGenerator.STREAM_MUSIC para compatibilidad API 18+ toneGenerator = new ToneGenerator(AudioManager.STREAM_MUSIC, VOLUME); handler = new Handler(Looper.getMainLooper()); + stopToneRunnable = () -> isPlaying = false; } /** * Sonido de click de boton - tono corto y agudo */ public void playButtonClick() { - if (!enabled || toneGenerator == null) return; - // Tono DTMF 6 - sonido tipo boton tactil + if (!enabled || toneGenerator == null || isPlaying) return; + isPlaying = true; toneGenerator.startTone(ToneGenerator.TONE_DTMF_6, 80); + handler.postDelayed(stopToneRunnable, 80); } /** * Sonido de exito - secuencia ascendente */ public void playSuccess() { - if (!enabled || toneGenerator == null) return; - // Tono de confirmacion propositivo + if (!enabled || toneGenerator == null || isPlaying) return; + isPlaying = true; toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 150); + handler.postDelayed(stopToneRunnable, 150); } /** * Sonido de fallo - tono bajo grave */ public void playFailure() { - if (!enabled || toneGenerator == null) return; - // Tono de error + if (!enabled || toneGenerator == null || isPlaying) return; + isPlaying = true; toneGenerator.startTone(ToneGenerator.TONE_PROP_NACK, 200); + handler.postDelayed(stopToneRunnable, 200); } /** @@ -56,7 +62,8 @@ public class SoundManager { * Usa diferentes tonos DTMF para cada direccion */ public void playTone(int direction) { - if (!enabled || toneGenerator == null) return; + if (!enabled || toneGenerator == null || isPlaying) return; + isPlaying = true; int tone; switch (direction) { @@ -76,22 +83,27 @@ public class SoundManager { tone = ToneGenerator.TONE_DTMF_0; } toneGenerator.startTone(tone, 100); + handler.postDelayed(stopToneRunnable, 100); } /** * Tono de inicio de secuencia */ public void playSequenceStart() { - if (!enabled || toneGenerator == null) return; + if (!enabled || toneGenerator == null || isPlaying) return; + isPlaying = true; toneGenerator.startTone(ToneGenerator.TONE_SUP_DIAL, 100); + handler.postDelayed(stopToneRunnable, 100); } /** * Tono de alerta/peligro */ public void playAlert() { - if (!enabled || toneGenerator == null) return; + if (!enabled || toneGenerator == null || isPlaying) return; + isPlaying = true; toneGenerator.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 150); + handler.postDelayed(stopToneRunnable, 150); } public void setEnabled(boolean enabled) {