From 843892e34fb2ca04bf3f5b0f6fce7e45285e0ecd Mon Sep 17 00:00:00 2001 From: Tony Tam <149837+tonytamsf@users.noreply.github.com> Date: Fri, 2 Apr 2021 05:30:21 -0700 Subject: Safer remain time - default to zero when the media duration is wrong (#5043) --- .../java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java | 4 ++-- .../danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) (limited to 'app/src/main/java/de') 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 3efd41de9..b822d21cb 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java @@ -433,7 +433,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"); @@ -442,7 +442,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)); } 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)); } -- cgit v1.2.3