summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authoravirajrsingh <69088913+avirajrsingh@users.noreply.github.com>2020-10-30 00:11:41 +0530
committerGitHub <noreply@github.com>2020-10-29 19:41:41 +0100
commit4a4392e79739aeab15eb53deab1840be814f3ecf (patch)
tree96747cbe321c2dc8216fb790b4c34e57ef97cd77 /app
parent3a8798262806fed78eca40c757003973cd102d84 (diff)
downloadAntennaPod-4a4392e79739aeab15eb53deab1840be814f3ecf.zip
Add podcast specific statistics to podcast info screen (#4601)
Diffstat (limited to 'app')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java92
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackStatisticsFragment.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/StatisticsFragment.java14
-rw-r--r--app/src/main/res/layout/feedinfo.xml180
4 files changed, 192 insertions, 96 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java
index 317fecfcb..5fd2c3c8d 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java
@@ -18,6 +18,7 @@ import androidx.appcompat.widget.Toolbar;
import androidx.documentfile.provider.DocumentFile;
import androidx.fragment.app.Fragment;
import android.text.TextUtils;
+import android.text.format.Formatter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -25,6 +26,7 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
@@ -43,22 +45,24 @@ import de.danoeh.antennapod.core.glide.FastBlurTransformation;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBTasks;
import de.danoeh.antennapod.core.storage.DownloadRequestException;
+import de.danoeh.antennapod.core.storage.StatisticsItem;
+import de.danoeh.antennapod.core.util.Converter;
import de.danoeh.antennapod.core.util.IntentUtils;
-import de.danoeh.antennapod.core.util.LangUtils;
import de.danoeh.antennapod.core.util.ThemeUtils;
import de.danoeh.antennapod.core.util.syndication.HtmlToPlainText;
+import de.danoeh.antennapod.fragment.preferences.StatisticsFragment;
import de.danoeh.antennapod.menuhandler.FeedMenuHandler;
import de.danoeh.antennapod.view.ToolbarIconTintManager;
import io.reactivex.Completable;
import io.reactivex.Maybe;
import io.reactivex.MaybeOnSubscribe;
import io.reactivex.Observable;
-import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
-import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
/**
* Displays information about a feed.
@@ -71,13 +75,15 @@ public class FeedInfoFragment extends Fragment {
private Feed feed;
private Disposable disposable;
+ private Disposable disposableStatistics;
private ImageView imgvCover;
private TextView txtvTitle;
private TextView txtvDescription;
- private TextView lblLanguage;
- private TextView txtvLanguage;
- private TextView lblAuthor;
- private TextView txtvAuthor;
+ private TextView lblStatistics;
+ private TextView txtvPodcastTime;
+ private TextView txtvPodcastSpace;
+ private TextView txtvPodcastEpisodeCount;
+ private Button btnvOpenStatistics;
private TextView txtvUrl;
private TextView txtvAuthorHeader;
private ImageView imgvBackground;
@@ -144,13 +150,23 @@ public class FeedInfoFragment extends Fragment {
imgvBackground.setColorFilter(new LightingColorFilter(0xff828282, 0x000000));
txtvDescription = root.findViewById(R.id.txtvDescription);
- lblLanguage = root.findViewById(R.id.lblLanguage);
- txtvLanguage = root.findViewById(R.id.txtvLanguage);
- lblAuthor = root.findViewById(R.id.lblAuthor);
- txtvAuthor = root.findViewById(R.id.txtvDetailsAuthor);
+ lblStatistics = root.findViewById(R.id.lblStatistics);
+ txtvPodcastSpace = root.findViewById(R.id.txtvPodcastSpaceUsed);
+ txtvPodcastEpisodeCount = root.findViewById(R.id.txtvPodcastEpisodeCount);
+ txtvPodcastTime = root.findViewById(R.id.txtvPodcastTime);
+ btnvOpenStatistics = root.findViewById(R.id.btnvOpenStatistics);
txtvUrl = root.findViewById(R.id.txtvUrl);
txtvUrl.setOnClickListener(copyUrlToClipboard);
+
+ btnvOpenStatistics.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ StatisticsFragment fragment = new StatisticsFragment();
+ ((MainActivity) getActivity()).loadChildFragment(fragment, TransitionEffect.SLIDE);
+ }
+ });
+
return root;
}
@@ -170,6 +186,7 @@ public class FeedInfoFragment extends Fragment {
.subscribe(result -> {
feed = result;
showFeed();
+ loadStatistics();
}, error -> Log.d(TAG, Log.getStackTraceString(error)), () -> { });
}
@@ -212,30 +229,61 @@ public class FeedInfoFragment extends Fragment {
txtvDescription.setText(description);
if (!TextUtils.isEmpty(feed.getAuthor())) {
- txtvAuthor.setText(feed.getAuthor());
txtvAuthorHeader.setText(feed.getAuthor());
- } else {
- lblAuthor.setVisibility(View.GONE);
- txtvAuthor.setVisibility(View.GONE);
- }
- if (!TextUtils.isEmpty(feed.getLanguage())) {
- txtvLanguage.setText(LangUtils.getLanguageString(feed.getLanguage()));
- } else {
- lblLanguage.setVisibility(View.GONE);
- txtvLanguage.setVisibility(View.GONE);
}
+
txtvUrl.setText(feed.getDownload_url() + " {fa-paperclip}");
Iconify.addIcons(txtvUrl);
-
getActivity().invalidateOptionsMenu();
}
+ private void loadStatistics() {
+ if (disposableStatistics != null) {
+ disposableStatistics.dispose();
+ }
+
+ disposableStatistics =
+ Observable.fromCallable(() -> {
+ List<StatisticsItem> statisticsData = DBReader.getStatistics();
+
+ for (StatisticsItem statisticsItem : statisticsData) {
+ if (statisticsItem.feed.getId() == feed.getId()) {
+ return statisticsItem;
+ }
+ }
+
+ return null;
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(result -> {
+ txtvPodcastTime.setText(Converter.shortLocalizedDuration(
+ getContext(), result.timePlayed));
+ txtvPodcastSpace.setText(Formatter.formatShortFileSize(
+ getContext(), result.totalDownloadSize));
+ txtvPodcastEpisodeCount.setText(String.format(Locale.getDefault(),
+ "%d%s", result.episodesDownloadCount,
+ getString(R.string.episodes_suffix)));
+ }, error -> {
+ Log.d(TAG, Log.getStackTraceString(error));
+ lblStatistics.setVisibility(View.GONE);
+ txtvPodcastSpace.setVisibility(View.GONE);
+ txtvPodcastTime.setVisibility(View.GONE);
+ txtvPodcastEpisodeCount.setVisibility(View.GONE);
+ btnvOpenStatistics.setVisibility(View.GONE);
+ });
+ }
+
@Override
public void onDestroy() {
super.onDestroy();
if (disposable != null) {
disposable.dispose();
}
+
+ if (disposableStatistics != null) {
+ disposableStatistics.dispose();
+ }
}
@Override
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackStatisticsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackStatisticsFragment.java
index 4819e0b94..208ede8cc 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackStatisticsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackStatisticsFragment.java
@@ -22,7 +22,6 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.activity.PreferenceActivity;
import de.danoeh.antennapod.adapter.PlaybackStatisticsListAdapter;
import de.danoeh.antennapod.core.dialog.ConfirmationDialog;
import de.danoeh.antennapod.core.preferences.UserPreferences;
@@ -79,7 +78,6 @@ public class PlaybackStatisticsFragment extends Fragment {
@Override
public void onStart() {
super.onStart();
- ((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.statistics_label);
refreshStatistics();
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/StatisticsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/StatisticsFragment.java
index b455a10ee..2c72ab75b 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/StatisticsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/StatisticsFragment.java
@@ -6,6 +6,7 @@ import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
+import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;
@@ -30,6 +31,7 @@ public class StatisticsFragment extends Fragment {
private TabLayout tabLayout;
private ViewPager2 viewPager;
+ private Toolbar toolbar;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -43,6 +45,7 @@ public class StatisticsFragment extends Fragment {
View rootView = inflater.inflate(R.layout.pager_fragment, container, false);
viewPager = rootView.findViewById(R.id.viewpager);
+ toolbar = rootView.findViewById(R.id.toolbar);
viewPager.setAdapter(new StatisticsPagerAdapter(this));
// Give the TabLayout the ViewPager
tabLayout = rootView.findViewById(R.id.sliding_tabs);
@@ -59,7 +62,12 @@ public class StatisticsFragment extends Fragment {
}
}).attach();
- rootView.findViewById(R.id.toolbar).setVisibility(View.GONE);
+ if (getActivity().getClass() == PreferenceActivity.class) {
+ rootView.findViewById(R.id.toolbar).setVisibility(View.GONE);
+ } else {
+ toolbar.setTitle(getString(R.string.statistics_label));
+ toolbar.setNavigationOnClickListener(v -> getParentFragmentManager().popBackStack());
+ }
return rootView;
}
@@ -67,7 +75,9 @@ public class StatisticsFragment extends Fragment {
@Override
public void onStart() {
super.onStart();
- ((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.statistics_label);
+ if (getActivity().getClass() == PreferenceActivity.class) {
+ ((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.statistics_label);
+ }
}
public static class StatisticsPagerAdapter extends FragmentStateAdapter {
diff --git a/app/src/main/res/layout/feedinfo.xml b/app/src/main/res/layout/feedinfo.xml
index dd349c15c..a09733164 100644
--- a/app/src/main/res/layout/feedinfo.xml
+++ b/app/src/main/res/layout/feedinfo.xml
@@ -3,7 +3,8 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent" android:layout_height="match_parent">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBar"
@@ -16,34 +17,35 @@
android:layout_height="match_parent"
android:background="?android:attr/windowBackground"
app:contentScrim="?android:attr/windowBackground"
- app:scrimAnimationDuration="200"
- app:layout_scrollFlags="scroll|exitUntilCollapsed">
+ app:layout_scrollFlags="scroll|exitUntilCollapsed"
+ app:scrimAnimationDuration="200">
<ImageView
android:id="@+id/imgvBackground"
style="@style/BigBlurryBackground"
- android:background="@color/image_readability_tint"
android:layout_width="match_parent"
android:layout_height="232dp"
+ android:background="@color/image_readability_tint"
app:layout_collapseMode="parallax"
- app:layout_collapseParallaxMultiplier="0.6"/>
+ app:layout_collapseParallaxMultiplier="0.6" />
- <include layout="@layout/feeditemlist_header"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom"
- app:layout_collapseMode="parallax"
- app:layout_collapseParallaxMultiplier="0.6"/>
+ <include
+ layout="@layout/feeditemlist_header"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ app:layout_collapseMode="parallax"
+ app:layout_collapseParallaxMultiplier="0.6" />
<androidx.appcompat.widget.Toolbar
+ android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_alignParentTop="true"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme"
- app:navigationIcon="?homeAsUpIndicator"
- android:layout_alignParentTop="true"
- android:id="@+id/toolbar"
- app:layout_collapseMode="pin"/>
+ app:layout_collapseMode="pin"
+ app:navigationIcon="?homeAsUpIndicator" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
@@ -52,68 +54,30 @@
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:scrollbarStyle="outsideOverlay"
+ android:clipToPadding="false"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingBottom="8dp"
- android:clipToPadding="false"
+ android:scrollbarStyle="outsideOverlay"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
+ android:id="@+id/infoContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:id="@+id/infoContainer"
- android:paddingHorizontal="@dimen/additional_horizontal_spacing"
- android:orientation="vertical">
-
- <TextView
- style="@style/AntennaPod.TextView.Heading"
- android:id="@+id/lblAuthor"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/author_label"
- android:layout_marginTop="8dp"
- android:layout_marginBottom="8dp"
- android:textColor="?android:attr/textColorPrimary"
- tools:background="@android:color/holo_red_light"/>
-
- <TextView
- android:id="@+id/txtvDetailsAuthor"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textIsSelectable="true"
- tools:text="Daniel Oeh"
- tools:background="@android:color/holo_green_dark"/>
-
- <TextView
- style="@style/AntennaPod.TextView.Heading"
- android:id="@+id/lblLanguage"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:layout_marginBottom="8dp"
- android:text="@string/language_label"
- android:textColor="?android:attr/textColorPrimary"
- tools:background="@android:color/holo_red_light"/>
-
- <TextView
- android:id="@+id/txtvLanguage"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textIsSelectable="true"
- tools:text="English"
- tools:background="@android:color/holo_green_dark"/>
+ android:orientation="vertical"
+ android:paddingHorizontal="@dimen/additional_horizontal_spacing">
<TextView
- style="@style/AntennaPod.TextView.Heading"
android:id="@+id/lblUrl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
+ android:textSize="18sp"
+ android:layout_marginTop="16dp"
android:layout_marginBottom="4dp"
android:text="@string/url_label"
android:textColor="?android:attr/textColorPrimary"
- tools:background="@android:color/holo_red_light"/>
+ tools:background="@android:color/holo_red_light" />
<TextView
android:id="@+id/txtvUrl"
@@ -123,24 +87,100 @@
android:maxLines="4"
android:paddingTop="4dp"
android:paddingBottom="4dp"
- tools:text="http://www.example.com/feed"
- tools:background="@android:color/holo_green_dark"/>
+ tools:background="@android:color/holo_green_dark"
+ tools:text="http://www.example.com/feed" />
<TextView
- style="@style/AntennaPod.TextView.Heading"
- android:layout_width="match_parent"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="4dp"
- android:layout_marginBottom="8dp"
- android:text="@string/description_label"/>
+ android:textSize="18sp"
+ android:layout_marginTop="16dp"
+ android:layout_marginBottom="4dp"
+ android:text="@string/description_label"
+ android:textColor="?android:attr/textColorPrimary"
+ tools:background="@android:color/holo_red_light" />
<TextView
android:id="@+id/txtvDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:textIsSelectable="true"
android:text="@string/design_time_lorem_ipsum"
- tools:background="@android:color/holo_green_dark"/>
+ android:textIsSelectable="true"
+ tools:background="@android:color/holo_green_dark" />
+
+ <TextView
+ android:id="@+id/lblStatistics"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:textSize="18sp"
+ android:layout_marginBottom="8dp"
+ android:text="@string/statistics_label"
+ android:textColor="?android:attr/textColorPrimary"
+ tools:background="@android:color/holo_red_light" />
+
+ <TableLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <TableRow
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/statistics_listened_for" />
+
+ <TextView
+ android:id="@+id/txtvPodcastTime"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="5dp" />
+ </TableRow>
+
+ <TableRow
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/statistics_episodes_on_device" />
+
+ <TextView
+ android:id="@+id/txtvPodcastEpisodeCount"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="5dp" />
+ </TableRow>
+
+ <TableRow
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/statistics_space_used" />
+
+ <TextView
+ android:id="@+id/txtvPodcastSpaceUsed"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="5dp" />
+ </TableRow>
+
+ </TableLayout>
+
+ <Button
+ android:id="@+id/btnvOpenStatistics"
+ style="@style/Widget.MaterialComponents.Button.TextButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:minWidth="0dp"
+ android:minHeight="0dp"
+ android:text="@string/statistics_view_all" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>