diff options
author | ByteHamster <ByteHamster@users.noreply.github.com> | 2024-03-25 23:45:09 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-25 23:45:09 +0100 |
commit | 130da46f5d9c598ca76f4f2127c08bb4ef225b34 (patch) | |
tree | 39007501eeecf0dd188d6f4fa57cd3c6dac6e4b0 /ui/episodes | |
parent | 160089d3fffeb788464e23b36bc476a3e0cde183 (diff) | |
download | AntennaPod-130da46f5d9c598ca76f4f2127c08bb4ef225b34.zip |
Move widget setup code to widget module (#6996)
Diffstat (limited to 'ui/episodes')
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; + } +} |