From a30dc2e12af25eebfccc64e1690daa09ec29c4c5 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 30 Jan 2017 18:48:30 +0100 Subject: [PATCH] fix audio playback issue. Fixes #701 --- .../habitrpg/android/habitica/APIHelper.java | 6 +++++- .../helpers/PopupNotificationsManager.java | 8 ++++---- .../android/habitica/helpers/SoundFile.java | 18 +++++++++++++----- .../android/habitica/helpers/SoundManager.java | 5 ++--- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java b/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java index 563a02bb6..41a9f5cc0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java @@ -75,6 +75,7 @@ import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; +import android.content.Context; import android.media.Image; import android.os.Build; import android.support.v7.app.AlertDialog; @@ -126,6 +127,9 @@ public class APIHelper implements Action1 { @Inject CrashlyticsProxy crashlyticsProxy; + @Inject + Context context; + // I think we don't need the APIHelper anymore we could just use ApiService public final ApiService apiService; final Observable.Transformer apiCallTransformer = @@ -133,7 +137,7 @@ public class APIHelper implements Action1 { .map(new Func1() { @Override public Object call(HabitResponse habitResponse) { if (habitResponse.notifications != null) { - PopupNotificationsManager popupNotificationsManager = PopupNotificationsManager.getInstance(APIHelper.this); + PopupNotificationsManager popupNotificationsManager = PopupNotificationsManager.getInstance(APIHelper.this, context); popupNotificationsManager.showNotificationDialog(habitResponse.notifications); } return habitResponse.getData(); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManager.java index 16c896344..c8b3439bd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManager.java @@ -33,15 +33,15 @@ public class PopupNotificationsManager { // @TODO: A queue for displaying alert dialogues - private PopupNotificationsManager(APIHelper apiHelper) { + private PopupNotificationsManager(APIHelper apiHelper, Context context) { this.apiHelper = apiHelper; this.seenNotifications = new HashMap<>(); - context.getApplicationContext(); + this.context = context; } - public static PopupNotificationsManager getInstance(APIHelper apiHelper) { + public static PopupNotificationsManager getInstance(APIHelper apiHelper, Context context) { if (instance == null) { - instance = new PopupNotificationsManager(apiHelper); + instance = new PopupNotificationsManager(apiHelper, context); } return instance; } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFile.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFile.java index 8e67df704..77cf810e7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFile.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFile.java @@ -2,21 +2,24 @@ package com.habitrpg.android.habitica.helpers; import android.media.AudioManager; import android.media.MediaPlayer; +import android.util.Log; import java.io.File; -public class SoundFile { +public class SoundFile implements MediaPlayer.OnCompletionListener { private String theme; private String fileName; private File file; private MediaPlayer mp; private Boolean playerPrepared = false; + private boolean isPlaying; public SoundFile(String theme, String fileName){ this.theme = theme; this.fileName = fileName; mp = new MediaPlayer(); + mp.setOnCompletionListener(this); } public String getTheme() { @@ -65,11 +68,16 @@ public class SoundFile { } public void play(){ - prepareMediaPlayer(); - if(mp.isPlaying()) { - mp.stop(); + if(isPlaying) { + return; } - + prepareMediaPlayer(); + isPlaying = true; mp.start(); } + + @Override + public void onCompletion(MediaPlayer mediaPlayer) { + isPlaying = false; + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.java index 1e14120ca..ab8d28569 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.java @@ -47,7 +47,7 @@ public class SoundManager { } public Observable> preloadAllFiles() { - if(soundTheme == "off") { + if(soundTheme.equals("off")) { return Observable.empty(); } @@ -71,8 +71,7 @@ public class SoundManager { } public void loadAndPlayAudio(String type){ - if(soundTheme == "off") - { + if(soundTheme.equals("off")) { return; }