From 7db3da273aba428e01dc0611d2ad3af56c7f7591 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Tue, 17 Mar 2020 14:23:16 +0100 Subject: [PATCH] Re-added paged feed button --- .../fragment/FeedItemlistFragment.java | 66 +++++++++---------- .../res/layout/feed_item_list_fragment.xml | 7 ++ .../res/layout/more_content_list_footer.xml | 32 +++++---- 3 files changed, 59 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java index cb3697091..86b00a7ae 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java @@ -87,7 +87,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem private static final String ARGUMENT_FEED_ID = "argument.de.danoeh.antennapod.feed_id"; private FeedItemListAdapter adapter; - private MoreContentListFooterUtil listFooter; + private MoreContentListFooterUtil nextPageLoader; private ProgressBar progressBar; private RecyclerView recyclerView; @@ -179,6 +179,33 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem } }; appBar.addOnOffsetChangedListener(iconTintManager); + + nextPageLoader = new MoreContentListFooterUtil(root.findViewById(R.id.more_content_list_footer)); + nextPageLoader.setClickListener(() -> { + if (feed != null) { + try { + DBTasks.loadNextPageOfFeed(getActivity(), feed, false); + } catch (DownloadRequestException e) { + e.printStackTrace(); + DownloadRequestErrorDialogCreator.newRequestErrorDialog(getActivity(), e.getMessage()); + } + } + }); + recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int deltaX, int deltaY) { + super.onScrolled(recyclerView, deltaX, deltaY); + + int visibleEpisodeCount = recyclerView.getChildCount(); + int totalEpisodeCount = recyclerView.getLayoutManager().getItemCount(); + int firstVisibleEpisode = layoutManager.findFirstVisibleItemPosition(); + + boolean isAtBottom = (totalEpisodeCount - visibleEpisodeCount) <= (firstVisibleEpisode + 3); + boolean hasMorePages = feed != null && feed.isPaged() && feed.getNextPageLink() != null; + nextPageLoader.getRoot().setVisibility((isAtBottom && hasMorePages) ? View.VISIBLE : View.GONE); + } + }); + EventBus.getDefault().register(this); loadItems(); return root; @@ -193,7 +220,6 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem disposable.dispose(); } adapter = null; - listFooter = null; } private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = new MenuItemUtils.UpdateRefreshMenuItemChecker() { @@ -390,9 +416,10 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem if (isUpdatingFeed != updateRefreshMenuItemChecker.isRefreshing()) { getActivity().supportInvalidateOptionsMenu(); } - if (listFooter != null) { - listFooter.setLoadingState(DownloadRequester.getInstance().isDownloadingFeeds()); + if (!DownloadRequester.getInstance().isDownloadingFeeds()) { + nextPageLoader.getRoot().setVisibility(View.GONE); } + nextPageLoader.setLoadingState(DownloadRequester.getInstance().isDownloadingFeeds()); } private void displayList() { @@ -402,7 +429,6 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem } if (adapter == null) { recyclerView.setAdapter(null); - setupFooterView(); adapter = new FeedItemListAdapter((MainActivity) getActivity()); recyclerView.setAdapter(adapter); } @@ -411,10 +437,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem adapter.updateItems(feed.getItems()); getActivity().supportInvalidateOptionsMenu(); - - /*if (feed != null && feed.getNextPageLink() == null && listFooter != null) { - listView.removeFooterView(listFooter.getRoot()); - }*/ + updateProgressBarVisibility(); } private void refreshHeaderView() { @@ -496,31 +519,6 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem .into(imgvCover); } - - private void setupFooterView() { - if (recyclerView == null || feed == null) { - Log.e(TAG, "Unable to setup listview: recyclerView = null or feed = null"); - return; - } - if (feed.isPaged() && feed.getNextPageLink() != null) { - LayoutInflater inflater = (LayoutInflater) - getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); - View footer = inflater.inflate(R.layout.more_content_list_footer, null, false); - //adapter.setFooterView(footer); - listFooter = new MoreContentListFooterUtil(footer); - listFooter.setClickListener(() -> { - if (feed != null) { - try { - DBTasks.loadNextPageOfFeed(getActivity(), feed, false); - } catch (DownloadRequestException e) { - e.printStackTrace(); - DownloadRequestErrorDialogCreator.newRequestErrorDialog(getActivity(), e.getMessage()); - } - } - }); - } - } - private void loadItems() { if (disposable != null) { disposable.dispose(); diff --git a/app/src/main/res/layout/feed_item_list_fragment.xml b/app/src/main/res/layout/feed_item_list_fragment.xml index b80bab8df..2c5c30ed3 100644 --- a/app/src/main/res/layout/feed_item_list_fragment.xml +++ b/app/src/main/res/layout/feed_item_list_fragment.xml @@ -59,4 +59,11 @@ android:indeterminateOnly="true" android:visibility="gone"/> + + diff --git a/core/src/main/res/layout/more_content_list_footer.xml b/core/src/main/res/layout/more_content_list_footer.xml index bfe9e89b6..f6d6a313c 100644 --- a/core/src/main/res/layout/more_content_list_footer.xml +++ b/core/src/main/res/layout/more_content_list_footer.xml @@ -1,28 +1,36 @@ - + android:layout_height="wrap_content" + android:foreground="?attr/selectableItemBackground" + android:background="?android:attr/windowBackground" + android:gravity="center" + android:padding="8dp"> - \ No newline at end of file + + + \ No newline at end of file