summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2021-02-19 21:22:16 +0100
committerByteHamster <info@bytehamster.com>2021-02-19 21:22:19 +0100
commit949260658b95939ca7b8e111b94c634aa3975f80 (patch)
tree6298a41d7d0e97524fcc9fbab1a906de1cfa3628
parent822b6844f84ce58d2b28e631ad67e5d316a3b19e (diff)
downloadAntennaPod-949260658b95939ca7b8e111b94c634aa3975f80.zip
Fixed rare 'file not found' errors when starting playback
The `getPlayLastPlayedMediaIntent` method was originally added in 2013 to avoid starting the service without a media file. The bind method should actually never need to start the service in the first place, though.
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java61
1 files changed, 4 insertions, 57 deletions
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 fb37222f7..93b261e97 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
@@ -17,12 +17,10 @@ import android.util.Pair;
import android.view.SurfaceHolder;
import android.widget.ImageButton;
import androidx.annotation.NonNull;
-import androidx.core.content.ContextCompat;
import de.danoeh.antennapod.core.R;
import de.danoeh.antennapod.core.event.MessageEvent;
import de.danoeh.antennapod.core.event.ServiceEvent;
import de.danoeh.antennapod.core.feed.Chapter;
-import de.danoeh.antennapod.core.feed.FeedMedia;
import de.danoeh.antennapod.core.feed.MediaType;
import de.danoeh.antennapod.core.feed.util.PlaybackSpeedUtils;
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
@@ -30,13 +28,10 @@ import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.service.playback.PlaybackService;
import de.danoeh.antennapod.core.service.playback.PlaybackServiceMediaPlayer;
import de.danoeh.antennapod.core.service.playback.PlayerStatus;
-import de.danoeh.antennapod.core.storage.DBTasks;
-import de.danoeh.antennapod.core.util.Optional;
import de.danoeh.antennapod.core.util.playback.Playable.PlayableUtils;
import de.danoeh.antennapod.ui.common.ThemeUtils;
import io.reactivex.Maybe;
import io.reactivex.MaybeOnSubscribe;
-import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
@@ -66,7 +61,6 @@ public abstract class PlaybackController {
private boolean initialized = false;
private boolean eventsRegistered = false;
- private Disposable serviceBinder;
private Disposable mediaLoader;
public PlaybackController(@NonNull Activity activity) {
@@ -153,9 +147,6 @@ public abstract class PlaybackController {
}
private void unbind() {
- if (serviceBinder != null) {
- serviceBinder.dispose();
- }
try {
activity.unbindService(mConnection);
} catch (IllegalArgumentException e) {
@@ -178,55 +169,11 @@ public abstract class PlaybackController {
*/
private void bindToService() {
Log.d(TAG, "Trying to connect to service");
- if (serviceBinder != null) {
- serviceBinder.dispose();
- }
- serviceBinder = Observable.fromCallable(this::getPlayLastPlayedMediaIntent)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(optionalIntent -> {
- boolean bound = false;
- if (!PlaybackService.isRunning) {
- if (optionalIntent.isPresent()) {
- Log.d(TAG, "Calling start service");
- ContextCompat.startForegroundService(activity, optionalIntent.get());
- bound = activity.bindService(optionalIntent.get(), mConnection, 0);
- } else {
- status = PlayerStatus.STOPPED;
- handleStatus();
- }
- } else {
- Log.d(TAG, "PlaybackService is running, trying to connect without start command.");
- bound = activity.bindService(new Intent(activity, PlaybackService.class),
- mConnection, 0);
- }
- Log.d(TAG, "Result for service binding: " + bound);
- }, error -> Log.e(TAG, Log.getStackTraceString(error)));
- }
-
- /**
- * Returns an intent that starts the PlaybackService and plays the last
- * played media or null if no last played media could be found.
- */
- @NonNull
- private Optional<Intent> getPlayLastPlayedMediaIntent() {
- Log.d(TAG, "Trying to restore last played media");
- Playable media = PlayableUtils.createInstanceFromPreferences(activity);
- if (media == null) {
- Log.d(TAG, "No last played media found");
- return Optional.empty();
+ if (!PlaybackService.isRunning) {
+ throw new IllegalStateException("Trying to bind but service is not running");
}
-
- boolean fileExists = media.localFileAvailable();
- boolean lastIsStream = PlaybackPreferences.getCurrentEpisodeIsStream();
- if (!fileExists && !lastIsStream && media instanceof FeedMedia) {
- DBTasks.notifyMissingFeedMediaFile(activity, (FeedMedia) media);
- }
-
- return Optional.of(new PlaybackServiceStarter(activity, media)
- .startWhenPrepared(false)
- .shouldStream(lastIsStream || !fileExists)
- .getIntent());
+ boolean bound = activity.bindService(new Intent(activity, PlaybackService.class), mConnection, 0);
+ Log.d(TAG, "Result for service binding: " + bound);
}
private final ServiceConnection mConnection = new ServiceConnection() {