diff options
author | Martin Fietz <Martin.Fietz@gmail.com> | 2016-03-23 20:39:28 +0100 |
---|---|---|
committer | Martin Fietz <Martin.Fietz@gmail.com> | 2016-03-23 20:39:46 +0100 |
commit | 6de985c99397edd3007c8d81847f5443f4c39687 (patch) | |
tree | 8e60c6ee351a9e29b5458fdf2faefa4f9907874c /core/src/main/java | |
parent | 7f11cd351a2cfe776bad71ae29070a26af1e827f (diff) | |
download | AntennaPod-6de985c99397edd3007c8d81847f5443f4c39687.zip |
Replace AsyncTask with Observable
Diffstat (limited to 'core/src/main/java')
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java | 61 |
1 files changed, 34 insertions, 27 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 f05b1f73b..0ad286093 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 @@ -10,7 +10,6 @@ import android.content.ServiceConnection; import android.content.SharedPreferences; import android.content.res.TypedArray; import android.media.MediaPlayer; -import android.os.AsyncTask; import android.os.Build; import android.os.IBinder; import android.preference.PreferenceManager; @@ -41,6 +40,10 @@ import de.danoeh.antennapod.core.service.playback.PlayerStatus; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.playback.Playable.PlayableUtils; +import rx.Observable; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; /** * Communicates with the playback service. GUI classes should use this class to @@ -67,6 +70,8 @@ public abstract class PlaybackController { private boolean mediaInfoLoaded = false; private boolean released = false; + private Subscription serviceBinder; + /** * True if controller should reinit playback service if 'pause' button is * pressed. @@ -133,6 +138,9 @@ public abstract class PlaybackController { // ignore } + if(serviceBinder != null) { + serviceBinder.unsubscribe(); + } try { activity.unbindService(mConnection); } catch (IllegalArgumentException e) { @@ -165,34 +173,33 @@ public abstract class PlaybackController { */ private void bindToService() { Log.d(TAG, "Trying to connect to service"); - AsyncTask<Void, Void, Intent> intentLoader = new AsyncTask<Void, Void, Intent>() { - @Override - protected Intent doInBackground(Void... voids) { - return getPlayLastPlayedMediaIntent(); - } - - @Override - protected void onPostExecute(Intent serviceIntent) { - boolean bound = false; - if (!PlaybackService.started) { - if (serviceIntent != null) { - Log.d(TAG, "Calling start service"); - activity.startService(serviceIntent); - bound = activity.bindService(serviceIntent, mConnection, 0); + if(serviceBinder != null) { + serviceBinder.unsubscribe(); + } + serviceBinder = Observable.fromCallable(() -> getPlayLastPlayedMediaIntent()) + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(intent -> { + boolean bound = false; + if (!PlaybackService.started) { + if (intent != null) { + Log.d(TAG, "Calling start service"); + activity.startService(intent); + bound = activity.bindService(intent, mConnection, 0); + } else { + status = PlayerStatus.STOPPED; + setupGUI(); + handleStatus(); + } } else { - status = PlayerStatus.STOPPED; - setupGUI(); - handleStatus(); + Log.d(TAG, "PlaybackService is running, trying to connect without start command."); + bound = activity.bindService(new Intent(activity, PlaybackService.class), + mConnection, 0); } - } 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); - } - }; - intentLoader.execute(); + Log.d(TAG, "Result for service binding: " + bound); + }, error -> { + Log.e(TAG, Log.getStackTraceString(error)); + }); } /** |