Only load chapters when actually needed

This commit is contained in:
ByteHamster 2020-04-03 11:53:25 +02:00
parent 4855f2386d
commit 5a53966250
3 changed files with 8 additions and 12 deletions

View File

@ -102,7 +102,7 @@ public class AudioPlayerFragment extends Fragment implements
toolbar.setOnMenuItemClickListener(this); toolbar.setOnMenuItemClickListener(this);
ExternalPlayerFragment externalPlayerFragment = new ExternalPlayerFragment(); ExternalPlayerFragment externalPlayerFragment = new ExternalPlayerFragment();
getFragmentManager().beginTransaction() getChildFragmentManager().beginTransaction()
.replace(R.id.playerFragment, externalPlayerFragment, ExternalPlayerFragment.TAG) .replace(R.id.playerFragment, externalPlayerFragment, ExternalPlayerFragment.TAG)
.commit(); .commit();
@ -127,7 +127,7 @@ public class AudioPlayerFragment extends Fragment implements
sbPosition.setOnSeekBarChangeListener(this); sbPosition.setOnSeekBarChangeListener(this);
pager = root.findViewById(R.id.pager); pager = root.findViewById(R.id.pager);
AudioPlayerPagerAdapter pagerAdapter = new AudioPlayerPagerAdapter(getFragmentManager()); AudioPlayerPagerAdapter pagerAdapter = new AudioPlayerPagerAdapter(getChildFragmentManager());
pager.setAdapter(pagerAdapter); pager.setAdapter(pagerAdapter);
// Required for getChildAt(int) in ViewPagerBottomSheetBehavior to return the correct page // Required for getChildAt(int) in ViewPagerBottomSheetBehavior to return the correct page
pager.setOffscreenPageLimit(NUM_CONTENT_FRAGMENTS); pager.setOffscreenPageLimit(NUM_CONTENT_FRAGMENTS);
@ -355,12 +355,10 @@ public class AudioPlayerFragment extends Fragment implements
updatePosition(new PlaybackPositionEvent(controller.getPosition(), controller.getDuration())); updatePosition(new PlaybackPositionEvent(controller.getPosition(), controller.getDuration()));
updatePlaybackSpeedButton(media); updatePlaybackSpeedButton(media);
setupOptionsMenu(media); setupOptionsMenu(media);
if (media != null) {
List<Chapter> chapters = controller.getMedia().getChapters();
boolean hasChapters = chapters != null && !chapters.isEmpty();
pageIndicator.setDisabledPage(hasChapters ? -1 : 2);
} }
public void setHasChapters(boolean hasChapters) {
pageIndicator.setDisabledPage(hasChapters ? -1 : 2);
} }
@Override @Override

View File

@ -128,6 +128,7 @@ public class ChaptersFragment extends Fragment {
disposable = Maybe.create(emitter -> { disposable = Maybe.create(emitter -> {
Playable media = controller.getMedia(); Playable media = controller.getMedia();
if (media != null) { if (media != null) {
media.loadChapterMarks();
emitter.onSuccess(media); emitter.onSuccess(media);
} else { } else {
emitter.onComplete(); emitter.onComplete();
@ -146,6 +147,7 @@ public class ChaptersFragment extends Fragment {
return; return;
} }
adapter.setMedia(media); adapter.setMedia(media);
((AudioPlayerFragment) getParentFragment()).setHasChapters(adapter.getItemCount() > 0);
int positionOfCurrentChapter = getCurrentChapter(media); int positionOfCurrentChapter = getCurrentChapter(media);
updateChapterSelection(positionOfCurrentChapter); updateChapterSelection(positionOfCurrentChapter);
} }

View File

@ -590,9 +590,6 @@ public final class DBReader {
if (!list.isEmpty()) { if (!list.isEmpty()) {
item = list.get(0); item = list.get(0);
loadAdditionalFeedItemListData(list); loadAdditionalFeedItemListData(list);
if (item.hasChapters()) {
loadChaptersOfFeedItem(adapter, item);
}
} }
} }
return item; return item;
@ -608,8 +605,7 @@ public final class DBReader {
* than one FeedItem because this method might query the database several times for each item. * than one FeedItem because this method might query the database several times for each item.
* *
* @param itemId The ID of the FeedItem * @param itemId The ID of the FeedItem
* @return The FeedItem or null if the FeedItem could not be found. All FeedComponent-attributes * @return The FeedItem or null if the FeedItem could not be found.
* as well as chapter marks of the FeedItem will also be loaded from the database.
*/ */
@Nullable @Nullable
public static FeedItem getFeedItem(final long itemId) { public static FeedItem getFeedItem(final long itemId) {