diff options
Diffstat (limited to 'app/src/main')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java | 13 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java | 60 |
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 |