From 59e98546c9a26bbbcfe34e5efe6f2e721a8fcc1b Mon Sep 17 00:00:00 2001 From: Adrian Ulrich Date: Sun, 3 Sep 2017 15:30:03 +0200 Subject: [PATCH] Unregister contentObserver while PlaybackService gets destroyed. --- .../android/medialibrary/MediaLibrary.java | 19 ++++++++++++++++++- .../android/vanilla/PlaybackService.java | 2 ++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java b/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java index 2f84d8bc..dd6654a4 100644 --- a/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java +++ b/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java @@ -12,7 +12,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ package ch.blinkenlights.android.medialibrary; @@ -274,6 +274,23 @@ public class MediaLibrary { } } + /** + * Unregisters a content observer which was previously registered + * by calling registerContentObserver(). + * + * @param observer the content observer to unregister. + */ + public static void unregisterContentObserver(ContentObserver observer) { + if (sContentObserver == null) + throw new IllegalStateException("No ContentObserver was registered!"); + + if (!sContentObserver.equals(observer)) + throw new IllegalArgumentException("Passed content observer was not the one you registered!"); + + // Sanity check passed: unregister observer. + sContentObserver = null; + } + /** * Broadcasts a change to the observer, which will queue and dispatch * the event to any registered observer diff --git a/src/ch/blinkenlights/android/vanilla/PlaybackService.java b/src/ch/blinkenlights/android/vanilla/PlaybackService.java index 534b7dd0..db02f7e5 100644 --- a/src/ch/blinkenlights/android/vanilla/PlaybackService.java +++ b/src/ch/blinkenlights/android/vanilla/PlaybackService.java @@ -598,6 +598,8 @@ public final class PlaybackService extends Service // defer wakelock and close audioFX enterSleepState(); + MediaLibrary.unregisterContentObserver(mObserver); + if (mMediaPlayer != null) { mMediaPlayer.release(); mMediaPlayer = null;