diff options
author | ByteHamster <info@bytehamster.com> | 2016-08-28 18:35:05 +0200 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2017-04-15 09:54:09 +0200 |
commit | 416117515c4e52727f91987e5b537256da34f09a (patch) | |
tree | ef441172cfc052f9d2674137c5cdf9a298ca046b /core/src | |
parent | 639ff81f8c4d8d4648fe4a52bd1c7d05b439d7e2 (diff) | |
download | AntennaPod-416117515c4e52727f91987e5b537256da34f09a.zip |
Allow choosing between getDuration and getPlayedDuration
Diffstat (limited to 'core/src')
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java | 96 | ||||
-rw-r--r-- | core/src/main/res/values/strings.xml | 3 |
2 files changed, 81 insertions, 18 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 1d57d902c..8b5859eae 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 @@ -927,64 +927,107 @@ public final class DBReader { /** * Searches the DB for statistics * + * @param sortByCountAll If true, the statistic items will be sorted according to the + * countAll calculation time * @return The StatisticsInfo object */ - public static StatisticsData getStatistics() { + public static StatisticsData getStatistics(boolean sortByCountAll) { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); + long totalTimeCountAll = 0; long totalTime = 0; List<StatisticsItem> feedTime = new ArrayList<>(); List<Feed> feeds = getFeedList(); for (Feed feed : feeds) { + long feedPlayedTimeCountAll = 0; long feedPlayedTime = 0; long feedTotalTime = 0; long episodes = 0; long episodesStarted = 0; + long episodesStartedIncludingMarked = 0; List<FeedItem> items = getFeed(feed.getId()).getItems(); - for(FeedItem item : items) { + for (FeedItem item : items) { FeedMedia media = item.getMedia(); - if(media == null) { + if (media == null) { continue; } // played duration used to be reset when the item is added to the playback history - if(media.getPlaybackCompletionDate() != null) { + if (media.getPlaybackCompletionDate() != null) { feedPlayedTime += media.getDuration() / 1000; } feedPlayedTime += media.getPlayedDuration() / 1000; + + if (item.isPlayed()) { + feedPlayedTimeCountAll += media.getDuration() / 1000; + } else { + feedPlayedTimeCountAll += media.getPosition() / 1000; + } + if (media.getPlaybackCompletionDate() != null || media.getPlayedDuration() > 0) { episodesStarted++; } + + if (item.isPlayed() || media.getPosition() != 0) { + episodesStartedIncludingMarked++; + } + feedTotalTime += media.getDuration() / 1000; episodes++; } feedTime.add(new StatisticsItem( - feed, feedTotalTime, feedPlayedTime, episodes, episodesStarted)); + feed, feedTotalTime, feedPlayedTime, feedPlayedTimeCountAll, episodes, + episodesStarted, episodesStartedIncludingMarked)); totalTime += feedPlayedTime; + totalTimeCountAll += feedPlayedTimeCountAll; } - Collections.sort(feedTime, (item1, item2) -> { - if(item1.timePlayed > item2.timePlayed) { - return -1; - } else if(item1.timePlayed < item2.timePlayed) { - return 1; - } else { - return 0; - } - }); + if (sortByCountAll) { + Collections.sort(feedTime, (item1, item2) -> + compareLong(item1.timePlayedCountAll, item2.timePlayedCountAll)); + } else { + Collections.sort(feedTime, (item1, item2) -> + compareLong(item1.timePlayed, item2.timePlayed)); + } adapter.close(); - return new StatisticsData(totalTime, feedTime); + return new StatisticsData(totalTime, totalTimeCountAll, feedTime); + } + + /** + * Compares two {@code long} values. Long.compare() is not available before API 19 + * + * @return 0 if long1 = long2, less than 0 if long1 < long2, + * and greater than 0 if long1 > long2. + */ + private static int compareLong(long long1, long long2) { + if (long1 > long2) { + return -1; + } else if (long1 < long2) { + return 1; + } else { + return 0; + } } public static class StatisticsData { + /** + * Simply sums up time of podcasts that are marked as played + */ + public long totalTimeCountAll; + + /** + * Respects speed, listening twice, ... + */ public long totalTime; + public List<StatisticsItem> feedTime; - public StatisticsData(long totalTime, List<StatisticsItem> feedTime) { + public StatisticsData(long totalTime, long totalTimeCountAll, List<StatisticsItem> feedTime) { this.totalTime = totalTime; + this.totalTimeCountAll = totalTimeCountAll; this.feedTime = feedTime; } } @@ -992,17 +1035,34 @@ public final class DBReader { public static class StatisticsItem { public Feed feed; public long time; + + /** + * Respects speed, listening twice, ... + */ public long timePlayed; + /** + * Simply sums up time of podcasts that are marked as played + */ + public long timePlayedCountAll; public long episodes; + /** + * Episodes that are actually played + */ public long episodesStarted; + /** + * All episodes that are marked as played (or have position != 0) + */ + public long episodesStartedIncludingMarked; - public StatisticsItem(Feed feed, long time, long timePlayed, - long episodes, long episodesStarted) { + public StatisticsItem(Feed feed, long time, long timePlayed, long timePlayedCountAll, + long episodes, long episodesStarted, long episodesStartedIncludingMarked) { this.feed = feed; this.time = time; this.timePlayed = timePlayed; + this.timePlayedCountAll = timePlayedCountAll; this.episodes = episodes; this.episodesStarted = episodesStarted; + this.episodesStartedIncludingMarked = episodesStartedIncludingMarked; } } diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index ebddeb243..f0388b174 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -31,6 +31,9 @@ <!-- 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> + <string name="calculation_type">Calculation type</string> + <string name="calculation_type_normal">The time you actually played podcasts, respecting playback speed</string> + <string name="calculation_type_count_all">Sum up all played podcast durations, including those just marked as played</string> <!-- Main activity --> <string name="drawer_open">Open menu</string> |