From 8c879ede9b6cedb64e37a58d0d9f50c35951141a Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Thu, 2 Apr 2020 19:40:24 +0200 Subject: [PATCH] Rebind to the service after it was stopped --- .../fragment/ExternalPlayerFragment.java | 11 ++----- .../util/playback/PlaybackController.java | 29 ++++++++++--------- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java index e75c450df..3aec7f290 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java @@ -172,17 +172,10 @@ public class ExternalPlayerFragment extends Fragment { if (disposable != null) { disposable.dispose(); } - disposable = Maybe.create(emitter -> { - Playable media = controller.getMedia(); - if (media != null) { - emitter.onSuccess(media); - } else { - emitter.onComplete(); - } - }) + disposable = Maybe.fromCallable(() -> controller.getMedia()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(media -> updateUi((Playable) media), + .subscribe(this::updateUi, error -> Log.e(TAG, Log.getStackTraceString(error)), () -> ((MainActivity) getActivity()).setPlayerVisible(false)); return true; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java index eb189eb4e..428312393 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java @@ -148,15 +148,7 @@ public class PlaybackController { } catch (IllegalArgumentException e) { // ignore } - - if(serviceBinder != null) { - serviceBinder.dispose(); - } - try { - activity.unbindService(mConnection); - } catch (IllegalArgumentException e) { - // ignore - } + unbind(); try { activity.unregisterReceiver(shutdownReceiver); @@ -173,6 +165,18 @@ public class PlaybackController { } } + private void unbind() { + if (serviceBinder != null) { + serviceBinder.dispose(); + } + try { + activity.unbindService(mConnection); + } catch (IllegalArgumentException e) { + // ignore + } + initialized = false; + } + /** * Should be called in the activity's onPause() method. */ @@ -256,6 +260,7 @@ public class PlaybackController { @Override public void onServiceDisconnected(ComponentName name) { playbackService = null; + initialized = false; Log.d(TAG, "Disconnected from Service"); } }; @@ -328,13 +333,11 @@ public class PlaybackController { }; private final BroadcastReceiver shutdownReceiver = new BroadcastReceiver() { - @Override public void onReceive(Context context, Intent intent) { if (playbackService != null) { - if (TextUtils.equals(intent.getAction(), - PlaybackService.ACTION_SHUTDOWN_PLAYBACK_SERVICE)) { - release(); + if (TextUtils.equals(intent.getAction(), PlaybackService.ACTION_SHUTDOWN_PLAYBACK_SERVICE)) { + unbind(); onShutdownNotification(); } }