summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/view
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/view')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/EpisodeItemListRecyclerView.java73
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java1
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;