From 3abce4c597bc74b95d9cbdb88e2bf3671047c811 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Tue, 18 Aug 2015 17:38:51 +0200 Subject: Load feed media size on demand --- .../de/danoeh/antennapod/adapter/AdapterUtils.java | 21 ++++++++++++++++++--- .../antennapod/adapter/AllEpisodesListAdapter.java | 16 +++++++++++++++- .../antennapod/adapter/FeedItemlistAdapter.java | 21 ++++++--------------- .../danoeh/antennapod/adapter/QueueListAdapter.java | 15 +++++++++++++-- 4 files changed, 52 insertions(+), 21 deletions(-) (limited to 'app/src/main/java/de/danoeh/antennapod/adapter') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java b/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java index d3ee08546..e03a4cc7a 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java @@ -1,19 +1,23 @@ package de.danoeh.antennapod.adapter; -import android.content.res.Resources; import android.view.View; import android.widget.ProgressBar; import android.widget.TextView; +import com.joanzapata.android.iconify.Iconify; + import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.util.Converter; +import de.danoeh.antennapod.core.util.NetworkUtils; /** * Utility methods for adapters */ public class AdapterUtils { + private static final String TAG = AdapterUtils.class.getSimpleName(); + private AdapterUtils() { } @@ -21,7 +25,7 @@ public class AdapterUtils { /** * Updates the contents of the TextView that shows the current playback position and the ProgressBar. */ - public static void updateEpisodePlaybackProgress(FeedItem item, Resources res, TextView txtvPos, ProgressBar episodeProgress) { + public static void updateEpisodePlaybackProgress(FeedItem item, TextView txtvPos, ProgressBar episodeProgress) { FeedMedia media = item.getMedia(); episodeProgress.setVisibility(View.GONE); if (media == null) { @@ -42,8 +46,19 @@ public class AdapterUtils { - media.getPosition())); } } else if (!media.isDownloaded()) { - if(media.getSize() > 0) { + if (media.getSize() > 0) { txtvPos.setText(Converter.byteToString(media.getSize())); + } else if(media.getSize() > Integer.MIN_VALUE) { + txtvPos.setText("{fa-spinner}"); + Iconify.addIcons(txtvPos); + NetworkUtils.getFeedMediaSizeObservable(media) + .subscribe(size -> { + if (size > 0) { + txtvPos.setText(Converter.byteToString(size)); + } else { + txtvPos.setText(""); + } + }); } else { txtvPos.setText(""); } diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java index 4b6ee8f91..274a4652c 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java @@ -14,10 +14,10 @@ import android.widget.ProgressBar; import android.widget.TextView; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.GlideDrawableImageViewTarget; +import com.joanzapata.android.iconify.Iconify; import java.lang.ref.WeakReference; @@ -27,12 +27,15 @@ import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.Converter; +import de.danoeh.antennapod.core.util.NetworkUtils; /** * List adapter for the list of new episodes */ public class AllEpisodesListAdapter extends BaseAdapter { + private static final String TAG = AllEpisodesListAdapter.class.getSimpleName(); + private final Context context; private final ItemAccess itemAccess; private final ActionButtonCallback actionButtonCallback; @@ -117,6 +120,17 @@ public class AllEpisodesListAdapter extends BaseAdapter { holder.txtvDuration.setText(Converter.getDurationStringLong(media.getDuration())); } else if (media.getSize() > 0) { holder.txtvDuration.setText(Converter.byteToString(media.getSize())); + } else if(media.getSize() > Integer.MIN_VALUE) { + holder.txtvDuration.setText("{fa-spinner}"); + Iconify.addIcons(holder.txtvDuration); + NetworkUtils.getFeedMediaSizeObservable(media) + .subscribe(size -> { + if (size > 0) { + holder.txtvDuration.setText(Converter.byteToString(size)); + } else { + holder.txtvDuration.setText(""); + } + }); } else { holder.txtvDuration.setText(""); } diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java index 56e2bb1bd..507d1adbc 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java @@ -91,7 +91,7 @@ public class FeedItemlistAdapter extends BaseAdapter { holder.inPlaylist = (ImageView) convertView .findViewById(R.id.imgvInPlaylist); holder.type = (ImageView) convertView.findViewById(R.id.imgvType); - holder.statusUnread = (View) convertView + holder.statusUnread = convertView .findViewById(R.id.statusUnread); holder.episodeProgress = (ProgressBar) convertView .findViewById(R.id.pbar_episode_progress); @@ -100,6 +100,7 @@ public class FeedItemlistAdapter extends BaseAdapter { } else { holder = (Holder) convertView.getTag(); } + if (!(getItemViewType(position) == Adapter.IGNORE_ITEM_VIEW_TYPE)) { convertView.setVisibility(View.VISIBLE); if (position == selectedItemIndex) { @@ -139,18 +140,17 @@ public class FeedItemlistAdapter extends BaseAdapter { holder.lenSize.setVisibility(View.INVISIBLE); } else { - AdapterUtils.updateEpisodePlaybackProgress(item, context.getResources(), holder.lenSize, holder.episodeProgress); + AdapterUtils.updateEpisodePlaybackProgress(item, holder.lenSize, holder.episodeProgress); - if (((ItemAccess) itemAccess).isInQueue(item)) { + if (itemAccess.isInQueue(item)) { holder.inPlaylist.setVisibility(View.VISIBLE); } else { holder.inPlaylist.setVisibility(View.INVISIBLE); } - if (DownloadRequester.getInstance().isDownloadingFile( - item.getMedia())) { + if (DownloadRequester.getInstance().isDownloadingFile(item.getMedia())) { holder.episodeProgress.setVisibility(View.VISIBLE); - holder.episodeProgress.setProgress(((ItemAccess) itemAccess).getItemDownloadProgressPercent(item)); + holder.episodeProgress.setProgress(itemAccess.getItemDownloadProgressPercent(item)); } else { if(media.getPosition() == 0) { holder.episodeProgress.setVisibility(View.GONE); @@ -206,15 +206,6 @@ public class FeedItemlistAdapter extends BaseAdapter { ProgressBar episodeProgress; } - public int getSelectedItemIndex() { - return selectedItemIndex; - } - - public void setSelectedItemIndex(int selectedItemIndex) { - this.selectedItemIndex = selectedItemIndex; - notifyDataSetChanged(); - } - public interface ItemAccess { boolean isInQueue(FeedItem item); diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java index 60c125fda..ac52c7674 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java @@ -4,7 +4,6 @@ import android.content.Context; import android.graphics.drawable.Drawable; import android.net.Uri; import android.text.format.DateUtils; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -15,10 +14,10 @@ import android.widget.ProgressBar; import android.widget.TextView; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.GlideDrawableImageViewTarget; +import com.joanzapata.android.iconify.Iconify; import java.lang.ref.WeakReference; @@ -29,6 +28,7 @@ import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.Converter; +import de.danoeh.antennapod.core.util.NetworkUtils; /** * List adapter for the queue. @@ -143,6 +143,17 @@ public class QueueListAdapter extends BaseAdapter { } else { if(media.getSize() > 0) { holder.progressLeft.setText(Converter.byteToString(media.getSize())); + } else if(media.getSize() > Integer.MIN_VALUE) { + holder.progressLeft.setText("{fa-spinner}"); + Iconify.addIcons(holder.progressLeft); + NetworkUtils.getFeedMediaSizeObservable(media) + .subscribe(size -> { + if (size > 0) { + holder.progressLeft.setText(Converter.byteToString(size)); + } else { + holder.progressLeft.setText(""); + } + }); } else { holder.progressLeft.setText(""); } -- cgit v1.2.3