summaryrefslogtreecommitdiff
path: root/app/src/main/java
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-04-01 18:03:50 +0200
committerByteHamster <info@bytehamster.com>2020-04-01 18:03:50 +0200
commit62af272978e2541069e664e6c592191c4c14afa7 (patch)
tree4f70ae573cf7f1e172c77b7dd163560977696420 /app/src/main/java
parentea58748b22288ba8f4e372ed4801f242185e593c (diff)
downloadAntennaPod-62af272978e2541069e664e6c592191c4c14afa7.zip
Do not query database on main thread
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java59
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java6
2 files changed, 42 insertions, 23 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java
index 430968549..c1eff4e84 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java
@@ -46,6 +46,10 @@ import de.danoeh.antennapod.dialog.VariableSpeedDialog;
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import de.danoeh.antennapod.view.PagerIndicatorView;
import de.danoeh.antennapod.view.PlaybackSpeedIndicatorView;
+import io.reactivex.Maybe;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.schedulers.Schedulers;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
@@ -84,6 +88,7 @@ public class AudioPlayerFragment extends Fragment implements
private ProgressBar progressIndicator;
private PlaybackController controller;
+ private Disposable disposable;
private boolean showTimeLeft;
@Override
@@ -95,7 +100,6 @@ public class AudioPlayerFragment extends Fragment implements
toolbar.setNavigationOnClickListener(v ->
((MainActivity) getActivity()).getBottomSheet().setState(BottomSheetBehavior.STATE_COLLAPSED));
toolbar.setOnMenuItemClickListener(this);
- setupOptionsMenu();
ExternalPlayerFragment externalPlayerFragment = new ExternalPlayerFragment();
getFragmentManager().beginTransaction()
@@ -219,7 +223,7 @@ public class AudioPlayerFragment extends Fragment implements
PlaybackPreferences.setCurrentlyPlayingTemporaryPlaybackSpeed(newSpeed);
UserPreferences.setPlaybackSpeed(newSpeed);
controller.setPlaybackSpeed(newSpeed);
- updateUi();
+ loadMediaInfo();
});
butPlaybackSpeed.setOnLongClickListener(v -> {
VariableSpeedDialog.showDialog(getContext());
@@ -229,13 +233,13 @@ public class AudioPlayerFragment extends Fragment implements
txtvPlaybackSpeed.setVisibility(View.VISIBLE);
}
- protected void updatePlaybackSpeedButton() {
+ protected void updatePlaybackSpeedButton(Playable media) {
if (butPlaybackSpeed == null || controller == null) {
return;
}
float speed = 1.0f;
if (controller.canSetPlaybackSpeed()) {
- speed = PlaybackSpeedUtils.getCurrentPlaybackSpeed(controller.getMedia());
+ speed = PlaybackSpeedUtils.getCurrentPlaybackSpeed(media);
}
String speedStr = new DecimalFormat("0.00").format(speed);
txtvPlaybackSpeed.setText(speedStr);
@@ -245,12 +249,31 @@ public class AudioPlayerFragment extends Fragment implements
txtvPlaybackSpeed.setVisibility(View.VISIBLE);
}
+ private void loadMediaInfo() {
+ if (disposable != null) {
+ disposable.dispose();
+ }
+ disposable = Maybe.create(emitter -> {
+ Playable media = controller.getMedia();
+ if (media != null) {
+ emitter.onSuccess(media);
+ } else {
+ emitter.onComplete();
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(media -> updateUi((Playable) media),
+ error -> Log.e(TAG, Log.getStackTraceString(error)),
+ () -> updateUi(null));
+ }
+
private PlaybackController newPlaybackController() {
return new PlaybackController(getActivity()) {
@Override
public void setupGUI() {
- updateUi();
+ AudioPlayerFragment.this.loadMediaInfo();
}
@Override
@@ -289,7 +312,7 @@ public class AudioPlayerFragment extends Fragment implements
@Override
public void onSleepTimerUpdate() {
- setupOptionsMenu();
+ AudioPlayerFragment.this.loadMediaInfo();
}
@Override
@@ -299,7 +322,7 @@ public class AudioPlayerFragment extends Fragment implements
@Override
public boolean loadMediaInfo() {
- updateUi();
+ AudioPlayerFragment.this.loadMediaInfo();
return true;
}
@@ -315,25 +338,25 @@ public class AudioPlayerFragment extends Fragment implements
@Override
public void onPlaybackSpeedChange() {
- updatePlaybackSpeedButton();
+ updatePlaybackSpeedButton(getMedia());
}
@Override
public void onSetSpeedAbilityChanged() {
- updatePlaybackSpeedButton();
+ updatePlaybackSpeedButton(getMedia());
}
};
}
- private void updateUi() {
+ private void updateUi(Playable media) {
if (controller == null) {
return;
}
updatePosition(new PlaybackPositionEvent(controller.getPosition(), controller.getDuration()));
- updatePlaybackSpeedButton();
- setupOptionsMenu();
+ updatePlaybackSpeedButton(media);
+ setupOptionsMenu(media);
- if (controller.getMedia() != null) {
+ if (media != null) {
List<Chapter> chapters = controller.getMedia().getChapters();
boolean hasChapters = chapters != null && !chapters.isEmpty();
pageIndicator.setDisabledPage(hasChapters ? -1 : 2);
@@ -351,7 +374,7 @@ public class AudioPlayerFragment extends Fragment implements
super.onStart();
controller = newPlaybackController();
controller.init();
- updateUi();
+ loadMediaInfo();
EventBus.getDefault().register(this);
}
@@ -361,6 +384,9 @@ public class AudioPlayerFragment extends Fragment implements
controller.release();
controller = null;
EventBus.getDefault().unregister(this);
+ if (disposable != null) {
+ disposable.dispose();
+ }
}
@Subscribe(threadMode = ThreadMode.MAIN)
@@ -390,7 +416,7 @@ public class AudioPlayerFragment extends Fragment implements
@Subscribe(threadMode = ThreadMode.MAIN)
public void favoritesChanged(FavoritesEvent event) {
- setupOptionsMenu();
+ AudioPlayerFragment.this.loadMediaInfo();
}
@Override
@@ -426,14 +452,13 @@ public class AudioPlayerFragment extends Fragment implements
}
}
- public void setupOptionsMenu() {
+ public void setupOptionsMenu(Playable media) {
if (toolbar.getMenu().size() == 0) {
toolbar.inflateMenu(R.menu.mediaplayer);
}
if (controller == null) {
return;
}
- Playable media = controller.getMedia();
boolean isFeedMedia = media instanceof FeedMedia;
toolbar.getMenu().findItem(R.id.open_feed_item).setVisible(isFeedMedia);
if (isFeedMedia) {
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 5c8b5e03a..e75c450df 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java
@@ -122,12 +122,6 @@ public class ExternalPlayerFragment extends Fragment {
}
@Override
- public void onResume() {
- super.onResume();
- onPositionObserverUpdate();
- }
-
- @Override
public void onStart() {
super.onStart();
controller = setupPlaybackController();