From 637230e382a67ae8a0c7d889a773edb64bb74181 Mon Sep 17 00:00:00 2001 From: Erik Johnson Date: Wed, 15 Nov 2023 13:47:51 -0600 Subject: Fix seeking to end using seek bar (#6763) Merging #6074 has caused a new edge case for VBR audio files, in which using the seek bar to seek to the end of an episode sometimes hits the new code path, and the `skip()` function is called. Because `skip()` invokes `endPlayback()` with `hasEnded` set to `false`, post-processing tasks are not executed unless the pre-seek position falls within the "Smart mark as played" range. If "Smart mark as played" is set to `Disabled`, or the pre-seek position is outside that range, then the episode is not marked as played, and not removed from queue. This commit fixes that edge case by replacing `skip()` with a direct call to `endPlayback()`, with `hasEnded` set to `true`. --- .../main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core/src/main') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java index e7d7d10c9..69c632c4f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java @@ -345,7 +345,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { if (t >= getDuration()) { Log.d(TAG, "Seek reached end of file, skipping to next episode"); - skip(); + endPlayback(true, true, true, true); return; } -- cgit v1.2.3 From ee554d0306a06903fa88be6c5af7954315685ed6 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Tue, 28 Nov 2023 20:26:29 +0100 Subject: AntennaPod Echo (#6780) --- .../danoeh/antennapod/core/storage/DBReader.java | 11 ++++++++ .../de/danoeh/antennapod/core/util/Converter.java | 29 ++++++++++++++++------ core/src/main/res/drawable/bg_blue_gradient.xml | 10 ++++++++ .../src/main/res/drawable/ic_arrow_right_white.xml | 13 ++++++++++ core/src/main/res/values/colors.xml | 5 ++++ 5 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 core/src/main/res/drawable/bg_blue_gradient.xml create mode 100644 core/src/main/res/drawable/ic_arrow_right_white.xml (limited to 'core/src/main') diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java index d83557b0c..084b3a7ad 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java @@ -806,6 +806,17 @@ public final class DBReader { return result; } + public static long getTimeBetweenReleaseAndPlayback(long timeFilterFrom, long timeFilterTo) { + PodDBAdapter adapter = PodDBAdapter.getInstance(); + adapter.open(); + try (Cursor cursor = adapter.getTimeBetweenReleaseAndPlayback(timeFilterFrom, timeFilterTo)) { + cursor.moveToFirst(); + long result = Long.parseLong(cursor.getString(0)); + adapter.close(); + return result; + } + } + /** * Returns data necessary for displaying the navigation drawer. This includes * the list of subscriptions, the number of items in the queue and the number of unread diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java b/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java index 4014937bd..d9c4a5098 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java @@ -2,6 +2,7 @@ package de.danoeh.antennapod.core.util; import android.content.Context; +import android.content.res.Resources; import java.util.Locale; import de.danoeh.antennapod.core.R; @@ -82,17 +83,31 @@ public final class Converter { * Converts milliseconds to a localized string containing hours and minutes. */ public static String getDurationStringLocalized(Context context, long duration) { - int h = (int) (duration / HOURS_MIL); - int rest = (int) (duration - h * HOURS_MIL); - int m = rest / MINUTES_MIL; + return getDurationStringLocalized(context.getResources(), duration); + } + public static String getDurationStringLocalized(Resources resources, long duration) { String result = ""; + int h = (int) (duration / HOURS_MIL); + int d = h / 24; + if (d > 0) { + String days = resources.getQuantityString(R.plurals.time_days_quantified, d, d); + result += days.replace(" ", "\u00A0") + " "; + h -= d * 24; + } + int rest = (int) (duration - (d * 24 + h) * HOURS_MIL); + int m = rest / MINUTES_MIL; if (h > 0) { - String hours = context.getResources().getQuantityString(R.plurals.time_hours_quantified, h, h); - result += hours + " "; + String hours = resources.getQuantityString(R.plurals.time_hours_quantified, h, h); + result += hours.replace(" ", "\u00A0"); + if (d == 0) { + result += " "; + } + } + if (d == 0) { + String minutes = resources.getQuantityString(R.plurals.time_minutes_quantified, m, m); + result += minutes.replace(" ", "\u00A0"); } - String minutes = context.getResources().getQuantityString(R.plurals.time_minutes_quantified, m, m); - result += minutes; return result; } diff --git a/core/src/main/res/drawable/bg_blue_gradient.xml b/core/src/main/res/drawable/bg_blue_gradient.xml new file mode 100644 index 000000000..8ae045b6d --- /dev/null +++ b/core/src/main/res/drawable/bg_blue_gradient.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/core/src/main/res/drawable/ic_arrow_right_white.xml b/core/src/main/res/drawable/ic_arrow_right_white.xml new file mode 100644 index 000000000..4f33bed08 --- /dev/null +++ b/core/src/main/res/drawable/ic_arrow_right_white.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/core/src/main/res/values/colors.xml b/core/src/main/res/values/colors.xml index 553da121a..ad835faf4 100644 --- a/core/src/main/res/values/colors.xml +++ b/core/src/main/res/values/colors.xml @@ -23,4 +23,9 @@ #0078C2 #3D8BFF + + #364ff3 + #2E6FF6 + #1EB0FC + #16d0ff -- cgit v1.2.3