diff options
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/view')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/view/EpisodeItemListRecyclerView.java | 73 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java | 1 |
2 files changed, 73 insertions, 1 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/view/EpisodeItemListRecyclerView.java b/app/src/main/java/de/danoeh/antennapod/view/EpisodeItemListRecyclerView.java new file mode 100644 index 000000000..cbc6ca630 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/view/EpisodeItemListRecyclerView.java @@ -0,0 +1,73 @@ +package de.danoeh.antennapod.view; + +import android.content.Context; +import android.content.SharedPreferences; +import android.util.AttributeSet; +import android.view.View; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration; +import io.reactivex.annotations.Nullable; + +public class EpisodeItemListRecyclerView extends RecyclerView { + private static final String TAG = "EpisodeItemListRecyclerView"; + private static final String PREF_PREFIX_SCROLL_POSITION = "scroll_position_"; + private static final String PREF_PREFIX_SCROLL_OFFSET = "scroll_offset_"; + + private LinearLayoutManager layoutManager; + + public EpisodeItemListRecyclerView(Context context) { + super(context); + setup(); + } + + public EpisodeItemListRecyclerView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + setup(); + } + + public EpisodeItemListRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + setup(); + } + + private void setup() { + layoutManager = new LinearLayoutManager(getContext()); + layoutManager.setRecycleChildrenOnDetach(true); + setLayoutManager(layoutManager); + setHasFixedSize(true); + addItemDecoration(new HorizontalDividerItemDecoration.Builder(getContext()).build()); + } + + public void saveScrollPosition(String tag) { + int firstItem = layoutManager.findFirstVisibleItemPosition(); + View firstItemView = layoutManager.findViewByPosition(firstItem); + float topOffset; + if (firstItemView == null) { + topOffset = 0; + } else { + topOffset = firstItemView.getTop(); + } + + getContext().getSharedPreferences(TAG, Context.MODE_PRIVATE).edit() + .putInt(PREF_PREFIX_SCROLL_POSITION + tag, firstItem) + .putInt(PREF_PREFIX_SCROLL_OFFSET + tag, (int) topOffset) + .apply(); + } + + public void restoreScrollPosition(String tag) { + SharedPreferences prefs = getContext().getSharedPreferences(TAG, Context.MODE_PRIVATE); + int position = prefs.getInt(PREF_PREFIX_SCROLL_POSITION + tag, 0); + int offset = prefs.getInt(PREF_PREFIX_SCROLL_OFFSET + tag, 0); + if (position > 0 || offset > 0) { + layoutManager.scrollToPositionWithOffset(position, offset); + } + } + + public boolean isScrolledToBottom() { + int visibleEpisodeCount = getChildCount(); + int totalEpisodeCount = layoutManager.getItemCount(); + int firstVisibleEpisode = layoutManager.findFirstVisibleItemPosition(); + return (totalEpisodeCount - visibleEpisodeCount) <= (firstVisibleEpisode + 3); + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java b/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java index a6300b50e..506f0f695 100644 --- a/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java +++ b/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java @@ -15,7 +15,6 @@ import com.joanzapata.iconify.Iconify; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.adapter.CoverLoader; -import de.danoeh.antennapod.adapter.QueueRecyclerAdapter; import de.danoeh.antennapod.adapter.actionbutton.ItemActionButton; import de.danoeh.antennapod.core.event.PlaybackPositionEvent; import de.danoeh.antennapod.core.feed.FeedItem; |