diff options
author | Tom Hennen <TomHennen@users.noreply.github.com> | 2016-03-24 10:16:54 -0400 |
---|---|---|
committer | Tom Hennen <TomHennen@users.noreply.github.com> | 2016-03-24 10:16:54 -0400 |
commit | 07c2818cc5d67f27623673b94a4759558d42d8ce (patch) | |
tree | f07177b49a73a3bde88a924f33863e326fb30b55 /core | |
parent | 8a0f6cb5296ed2e2bf4d360b1c8e1dabb193bb88 (diff) | |
parent | aa56d6822aee8a1a98555aa9c0203c3efd4608b5 (diff) | |
download | AntennaPod-07c2818cc5d67f27623673b94a4759558d42d8ce.zip |
Merge pull request #1798 from ByteHamster/statistics_page
Added statistics function
Diffstat (limited to 'core')
3 files changed, 99 insertions, 0 deletions
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 fc7d83978..278a8c42b 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 @@ -924,6 +924,88 @@ public final class DBReader { } /** + * Searches the DB for statistics + * + * @return The StatisticsInfo object + */ + public static StatisticsData getStatistics() { + PodDBAdapter adapter = PodDBAdapter.getInstance(); + adapter.open(); + + long totalTime = 0; + List<StatisticsItem> feedTime = new ArrayList<>(); + + List<Feed> feeds = getFeedList(); + for (Feed feed : feeds) { + long feedPlayedTime = 0; + long feedTotalTime = 0; + long episodes = 0; + long episodesStarted = 0; + List<FeedItem> items = getFeed(feed.getId()).getItems(); + for(FeedItem item : items) { + FeedMedia media = item.getMedia(); + if(media == null) { + continue; + } + + if(item.isPlayed()) { + feedPlayedTime += media.getDuration() / 1000; + } else { + feedPlayedTime += media.getPosition() / 1000; + } + if(item.isPlayed() || media.getPosition() != 0) { + episodesStarted++; + } + feedTotalTime += media.getDuration() / 1000; + episodes++; + } + feedTime.add(new StatisticsItem( + feed, feedTotalTime, feedPlayedTime, episodes, episodesStarted)); + totalTime += feedPlayedTime; + } + + Collections.sort(feedTime, (item1, item2) -> { + if(item1.timePlayed > item2.timePlayed) { + return -1; + } else if(item1.timePlayed < item2.timePlayed) { + return 1; + } else { + return 0; + } + }); + + adapter.close(); + return new StatisticsData(totalTime, feedTime); + } + + public static class StatisticsData { + public long totalTime; + public List<StatisticsItem> feedTime; + + public StatisticsData(long totalTime, List<StatisticsItem> feedTime) { + this.totalTime = totalTime; + this.feedTime = feedTime; + } + } + + public static class StatisticsItem { + public Feed feed; + public long time; + public long timePlayed; + public long episodes; + public long episodesStarted; + + public StatisticsItem(Feed feed, long time, long timePlayed, + long episodes, long episodesStarted) { + this.feed = feed; + this.time = time; + this.timePlayed = timePlayed; + this.episodes = episodes; + this.episodesStarted = episodesStarted; + } + } + + /** * Returns the flattr queue as a List of FlattrThings. The list consists of Feeds and FeedItems. * * @return The flattr queue as a List. 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 5b046d7a7..70a180913 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 @@ -3,6 +3,8 @@ package de.danoeh.antennapod.core.util; import android.content.Context; import android.util.Log; +import java.util.Locale; + import de.danoeh.antennapod.core.R; /** Provides methods for converting various units. */ @@ -120,6 +122,16 @@ public final class Converter { } /** + * Converts seconds to a localized representation + * @param time The time in seconds + * @return "HH:MM hours" + */ + public static String shortLocalizedDuration(Context context, long time) { + float hours = (float) time / 3600f; + return String.format(Locale.getDefault(), "%.1f ", hours) + context.getString(R.string.time_hours); + } + + /** * Converts the volume as read as the progress from a SeekBar scaled to 100 and as saved in * UserPreferences to the format taken by setVolume methods. * @param progress integer between 0 to 100 taken from the SeekBar progress diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index d363a5cc0..eaf6d09fb 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -6,6 +6,7 @@ <!-- Activitiy and fragment titles --> <string name="app_name">AntennaPod</string> <string name="feeds_label">Feeds</string> + <string name="statistics_label">Statistics</string> <string name="add_feed_label">Add Podcast</string> <string name="podcasts_label">PODCASTS</string> <string name="episodes_label">Episodes</string> @@ -33,6 +34,10 @@ <string name="recently_published_episodes_label">Recently published</string> <string name="episode_filter_label">Show only new Episodes</string> + <!-- Statistics fragment --> + <string name="total_time_listened_to_podcasts">Total time of podcasts played:</string> + <string name="statistics_details_dialog">%1$d out of %2$d episodes started.\n\nPlayed %3$s out of %4$s.</string> + <!-- Main activity --> <string name="drawer_open">Open menu</string> <string name="drawer_close">Close menu</string> |