summaryrefslogtreecommitdiff
path: root/core/src/main
diff options
context:
space:
mode:
authorTom Hennen <TomHennen@users.noreply.github.com>2016-03-24 10:16:54 -0400
committerTom Hennen <TomHennen@users.noreply.github.com>2016-03-24 10:16:54 -0400
commit07c2818cc5d67f27623673b94a4759558d42d8ce (patch)
treef07177b49a73a3bde88a924f33863e326fb30b55 /core/src/main
parent8a0f6cb5296ed2e2bf4d360b1c8e1dabb193bb88 (diff)
parentaa56d6822aee8a1a98555aa9c0203c3efd4608b5 (diff)
downloadAntennaPod-07c2818cc5d67f27623673b94a4759558d42d8ce.zip
Merge pull request #1798 from ByteHamster/statistics_page
Added statistics function
Diffstat (limited to 'core/src/main')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java82
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/Converter.java12
-rw-r--r--core/src/main/res/values/strings.xml5
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>