From 0ae885255919d1aa202acecacc6380164b572eec Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 13 Nov 2019 20:16:57 +0100 Subject: [PATCH] Switched from gestures to ViewPager --- .../adapter/AllEpisodesRecycleAdapter.java | 3 +- .../adapter/QueueRecyclerAdapter.java | 6 +- .../fragment/CompletedDownloadsFragment.java | 2 +- .../fragment/FeedItemlistFragment.java | 2 +- .../antennapod/fragment/ItemFragment.java | 76 +++------------- .../fragment/ItemPagerFragment.java | 88 +++++++++++++++++++ .../fragment/PlaybackHistoryFragment.java | 2 +- .../res/layout/feeditem_pager_fragment.xml | 6 ++ 8 files changed, 112 insertions(+), 73 deletions(-) create mode 100644 app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java create mode 100644 app/src/main/res/layout/feeditem_pager_fragment.xml diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java index ed1698ecf..9cd5cc3ab 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java @@ -40,6 +40,7 @@ import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.NetworkUtils; import de.danoeh.antennapod.core.util.ThemeUtils; import de.danoeh.antennapod.fragment.ItemFragment; +import de.danoeh.antennapod.fragment.ItemPagerFragment; import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; /** @@ -245,7 +246,7 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter downloaderList; @@ -146,17 +129,7 @@ public class ItemFragment extends Fragment implements OnSwipeGesture { setRetainInstance(true); setHasOptionsMenu(true); - feedItems = getArguments().getLongArray(ARG_FEEDITEMS); - feedItemPos = getArguments().getInt(ARG_FEEDITEM_POS); - - headerGestureDetector = new GestureDetectorCompat(getActivity(), new SwipeGestureDetector(this)); - webviewGestureDetector = new GestureDetectorCompat(getActivity(), new SwipeGestureDetector(this) { - // necessary for the longclick context menu to work properly - @Override - public boolean onDown(MotionEvent e) { - return false; - } - }); + itemId = getArguments().getLong(ARG_FEEDITEM); } @Override @@ -166,11 +139,6 @@ public class ItemFragment extends Fragment implements OnSwipeGesture { root = layout.findViewById(R.id.content_root); - LinearLayout header = root.findViewById(R.id.header); - if(feedItems.length > 0) { - header.setOnTouchListener((v, event) -> headerGestureDetector.onTouchEvent(event)); - } - txtvPodcast = layout.findViewById(R.id.txtvPodcast); txtvPodcast.setOnClickListener(v -> openPodcast()); txtvTitle = layout.findViewById(R.id.txtvTitle); @@ -201,10 +169,8 @@ public class ItemFragment extends Fragment implements OnSwipeGesture { webvDescription.getSettings().setLayoutAlgorithm( WebSettings.LayoutAlgorithm.NARROW_COLUMNS); webvDescription.getSettings().setLoadWithOverviewMode(true); - if(feedItems.length > 0) { webvDescription.setOnLongClickListener(webViewLongClickListener); - } - webvDescription.setOnTouchListener((v, event) -> webviewGestureDetector.onTouchEvent(event)); + webvDescription.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { @@ -296,26 +262,6 @@ public class ItemFragment extends Fragment implements OnSwipeGesture { } } - @Override - public boolean onSwipeLeftToRight() { - return swipeFeedItem(-1); - } - - @Override - public boolean onSwipeRightToLeft() { - return swipeFeedItem(+1); - } - - private boolean swipeFeedItem(int position) { - Log.d(TAG, String.format("onSwipe() shift: %s", position)); - feedItemPos = (feedItemPos + position) % feedItems.length; - if (feedItemPos < 0) { - feedItemPos = feedItems.length - 1; - } - load(); - return true; - } - @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { if(!isAdded() || item == null) { @@ -529,8 +475,8 @@ public class ItemFragment extends Fragment implements OnSwipeGesture { @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(FeedItemEvent event) { Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); - for(FeedItem item : event.items) { - if(feedItems[feedItemPos] == item.getId()) { + for (FeedItem item : event.items) { + if (this.item.getId() == item.getId()) { load(); return; } @@ -559,7 +505,7 @@ public class ItemFragment extends Fragment implements OnSwipeGesture { } private void load() { - if(disposable != null) { + if (disposable != null) { disposable.dispose(); } progbarLoading.setVisibility(View.VISIBLE); @@ -576,7 +522,7 @@ public class ItemFragment extends Fragment implements OnSwipeGesture { @Nullable private FeedItem loadInBackground() { - FeedItem feedItem = DBReader.getFeedItem(feedItems[feedItemPos]); + FeedItem feedItem = DBReader.getFeedItem(itemId); Context context = getContext(); if (feedItem != null && context != null) { Timeline t = new Timeline(context, feedItem); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java new file mode 100644 index 000000000..5b91b4a9f --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java @@ -0,0 +1,88 @@ +package de.danoeh.antennapod.fragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentStatePagerAdapter; +import androidx.viewpager.widget.ViewPager; +import de.danoeh.antennapod.R; + +/** + * Displays information about a list of FeedItems. + */ +public class ItemPagerFragment extends Fragment { + private static final String ARG_FEEDITEMS = "feeditems"; + private static final String ARG_FEEDITEM_POS = "feeditem_pos"; + + /** + * Creates a new instance of an ItemPagerFragment. + * + * @param feeditem The ID of the FeedItem that should be displayed. + * @return The ItemFragment instance + */ + public static ItemPagerFragment newInstance(long feeditem) { + return newInstance(new long[] { feeditem }, 0); + } + + /** + * Creates a new instance of an ItemPagerFragment. + * + * @param feeditems The IDs of the FeedItems that belong to the same list + * @param feedItemPos The position of the FeedItem that is currently shown + * @return The ItemFragment instance + */ + public static ItemPagerFragment newInstance(long[] feeditems, int feedItemPos) { + ItemPagerFragment fragment = new ItemPagerFragment(); + Bundle args = new Bundle(); + args.putLongArray(ARG_FEEDITEMS, feeditems); + args.putInt(ARG_FEEDITEM_POS, feedItemPos); + fragment.setArguments(args); + return fragment; + } + + private long[] feedItems; + private int feedItemPos; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + feedItems = getArguments().getLongArray(ARG_FEEDITEMS); + feedItemPos = getArguments().getInt(ARG_FEEDITEM_POS); + } + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + View layout = inflater.inflate(R.layout.feeditem_pager_fragment, container, false); + + ViewPager pager = layout.findViewById(R.id.pager); + pager.setAdapter(new ItemPagerAdapter()); + pager.setCurrentItem(feedItemPos); + + return layout; + } + + private class ItemPagerAdapter extends FragmentStatePagerAdapter { + + ItemPagerAdapter() { + super(getFragmentManager(), BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); + } + + @NonNull + @Override + public Fragment getItem(int position) { + return ItemFragment.newInstance(feedItems[position]); + } + + @Override + public int getCount() { + return feedItems.length; + } + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index e04bd7488..a97e3dae8 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -106,7 +106,7 @@ public class PlaybackHistoryFragment extends ListFragment { super.onListItemClick(l, v, position, id); position -= l.getHeaderViewsCount(); long[] ids = FeedItemUtil.getIds(playbackHistory); - ((MainActivity) getActivity()).loadChildFragment(ItemFragment.newInstance(ids, position)); + ((MainActivity) getActivity()).loadChildFragment(ItemPagerFragment.newInstance(ids, position)); } @Override diff --git a/app/src/main/res/layout/feeditem_pager_fragment.xml b/app/src/main/res/layout/feeditem_pager_fragment.xml new file mode 100644 index 000000000..8ea5bf4f9 --- /dev/null +++ b/app/src/main/res/layout/feeditem_pager_fragment.xml @@ -0,0 +1,6 @@ + +