diff options
author | ByteHamster <info@bytehamster.com> | 2021-04-04 19:31:59 +0200 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2021-04-04 19:31:59 +0200 |
commit | ef41704166cc17b95159a891e7be36c8b334b8b4 (patch) | |
tree | 4d40cb284edfad2bafe4b079d404ce0cb48e5855 /app/src/main/java/de/danoeh/antennapod | |
parent | eda2399c5780959dc0af3bba14b777e70917bf22 (diff) | |
parent | 4e58a60fa6429fc7bb0774b61b2d84ff7cca577a (diff) | |
download | AntennaPod-ef41704166cc17b95159a891e7be36c8b334b8b4.zip |
Merge branch 'master' into develop
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod')
8 files changed, 32 insertions, 27 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index aa1d746a5..6afe27d17 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -166,10 +166,15 @@ public class MainActivity extends CastEnabledActivity { outState.putInt(KEY_GENERATED_VIEW_ID, ViewCompat.generateViewId()); } - private BottomSheetBehavior.BottomSheetCallback bottomSheetCallback = + private final BottomSheetBehavior.BottomSheetCallback bottomSheetCallback = new BottomSheetBehavior.BottomSheetCallback() { @Override public void onStateChanged(@NonNull View view, int state) { + if (state == BottomSheetBehavior.STATE_COLLAPSED) { + onSlide(view, 0.0f); + } else if (state == BottomSheetBehavior.STATE_EXPANDED) { + onSlide(view, 1.0f); + } } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/ChaptersListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/ChaptersListAdapter.java index d4b32ee06..8380d8626 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/ChaptersListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/ChaptersListAdapter.java @@ -53,6 +53,10 @@ public class ChaptersListAdapter extends RecyclerView.Adapter<ChaptersListAdapte @Override public void onBindViewHolder(@NonNull ChapterHolder holder, int position) { Chapter sc = getItem(position); + if (sc == null) { + holder.title.setText("Error"); + return; + } holder.title.setText(sc.getTitle()); holder.start.setText(Converter.getDurationStringLong((int) sc .getStart())); 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 51f264e56..e0ce2880c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java @@ -69,10 +69,9 @@ public class AudioPlayerFragment extends Fragment implements ChapterSeekBar.OnSeekBarChangeListener, Toolbar.OnMenuItemClickListener { public static final String TAG = "AudioPlayerFragment"; private static final int POS_COVER = 0; - private static final int POS_DESCR = 1; + private static final int POS_SHOWNOTES = 1; private static final int POS_CHAPTERS = 2; private static final int NUM_CONTENT_FRAGMENTS = 3; - public static final String PREFS = "AudioPlayerFragmentPreferences"; private static final float EPSILON = 0.001f; PlaybackSpeedIndicatorView butPlaybackSpeed; @@ -104,6 +103,7 @@ public class AudioPlayerFragment extends Fragment implements @Nullable Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View root = inflater.inflate(R.layout.audioplayer_fragment, container, false); + root.setOnTouchListener((v, event) -> true); // Avoid clicks going through player to fragments below toolbar = root.findViewById(R.id.toolbar); toolbar.setTitle(""); toolbar.setNavigationOnClickListener(v -> @@ -158,8 +158,8 @@ public class AudioPlayerFragment extends Fragment implements case POS_COVER: tab.setText(R.string.cover_label); break; - case POS_DESCR: - tab.setText(R.string.description_label); + case POS_SHOWNOTES: + tab.setText(R.string.shownotes_label); break; case POS_CHAPTERS: tab.setText(R.string.chapters_label); @@ -464,7 +464,7 @@ public class AudioPlayerFragment extends Fragment implements TimeSpeedConverter converter = new TimeSpeedConverter(controller.getCurrentPlaybackSpeedMultiplier()); int currentPosition = converter.convert(event.getPosition()); int duration = converter.convert(event.getDuration()); - int remainingTime = converter.convert(event.getDuration() - event.getPosition()); + int remainingTime = converter.convert(Math.max(event.getDuration() - event.getPosition(), 0)); Log.d(TAG, "currentPosition " + Converter.getDurationStringLong(currentPosition)); if (currentPosition == PlaybackService.INVALID_TIME || duration == PlaybackService.INVALID_TIME) { Log.w(TAG, "Could not react to position observer update because of invalid time"); @@ -473,7 +473,7 @@ public class AudioPlayerFragment extends Fragment implements txtvPosition.setText(Converter.getDurationStringLong(currentPosition)); showTimeLeft = UserPreferences.shouldShowRemainingTime(); if (showTimeLeft) { - txtvLength.setText("-" + Converter.getDurationStringLong(remainingTime)); + txtvLength.setText(((remainingTime > 0) ? "-" : "") + Converter.getDurationStringLong(remainingTime)); } else { txtvLength.setText(Converter.getDurationStringLong(duration)); } @@ -592,7 +592,7 @@ public class AudioPlayerFragment extends Fragment implements switch (position) { case POS_COVER: return new CoverFragment(); - case POS_DESCR: + case POS_SHOWNOTES: return new ItemDescriptionFragment(); default: case POS_CHAPTERS: 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 d8c382cb2..5cb44655e 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java @@ -23,7 +23,6 @@ import com.bumptech.glide.RequestBuilder; import com.bumptech.glide.request.RequestOptions; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.event.PlaybackPositionEvent; -import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.feed.util.ImageResourceUtils; import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.util.ChapterUtils; @@ -94,7 +93,7 @@ public class CoverFragment extends Fragment { } private void displayMediaInfo(@NonNull Playable media) { - String pubDateStr = DateUtils.formatAbbrev(getActivity(), ((FeedMedia) media).getPubDate()); + String pubDateStr = DateUtils.formatAbbrev(getActivity(), media.getPubDate()); txtvPodcastTitle.setText(StringUtils.stripToEmpty(media.getFeedTitle()) + "\u00A0" + "・" diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java index 2e13bbd79..857a3b0fe 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java @@ -86,6 +86,10 @@ public class ItemDescriptionFragment extends Fragment { } webViewLoader = Maybe.<String>create(emitter -> { Playable media = controller.getMedia(); + if (media == null) { + emitter.onComplete(); + return; + } if (media instanceof FeedMedia) { FeedMedia feedMedia = ((FeedMedia) media); if (feedMedia.getItem() == null) { @@ -95,7 +99,8 @@ public class ItemDescriptionFragment extends Fragment { } Timeline timeline = new Timeline(getActivity(), media.getDescription(), media.getDuration()); emitter.onSuccess(timeline.processShownotes()); - }).subscribeOn(Schedulers.io()) + }) + .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(data -> { webvDescription.loadDataWithBaseURL("https://127.0.0.1", data, "text/html", diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 2850acc15..b92043c7d 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -385,7 +385,7 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi @Override public boolean onContextItemSelected(MenuItem item) { Log.d(TAG, "onContextItemSelected() called with: " + "item = [" + item + "]"); - if(!isVisible()) { + if (!isVisible() || recyclerAdapter == null) { return false; } FeedItem selectedItem = recyclerAdapter.getSelectedItem(); @@ -464,7 +464,7 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi int from = viewHolder.getAdapterPosition(); int to = target.getAdapterPosition(); Log.d(TAG, "move(" + from + ", " + to + ") in memory"); - if (from >= queue.size() || to >= queue.size()) { + if (from >= queue.size() || to >= queue.size() || from < 0 || to < 0) { return false; } queue.add(to, queue.remove(from)); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java index 0d9181d84..c6c00eb34 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java @@ -2,17 +2,14 @@ package de.danoeh.antennapod.fragment.gpodnet; import android.os.Bundle; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; + +import java.util.List; import de.danoeh.antennapod.core.sync.gpoddernet.GpodnetService; import de.danoeh.antennapod.core.sync.gpoddernet.GpodnetServiceException; import de.danoeh.antennapod.core.sync.gpoddernet.model.GpodnetPodcast; import de.danoeh.antennapod.core.sync.gpoddernet.model.GpodnetTag; -import de.danoeh.antennapod.activity.MainActivity; - -import java.util.List; - /** * Shows all podcasts from gpodder.net that belong to a specific tag. * Use the newInstance method of this class to create a new TagFragment. @@ -44,12 +41,6 @@ public class TagFragment extends PodcastListFragment { } @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - ((MainActivity) getActivity()).getSupportActionBar().setTitle(tag.getTitle()); - } - - @Override protected List<GpodnetPodcast> loadPodcastData(GpodnetService service) throws GpodnetServiceException { return service.getPodcastsForTag(tag, PODCAST_COUNT); } diff --git a/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java b/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java index 8b46a781f..9fd742d5f 100644 --- a/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java +++ b/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java @@ -154,6 +154,7 @@ public class EpisodeItemViewHolder extends RecyclerView.ViewHolder { Converter.getDurationStringLocalized(activity, media.getDuration()))); if (item.getState() == FeedItem.State.PLAYING || item.getState() == FeedItem.State.IN_PROGRESS) { int progress = (int) (100.0 * media.getPosition() / media.getDuration()); + int remainingTime = Math.max(media.getDuration() - media.getPosition(), 0); progressBar.setProgress(progress); position.setText(Converter.getDurationStringLong(media.getPosition())); position.setContentDescription(activity.getString(R.string.position, @@ -161,7 +162,7 @@ public class EpisodeItemViewHolder extends RecyclerView.ViewHolder { progressBar.setVisibility(View.VISIBLE); position.setVisibility(View.VISIBLE); if (UserPreferences.shouldShowRemainingTime()) { - duration.setText("-" + Converter.getDurationStringLong(media.getDuration() - media.getPosition())); + duration.setText(((remainingTime > 0) ? "-" : "") + Converter.getDurationStringLong(remainingTime)); duration.setContentDescription(activity.getString(R.string.chapter_duration, Converter.getDurationStringLocalized(activity, (media.getDuration() - media.getPosition())))); } @@ -194,14 +195,14 @@ public class EpisodeItemViewHolder extends RecyclerView.ViewHolder { private void updateDuration(PlaybackPositionEvent event) { int currentPosition = event.getPosition(); int timeDuration = event.getDuration(); - int remainingTime = event.getDuration() - event.getPosition(); + int remainingTime = Math.max(timeDuration - currentPosition, 0); Log.d(TAG, "currentPosition " + Converter.getDurationStringLong(currentPosition)); if (currentPosition == PlaybackService.INVALID_TIME || timeDuration == PlaybackService.INVALID_TIME) { Log.w(TAG, "Could not react to position observer update because of invalid time"); return; } if (UserPreferences.shouldShowRemainingTime()) { - duration.setText("-" + Converter.getDurationStringLong(remainingTime)); + duration.setText(((remainingTime > 0) ? "-" : "") + Converter.getDurationStringLong(remainingTime)); } else { duration.setText(Converter.getDurationStringLong(timeDuration)); } |