summaryrefslogtreecommitdiff
path: root/app/src/main/java/de
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2016-03-21 13:00:12 +0100
committerByteHamster <info@bytehamster.com>2016-03-24 00:54:24 +0100
commitaa56d6822aee8a1a98555aa9c0203c3efd4608b5 (patch)
treec6f1da5949d3ca4d7138da62702aec344f84660c /app/src/main/java/de
parent8d2ec19cbe05297afa887cc2263347f112aae3e6 (diff)
downloadAntennaPod-aa56d6822aee8a1a98555aa9c0203c3efd4608b5.zip
Added statistics function
Fixes #1743
Diffstat (limited to 'app/src/main/java/de')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/StatisticsActivity.java107
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/StatisticsListAdapter.java97
-rw-r--r--app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java8
3 files changed, 212 insertions, 0 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/StatisticsActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/StatisticsActivity.java
new file mode 100644
index 000000000..0254617e4
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/activity/StatisticsActivity.java
@@ -0,0 +1,107 @@
+package de.danoeh.antennapod.activity;
+
+import android.os.Bundle;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AppCompatActivity;
+import android.util.Log;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ListView;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.adapter.StatisticsListAdapter;
+import de.danoeh.antennapod.core.preferences.UserPreferences;
+import de.danoeh.antennapod.core.storage.DBReader;
+import de.danoeh.antennapod.core.util.Converter;
+import rx.Observable;
+import rx.Subscription;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
+
+/**
+ * Displays the 'statistics' screen
+ */
+public class StatisticsActivity extends AppCompatActivity
+ implements AdapterView.OnItemClickListener {
+
+ private static final String TAG = StatisticsActivity.class.getSimpleName();
+
+ private Subscription subscription;
+ private TextView totalTimeTextView;
+ private ListView feedStatisticsList;
+ private ProgressBar progressBar;
+ private StatisticsListAdapter listAdapter;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ setTheme(UserPreferences.getTheme());
+ super.onCreate(savedInstanceState);
+ getSupportActionBar().setDisplayShowHomeEnabled(true);
+ setContentView(R.layout.statistics_activity);
+
+ totalTimeTextView = (TextView) findViewById(R.id.total_time);
+ feedStatisticsList = (ListView) findViewById(R.id.statistics_list);
+ progressBar = (ProgressBar) findViewById(R.id.progressBar);
+ listAdapter = new StatisticsListAdapter(this);
+ feedStatisticsList.setAdapter(listAdapter);
+ feedStatisticsList.setOnItemClickListener(this);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ progressBar.setVisibility(View.VISIBLE);
+ totalTimeTextView.setVisibility(View.GONE);
+ feedStatisticsList.setVisibility(View.GONE);
+ loadStats();
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ finish();
+ return true;
+ } else {
+ return super.onOptionsItemSelected(item);
+ }
+ }
+
+ private void loadStats() {
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
+ subscription = Observable.fromCallable(() -> DBReader.getStatistics())
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(result -> {
+ if (result != null) {
+ totalTimeTextView.setText(Converter
+ .shortLocalizedDuration(this, result.totalTime));
+ listAdapter.update(result.feedTime);
+ progressBar.setVisibility(View.GONE);
+ totalTimeTextView.setVisibility(View.VISIBLE);
+ feedStatisticsList.setVisibility(View.VISIBLE);
+ }
+ }, error -> {
+ Log.e(TAG, Log.getStackTraceString(error));
+ });
+ }
+
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ DBReader.StatisticsItem stats = listAdapter.getItem(position);
+
+ AlertDialog.Builder dialog = new AlertDialog.Builder(this);
+ dialog.setTitle(stats.feed.getTitle());
+ dialog.setMessage(getString(R.string.statistics_details_dialog,
+ stats.episodesStarted,
+ stats.episodes,
+ Converter.shortLocalizedDuration(this, stats.timePlayed),
+ Converter.shortLocalizedDuration(this, stats.time)));
+ dialog.setPositiveButton(android.R.string.ok, null);
+ dialog.show();
+ }
+}
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/StatisticsListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/StatisticsListAdapter.java
new file mode 100644
index 000000000..7fb1472ad
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/StatisticsListAdapter.java
@@ -0,0 +1,97 @@
+package de.danoeh.antennapod.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.bumptech.glide.Glide;
+import com.joanzapata.iconify.widget.IconTextView;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.core.feed.Feed;
+import de.danoeh.antennapod.core.glide.ApGlideSettings;
+import de.danoeh.antennapod.core.storage.DBReader;
+import de.danoeh.antennapod.core.util.Converter;
+
+/**
+ * Adapter for the statistics list
+ */
+public class StatisticsListAdapter extends BaseAdapter {
+ private Context context;
+ List<DBReader.StatisticsItem> feedTime = new ArrayList<>();
+
+ public StatisticsListAdapter(Context context) {
+ this.context = context;
+ }
+
+
+ @Override
+ public int getCount() {
+ return feedTime.size();
+ }
+
+ @Override
+ public DBReader.StatisticsItem getItem(int position) {
+ return feedTime.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return feedTime.get(position).feed.getId();
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ StatisticsHolder holder;
+ Feed feed = feedTime.get(position).feed;
+
+ if (convertView == null) {
+ holder = new StatisticsHolder();
+ LayoutInflater inflater = (LayoutInflater) context
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+ convertView = inflater.inflate(R.layout.statistics_listitem, parent, false);
+
+ holder.image = (ImageView) convertView.findViewById(R.id.imgvCover);
+ holder.title = (TextView) convertView.findViewById(R.id.txtvTitle);
+ holder.time = (TextView) convertView.findViewById(R.id.txtvTime);
+ convertView.setTag(holder);
+ } else {
+ holder = (StatisticsHolder) convertView.getTag();
+ }
+
+ Glide.with(context)
+ .load(feed.getImageUri())
+ .placeholder(R.color.light_gray)
+ .error(R.color.light_gray)
+ .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY)
+ .fitCenter()
+ .dontAnimate()
+ .into(holder.image);
+
+ holder.title.setText(feed.getTitle());
+ holder.time.setText(Converter.shortLocalizedDuration(context,
+ feedTime.get(position).timePlayed));
+ return convertView;
+ }
+
+ public void update(List<DBReader.StatisticsItem> feedTime) {
+ this.feedTime = feedTime;
+ notifyDataSetChanged();
+ }
+
+ static class StatisticsHolder {
+ ImageView image;
+ TextView title;
+ TextView time;
+ }
+
+}
diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java
index 152412089..5ad1b624a 100644
--- a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java
+++ b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java
@@ -49,6 +49,7 @@ import de.danoeh.antennapod.activity.DirectoryChooserActivity;
import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.activity.PreferenceActivity;
import de.danoeh.antennapod.activity.PreferenceActivityGingerbread;
+import de.danoeh.antennapod.activity.StatisticsActivity;
import de.danoeh.antennapod.asynctask.OpmlExportWorker;
import de.danoeh.antennapod.core.preferences.GpodnetPreferences;
import de.danoeh.antennapod.core.preferences.UserPreferences;
@@ -75,6 +76,7 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc
public static final String PREF_FLATTR_REVOKE = "prefRevokeAccess";
public static final String PREF_AUTO_FLATTR_PREFS = "prefAutoFlattrPrefs";
public static final String PREF_OPML_EXPORT = "prefOpmlExport";
+ public static final String STATISTICS = "statistics";
public static final String PREF_ABOUT = "prefAbout";
public static final String PREF_CHOOSE_DATA_DIR = "prefChooseDataDir";
public static final String AUTO_DL_PREF_SCREEN = "prefAutoDownloadSettings";
@@ -153,6 +155,12 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc
return true;
}
);
+ ui.findPreference(PreferenceController.STATISTICS).setOnPreferenceClickListener(
+ preference -> {
+ activity.startActivity(new Intent(activity, StatisticsActivity.class));
+ return true;
+ }
+ );
ui.findPreference(PreferenceController.PREF_OPML_EXPORT).setOnPreferenceClickListener(
preference -> {
new OpmlExportWorker(activity).executeAsync();