diff options
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java | 92 |
1 files changed, 70 insertions, 22 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 |