diff options
Diffstat (limited to 'app/src/main/java/de')
3 files changed, 82 insertions, 26 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 { |