summaryrefslogtreecommitdiff
path: root/app/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java13
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java60
2 files changed, 51 insertions, 22 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java
index 386b760b1..9940ccbdd 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java
@@ -6,6 +6,7 @@ import android.util.Log;
import android.view.View;
import android.widget.ListView;
+import de.danoeh.antennapod.core.util.ChapterUtils;
import java.util.List;
import java.util.ListIterator;
@@ -104,18 +105,10 @@ public class ChaptersFragment extends ListFragment {
}
private int getCurrentChapter(Playable media) {
- if (media == null || media.getChapters() == null || media.getChapters().size() == 0 || controller == null) {
+ if (controller == null) {
return -1;
}
- int currentPosition = controller.getPosition();
-
- List<Chapter> chapters = media.getChapters();
- for (int i = 0; i < chapters.size(); i++) {
- if (chapters.get(i).getStart() > currentPosition) {
- return i - 1;
- }
- }
- return chapters.size() - 1;
+ return ChapterUtils.getCurrentChapterIndex(media, controller.getPosition());
}
private void loadMediaInfo() {
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java
index 5467d71a8..b9263f21e 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java
@@ -1,6 +1,7 @@
package de.danoeh.antennapod.fragment;
import android.os.Bundle;
+import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import android.util.Log;
@@ -14,14 +15,20 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.core.event.PlaybackPositionEvent;
import de.danoeh.antennapod.core.glide.ApGlideSettings;
import de.danoeh.antennapod.core.feed.util.ImageResourceUtils;
+import de.danoeh.antennapod.core.util.EmbeddedChapterImage;
+import de.danoeh.antennapod.core.util.ChapterUtils;
import de.danoeh.antennapod.core.util.playback.Playable;
import de.danoeh.antennapod.core.util.playback.PlaybackController;
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;
/**
* Displays the cover and the title of a FeedItem.
@@ -36,6 +43,8 @@ public class CoverFragment extends Fragment {
private ImageView imgvCover;
private PlaybackController controller;
private Disposable disposable;
+ private int displayedChapterIndex = -1;
+ private Playable media;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -53,18 +62,20 @@ public class CoverFragment extends Fragment {
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 -> displayMediaInfo((Playable) media),
- error -> Log.e(TAG, Log.getStackTraceString(error)));
+ disposable = Maybe.<Playable>create(emitter -> {
+ Playable media = controller.getMedia();
+ if (media != null) {
+ emitter.onSuccess(media);
+ } else {
+ emitter.onComplete();
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(media -> {
+ this.media = media;
+ displayMediaInfo(media);
+ }, error -> Log.e(TAG, Log.getStackTraceString(error)));
}
private void displayMediaInfo(@NonNull Playable media) {
@@ -99,6 +110,7 @@ public class CoverFragment extends Fragment {
};
controller.init();
loadMediaInfo();
+ EventBus.getDefault().register(this);
}
@Override
@@ -106,6 +118,30 @@ public class CoverFragment extends Fragment {
super.onStop();
controller.release();
controller = null;
+ EventBus.getDefault().unregister(this);
+ }
+
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ public void onEventMainThread(PlaybackPositionEvent event) {
+ if (controller == null) {
+ return;
+ }
+ int chapter = ChapterUtils.getCurrentChapterIndex(media, event.getPosition());
+ if (chapter != displayedChapterIndex) {
+ displayedChapterIndex = chapter;
+
+ if (chapter == -1 || TextUtils.isEmpty(media.getChapters().get(chapter).getImageUrl())) {
+ displayMediaInfo(media);
+ } else {
+ Glide.with(this)
+ .load(EmbeddedChapterImage.getModelFor(media, chapter))
+ .apply(new RequestOptions()
+ .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY)
+ .dontAnimate()
+ .fitCenter())
+ .into(imgvCover);
+ }
+ }
}
@Override