summaryrefslogtreecommitdiff
path: root/ui/episodes
diff options
context:
space:
mode:
authorByteHamster <ByteHamster@users.noreply.github.com>2024-03-25 23:45:09 +0100
committerGitHub <noreply@github.com>2024-03-25 23:45:09 +0100
commit130da46f5d9c598ca76f4f2127c08bb4ef225b34 (patch)
tree39007501eeecf0dd188d6f4fa57cd3c6dac6e4b0 /ui/episodes
parent160089d3fffeb788464e23b36bc476a3e0cde183 (diff)
downloadAntennaPod-130da46f5d9c598ca76f4f2127c08bb4ef225b34.zip
Move widget setup code to widget module (#6996)
Diffstat (limited to 'ui/episodes')
-rw-r--r--ui/episodes/README.md3
-rw-r--r--ui/episodes/build.gradle19
-rw-r--r--ui/episodes/src/main/java/de/danoeh/antennapod/ui/episodes/ImageResourceUtils.java66
-rw-r--r--ui/episodes/src/main/java/de/danoeh/antennapod/ui/episodes/PlaybackSpeedUtils.java60
-rw-r--r--ui/episodes/src/main/java/de/danoeh/antennapod/ui/episodes/TimeSpeedConverter.java23
5 files changed, 171 insertions, 0 deletions
diff --git a/ui/episodes/README.md b/ui/episodes/README.md
new file mode 100644
index 000000000..2ecd6faef
--- /dev/null
+++ b/ui/episodes/README.md
@@ -0,0 +1,3 @@
+# :ui:episodes
+
+Common classes that are needed everywhere we display information about episodes.
diff --git a/ui/episodes/build.gradle b/ui/episodes/build.gradle
new file mode 100644
index 000000000..9dfcd4903
--- /dev/null
+++ b/ui/episodes/build.gradle
@@ -0,0 +1,19 @@
+plugins {
+ id("com.android.library")
+}
+apply from: "../../common.gradle"
+
+android {
+ namespace "de.danoeh.antennapod.ui.episodes"
+}
+
+dependencies {
+ implementation project(":model")
+ implementation project(":storage:preferences")
+ implementation project(":ui:common")
+
+ annotationProcessor "androidx.annotation:annotation:$annotationVersion"
+ implementation "androidx.appcompat:appcompat:$appcompatVersion"
+ implementation "androidx.core:core:$coreVersion"
+ implementation "com.google.android.material:material:$googleMaterialVersion"
+}
diff --git a/ui/episodes/src/main/java/de/danoeh/antennapod/ui/episodes/ImageResourceUtils.java b/ui/episodes/src/main/java/de/danoeh/antennapod/ui/episodes/ImageResourceUtils.java
new file mode 100644
index 000000000..396df7b90
--- /dev/null
+++ b/ui/episodes/src/main/java/de/danoeh/antennapod/ui/episodes/ImageResourceUtils.java
@@ -0,0 +1,66 @@
+package de.danoeh.antennapod.ui.episodes;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import de.danoeh.antennapod.model.feed.FeedItem;
+import de.danoeh.antennapod.model.feed.FeedMedia;
+import de.danoeh.antennapod.storage.preferences.UserPreferences;
+import de.danoeh.antennapod.model.playback.Playable;
+
+/**
+ * Utility class to use the appropriate image resource based on {@link UserPreferences}.
+ */
+public final class ImageResourceUtils {
+
+ private ImageResourceUtils() {
+ }
+
+ /**
+ * returns the image location, does prefer the episode cover if available and enabled in settings.
+ */
+ @Nullable
+ public static String getEpisodeListImageLocation(@NonNull Playable playable) {
+ if (UserPreferences.getUseEpisodeCoverSetting()) {
+ return playable.getImageLocation();
+ } else {
+ return getFallbackImageLocation(playable);
+ }
+ }
+
+ /**
+ * returns the image location, does prefer the episode cover if available and enabled in settings.
+ */
+ @Nullable
+ public static String getEpisodeListImageLocation(@NonNull FeedItem feedItem) {
+ if (UserPreferences.getUseEpisodeCoverSetting()) {
+ return feedItem.getImageLocation();
+ } else {
+ return getFallbackImageLocation(feedItem);
+ }
+ }
+
+ @Nullable
+ public static String getFallbackImageLocation(@NonNull Playable playable) {
+ if (playable instanceof FeedMedia) {
+ FeedMedia media = (FeedMedia) playable;
+ FeedItem item = media.getItem();
+ if (item != null && item.getFeed() != null) {
+ return item.getFeed().getImageUrl();
+ } else {
+ return null;
+ }
+ } else {
+ return playable.getImageLocation();
+ }
+ }
+
+ @Nullable
+ public static String getFallbackImageLocation(@NonNull FeedItem feedItem) {
+ if (feedItem.getFeed() != null) {
+ return feedItem.getFeed().getImageUrl();
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/ui/episodes/src/main/java/de/danoeh/antennapod/ui/episodes/PlaybackSpeedUtils.java b/ui/episodes/src/main/java/de/danoeh/antennapod/ui/episodes/PlaybackSpeedUtils.java
new file mode 100644
index 000000000..e3c5ab672
--- /dev/null
+++ b/ui/episodes/src/main/java/de/danoeh/antennapod/ui/episodes/PlaybackSpeedUtils.java
@@ -0,0 +1,60 @@
+package de.danoeh.antennapod.ui.episodes;
+
+import de.danoeh.antennapod.model.feed.Feed;
+import de.danoeh.antennapod.model.feed.FeedMedia;
+import de.danoeh.antennapod.model.feed.FeedPreferences;
+import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.storage.preferences.UserPreferences;
+import de.danoeh.antennapod.model.playback.Playable;
+
+/**
+ * Utility class to use the appropriate playback speed based on {@link PlaybackPreferences}
+ */
+public abstract class PlaybackSpeedUtils {
+ /**
+ * Returns the currently configured playback speed for the specified media.
+ */
+ public static float getCurrentPlaybackSpeed(Playable media) {
+ float playbackSpeed = FeedPreferences.SPEED_USE_GLOBAL;
+ if (media instanceof FeedMedia) {
+ FeedMedia feedMedia = (FeedMedia) media;
+ if (PlaybackPreferences.getCurrentlyPlayingFeedMediaId() == feedMedia.getId()) {
+ playbackSpeed = PlaybackPreferences.getCurrentlyPlayingTemporaryPlaybackSpeed();
+ }
+ if (playbackSpeed == FeedPreferences.SPEED_USE_GLOBAL && feedMedia.getItem() != null) {
+ Feed feed = feedMedia.getItem().getFeed();
+ if (feed != null && feed.getPreferences() != null) {
+ playbackSpeed = feed.getPreferences().getFeedPlaybackSpeed();
+ }
+ }
+ }
+ if (playbackSpeed == FeedPreferences.SPEED_USE_GLOBAL) {
+ playbackSpeed = UserPreferences.getPlaybackSpeed();
+ }
+ return playbackSpeed;
+ }
+
+ /**
+ * Returns the currently configured skip silence for the specified media.
+ */
+ public static FeedPreferences.SkipSilence getCurrentSkipSilencePreference(Playable media) {
+ FeedPreferences.SkipSilence skipSilence = FeedPreferences.SkipSilence.GLOBAL;
+ if (media instanceof FeedMedia) {
+ FeedMedia feedMedia = (FeedMedia) media;
+ if (PlaybackPreferences.getCurrentlyPlayingFeedMediaId() == feedMedia.getId()) {
+ skipSilence = PlaybackPreferences.getCurrentlyPlayingTemporarySkipSilence();
+ }
+ if (skipSilence == FeedPreferences.SkipSilence.GLOBAL && feedMedia.getItem() != null) {
+ Feed feed = feedMedia.getItem().getFeed();
+ if (feed != null && feed.getPreferences() != null) {
+ skipSilence = feed.getPreferences().getFeedSkipSilence();
+ }
+ }
+ }
+ if (skipSilence == FeedPreferences.SkipSilence.GLOBAL) {
+ skipSilence = UserPreferences.isSkipSilence()
+ ? FeedPreferences.SkipSilence.AGGRESSIVE : FeedPreferences.SkipSilence.OFF;
+ }
+ return skipSilence;
+ }
+}
diff --git a/ui/episodes/src/main/java/de/danoeh/antennapod/ui/episodes/TimeSpeedConverter.java b/ui/episodes/src/main/java/de/danoeh/antennapod/ui/episodes/TimeSpeedConverter.java
new file mode 100644
index 000000000..450eca967
--- /dev/null
+++ b/ui/episodes/src/main/java/de/danoeh/antennapod/ui/episodes/TimeSpeedConverter.java
@@ -0,0 +1,23 @@
+package de.danoeh.antennapod.ui.episodes;
+
+import de.danoeh.antennapod.storage.preferences.UserPreferences;
+
+public class TimeSpeedConverter {
+ private final float speed;
+
+ public TimeSpeedConverter(float speed) {
+ this.speed = speed;
+ }
+
+ /** Convert millisecond according to the current playback speed
+ * @param time time to convert
+ * @return converted time (can be < 0 if time is < 0)
+ */
+ public int convert(int time) {
+ boolean timeRespectsSpeed = UserPreferences.timeRespectsSpeed();
+ if (time > 0 && timeRespectsSpeed) {
+ return (int)(time / speed);
+ }
+ return time;
+ }
+}