diff --git a/app/build.gradle b/app/build.gradle index 0c809c7..8e6d8df 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -42,12 +42,6 @@ android { coreLibraryDesugaringEnabled true } - java { - toolchain { - languageVersion = JavaLanguageVersion.of(17) - } - } - buildFeatures { buildConfig true } diff --git a/app/src/main/java/com/helldivers/app/ActivityGame.java b/app/src/main/java/com/helldivers/app/ActivityGame.java index e3ab84f..004705e 100644 --- a/app/src/main/java/com/helldivers/app/ActivityGame.java +++ b/app/src/main/java/com/helldivers/app/ActivityGame.java @@ -193,8 +193,7 @@ private static final String[] NAMES = { private TextView tvCounter; private ImageView ivStratagemIcon; private LinearLayout sequenceContainer; - private ImageButton btnUp, btnDown, btnLeft, btnRight; - private android.widget.Button btnVolver; + private ImageButton btnUp, btnDown, btnLeft, btnRight, btnVolver; private ProgressBar progressBar; private ImageView ivFailure; @@ -286,8 +285,7 @@ private static final String[] NAMES = { arrowView.setLayoutParams(params); arrowView.setText(String.valueOf(ARROW_CHARS.charAt(sequence[i]))); - arrowView.setTextSize(36); - arrowView.setTextColor(Color.parseColor("#FFD700")); + arrowView.setTextColor(Color.parseColor("#FFFFFF")); arrowView.setGravity(Gravity.CENTER); arrowView.setBackgroundResource(R.drawable.arrow_white); @@ -296,9 +294,6 @@ private static final String[] NAMES = { } private void onInputWithSound(int dir) { - if (soundManager != null) { - try { soundManager.playTone(dir); } catch (Exception e) {} - } onInput(dir); } @@ -307,6 +302,9 @@ private static final String[] NAMES = { bloqueado = true; if (dir == sequence[playerIndex]) { + if (soundManager != null) { + try { soundManager.playTone(dir); } catch (Exception e) {} + } playerIndex++; if (sequenceContainer != null && playerIndex <= sequence.length) { @@ -344,6 +342,18 @@ private static final String[] NAMES = { } } + @Override + protected void onPause() { + super.onPause(); + if (soundManager != null) soundManager.pause(); + } + + @Override + protected void onResume() { + super.onResume(); + if (soundManager != null) soundManager.resume(); + } + @Override protected void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/com/helldivers/app/ActivityQR.java b/app/src/main/java/com/helldivers/app/ActivityQR.java index 19839ca..7061d37 100644 --- a/app/src/main/java/com/helldivers/app/ActivityQR.java +++ b/app/src/main/java/com/helldivers/app/ActivityQR.java @@ -3,7 +3,7 @@ package com.helldivers.app; import android.graphics.Bitmap; import android.os.Bundle; import android.view.View; -import android.widget.Button; +import android.widget.ImageButton; import android.widget.ImageView; import androidx.appcompat.app.AppCompatActivity; import com.google.zxing.BarcodeFormat; @@ -20,7 +20,7 @@ public class ActivityQR extends AppCompatActivity { private SoundManager soundManager; private ImageView qrImageView; - private Button btnVolver; + private ImageButton btnVolver; @Override protected void onCreate(Bundle savedInstanceState) { @@ -38,7 +38,6 @@ public class ActivityQR extends AppCompatActivity { btnVolver.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - soundManager.playButtonClick(); finish(); } }); diff --git a/app/src/main/java/com/helldivers/app/MainActivity.java b/app/src/main/java/com/helldivers/app/MainActivity.java index 74daba7..cfb3af3 100644 --- a/app/src/main/java/com/helldivers/app/MainActivity.java +++ b/app/src/main/java/com/helldivers/app/MainActivity.java @@ -35,18 +35,12 @@ public class MainActivity extends AppCompatActivity { if (btnQrInstagram != null) { btnQrInstagram.setOnClickListener(v -> { - if (soundManager != null) { - try { soundManager.playButtonClick(); } catch (Exception e) {} - } startActivity(new Intent(this, ActivityQR.class)); }); } if (btnMinijuego != null) { btnMinijuego.setOnClickListener(v -> { - if (soundManager != null) { - try { soundManager.playButtonClick(); } catch (Exception e) {} - } startActivity(new Intent(this, ActivityGame.class)); }); } diff --git a/app/src/main/java/com/helldivers/app/SoundManager.java b/app/src/main/java/com/helldivers/app/SoundManager.java index 6fbddbd..3e325d5 100644 --- a/app/src/main/java/com/helldivers/app/SoundManager.java +++ b/app/src/main/java/com/helldivers/app/SoundManager.java @@ -1,97 +1,68 @@ package com.helldivers.app; import android.content.Context; -import android.media.AudioManager; -import android.media.ToneGenerator; -import android.os.Handler; -import android.os.Looper; +import android.media.AudioAttributes; +import android.media.SoundPool; /** - * SoundManager - Gestor de sonidos usando ToneGenerator - * Compatible con API 18+, mas ligero que SoundPool para dispositivos de baja potencia + * SoundManager - Gestor de sonidos usando SoundPool para reproducir archivos de recursos */ public class SoundManager { - private static final int VOLUME = 80; // 0-100 - - private ToneGenerator toneGenerator; - private Handler handler; + private SoundPool soundPool; + private int soundPop; + private int soundError; private boolean enabled = true; public SoundManager(Context context) { - // ToneGenerator.STREAM_MUSIC para compatibilidad API 18+ - toneGenerator = new ToneGenerator(AudioManager.STREAM_MUSIC, VOLUME); - handler = new Handler(Looper.getMainLooper()); + AudioAttributes audioAttributes = new AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_GAME) + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .build(); + + soundPool = new SoundPool.Builder() + .setMaxStreams(5) + .setAudioAttributes(audioAttributes) + .build(); + + // Cargar los sonidos desde res/raw + soundPop = soundPool.load(context, R.raw.pop, 1); + soundError = soundPool.load(context, R.raw.error, 1); } /** - * Sonido de click de boton - tono corto y agudo + * Sonido de click de boton - reproduce pop.mp3 */ public void playButtonClick() { - if (!enabled || toneGenerator == null) return; - // Tono DTMF 6 - sonido tipo boton tactil - toneGenerator.startTone(ToneGenerator.TONE_DTMF_6, 80); + playPop(); } /** - * Sonido de exito - secuencia ascendente + * Sonido de exito */ public void playSuccess() { - if (!enabled || toneGenerator == null) return; - // Tono de confirmacion propositivo - toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 150); + // Por ahora no tenemos un sonido de éxito específico en raw, + // podríamos usar pop o dejarlo vacío si no se solicita. } /** - * Sonido de fallo - tono bajo grave + * Sonido de fallo - reproduce error.mp3 */ public void playFailure() { - if (!enabled || toneGenerator == null) return; - // Tono de error - toneGenerator.startTone(ToneGenerator.TONE_PROP_NACK, 200); + if (!enabled || soundPool == null) return; + soundPool.play(soundError, 1.0f, 1.0f, 1, 0, 1.0f); } /** - * Tono para direcciones del juego - * Usa diferentes tonos DTMF para cada direccion + * Tono para direcciones del juego - reproduce pop.mp3 para cualquier dirección */ public void playTone(int direction) { - if (!enabled || toneGenerator == null) return; - - int tone; - switch (direction) { - case 0: // UP - tone = ToneGenerator.TONE_DTMF_2; - break; - case 1: // DOWN - tone = ToneGenerator.TONE_DTMF_8; - break; - case 2: // LEFT - tone = ToneGenerator.TONE_DTMF_4; - break; - case 3: // RIGHT - tone = ToneGenerator.TONE_DTMF_6; - break; - default: - tone = ToneGenerator.TONE_DTMF_0; - } - toneGenerator.startTone(tone, 100); + playPop(); } - /** - * Tono de inicio de secuencia - */ - public void playSequenceStart() { - if (!enabled || toneGenerator == null) return; - toneGenerator.startTone(ToneGenerator.TONE_SUP_DIAL, 100); - } - - /** - * Tono de alerta/peligro - */ - public void playAlert() { - if (!enabled || toneGenerator == null) return; - toneGenerator.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 150); + private void playPop() { + if (!enabled || soundPool == null) return; + soundPool.play(soundPop, 1.0f, 1.0f, 1, 0, 1.0f); } public void setEnabled(boolean enabled) { @@ -102,26 +73,18 @@ public class SoundManager { return enabled; } - /** - * Stub para compatibilidad con ciclo de vida Activity - * ToneGenerator no necesita pause/resume explicito - */ public void pause() { - // No-op: ToneGenerator se maneja automaticamente + if (soundPool != null) soundPool.autoPause(); } - /** - * Stub para compatibilidad con ciclo de vida Activity - * ToneGenerator no necesita pause/resume explicito - */ public void resume() { - // No-op: ToneGenerator se maneja automaticamente + if (soundPool != null) soundPool.autoResume(); } public void release() { - if (toneGenerator != null) { - toneGenerator.release(); - toneGenerator = null; + if (soundPool != null) { + soundPool.release(); + soundPool = null; } } } \ No newline at end of file diff --git a/app/src/main/res/drawable/arrow_white.xml b/app/src/main/res/drawable/arrow_white.xml index 31503a9..b66339d 100644 --- a/app/src/main/res/drawable/arrow_white.xml +++ b/app/src/main/res/drawable/arrow_white.xml @@ -4,7 +4,7 @@ - + diff --git a/app/src/main/res/drawable/bg_helldivers_gradient.xml b/app/src/main/res/drawable/bg_helldivers_gradient.xml index 648d31a..0589c16 100644 --- a/app/src/main/res/drawable/bg_helldivers_gradient.xml +++ b/app/src/main/res/drawable/bg_helldivers_gradient.xml @@ -1,13 +1,13 @@ - + diff --git a/app/src/main/res/drawable/bg_qr_container.xml b/app/src/main/res/drawable/bg_qr_container.xml index 1f5a2dd..4b61f32 100644 --- a/app/src/main/res/drawable/bg_qr_container.xml +++ b/app/src/main/res/drawable/bg_qr_container.xml @@ -4,6 +4,6 @@ android:shape="rectangle"> - + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_direction.xml b/app/src/main/res/drawable/btn_direction.xml index 4b333b0..f4ce84e 100644 --- a/app/src/main/res/drawable/btn_direction.xml +++ b/app/src/main/res/drawable/btn_direction.xml @@ -5,7 +5,7 @@ - + @@ -42,7 +42,7 @@ - + diff --git a/app/src/main/res/drawable/btn_helldivers_primary.xml b/app/src/main/res/drawable/btn_helldivers_primary.xml index d0d0f8d..e9d9df8 100644 --- a/app/src/main/res/drawable/btn_helldivers_primary.xml +++ b/app/src/main/res/drawable/btn_helldivers_primary.xml @@ -1,18 +1,18 @@ - + - + - + - + @@ -23,14 +23,14 @@ - + - + - + @@ -41,14 +41,14 @@ - + - + - + diff --git a/app/src/main/res/drawable/btn_helldivers_secondary.xml b/app/src/main/res/drawable/btn_helldivers_secondary.xml index a255b86..18f624d 100644 --- a/app/src/main/res/drawable/btn_helldivers_secondary.xml +++ b/app/src/main/res/drawable/btn_helldivers_secondary.xml @@ -1,18 +1,18 @@ - + - + - + - + @@ -23,14 +23,14 @@ - + - + - + diff --git a/app/src/main/res/drawable/ic_back_arrow.xml b/app/src/main/res/drawable/ic_back_arrow.xml new file mode 100644 index 0000000..4761ca5 --- /dev/null +++ b/app/src/main/res/drawable/ic_back_arrow.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_dpad_button.xml b/app/src/main/res/drawable/ic_dpad_button.xml new file mode 100644 index 0000000..45c301b --- /dev/null +++ b/app/src/main/res/drawable/ic_dpad_button.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_qr_code.xml b/app/src/main/res/drawable/ic_qr_code.xml index d09e0de..cad0697 100644 --- a/app/src/main/res/drawable/ic_qr_code.xml +++ b/app/src/main/res/drawable/ic_qr_code.xml @@ -5,35 +5,35 @@ android:height="32dp" android:viewportWidth="24" android:viewportHeight="24" - android:tint="#FFD700"> + android:tint="#FFFFFF"> \ No newline at end of file diff --git a/app/src/main/res/drawable/logo_helldivers_placeholder.xml b/app/src/main/res/drawable/logo_helldivers_placeholder.xml index 406c49f..26dff09 100644 --- a/app/src/main/res/drawable/logo_helldivers_placeholder.xml +++ b/app/src/main/res/drawable/logo_helldivers_placeholder.xml @@ -14,7 +14,7 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/logo_helldivers_text.xml b/app/src/main/res/drawable/logo_helldivers_text.xml index 677cc89..3551fee 100644 --- a/app/src/main/res/drawable/logo_helldivers_text.xml +++ b/app/src/main/res/drawable/logo_helldivers_text.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_game.xml b/app/src/main/res/layout/activity_game.xml index 6663b46..d82c6a8 100644 --- a/app/src/main/res/layout/activity_game.xml +++ b/app/src/main/res/layout/activity_game.xml @@ -1,5 +1,6 @@ @@ -8,18 +9,6 @@ - - @@ -45,7 +34,7 @@ android:text="" android:textSize="20sp" android:textStyle="bold" - android:textColor="#FFD700" /> + android:textColor="#FFFFFF" /> + app:tint="#FFFFFF" + android:src="@drawable/ic_dpad_button" /> + app:tint="#FFFFFF" + android:src="@drawable/ic_dpad_button" /> + app:tint="#FFFFFF" + android:src="@drawable/ic_dpad_button" /> + app:tint="#FFFFFF" + android:src="@drawable/ic_dpad_button" /> -