Switched from gestures to ViewPager
This commit is contained in:
parent
19a6f613e9
commit
0ae8852559
@ -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<AllEpisodesR
|
||||
MainActivity mainActivity = mainActivityRef.get();
|
||||
if (mainActivity != null) {
|
||||
long[] ids = itemAccess.getItemsIds().toArray();
|
||||
mainActivity.loadChildFragment(ItemFragment.newInstance(ids, getAdapterPosition()));
|
||||
mainActivity.loadChildFragment(ItemPagerFragment.newInstance(ids, getAdapterPosition()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
package de.danoeh.antennapod.adapter;
|
||||
|
||||
import android.os.Build;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.view.MotionEventCompat;
|
||||
@ -26,10 +25,10 @@ import android.widget.TextView;
|
||||
import com.joanzapata.iconify.Iconify;
|
||||
|
||||
import de.danoeh.antennapod.core.event.PlaybackPositionEvent;
|
||||
import de.danoeh.antennapod.fragment.ItemPagerFragment;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.List;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.activity.MainActivity;
|
||||
@ -44,7 +43,6 @@ import de.danoeh.antennapod.core.feed.util.ImageResourceUtils;
|
||||
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.menuhandler.FeedItemMenuHandler;
|
||||
|
||||
/**
|
||||
@ -165,7 +163,7 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap
|
||||
if (activity != null) {
|
||||
long[] ids = itemAccess.getQueueIds().toArray();
|
||||
int position = ArrayUtils.indexOf(ids, item.getId());
|
||||
activity.loadChildFragment(ItemFragment.newInstance(ids, position));
|
||||
activity.loadChildFragment(ItemPagerFragment.newInstance(ids, position));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -83,7 +83,7 @@ public class CompletedDownloadsFragment extends ListFragment {
|
||||
super.onListItemClick(l, v, position, id);
|
||||
position -= l.getHeaderViewsCount();
|
||||
long[] ids = FeedItemUtil.getIds(items);
|
||||
((MainActivity) requireActivity()).loadChildFragment(ItemFragment.newInstance(ids, position));
|
||||
((MainActivity) requireActivity()).loadChildFragment(ItemPagerFragment.newInstance(ids, position));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -344,7 +344,7 @@ public class FeedItemlistFragment extends ListFragment {
|
||||
position -= l.getHeaderViewsCount();
|
||||
MainActivity activity = (MainActivity) getActivity();
|
||||
long[] ids = FeedItemUtil.getIds(feed.getItems());
|
||||
activity.loadChildFragment(ItemFragment.newInstance(ids, position));
|
||||
activity.loadChildFragment(ItemPagerFragment.newInstance(ids, position));
|
||||
activity.getSupportActionBar().setTitle(feed.getTitle());
|
||||
}
|
||||
|
||||
|
@ -78,44 +78,27 @@ import io.reactivex.schedulers.Schedulers;
|
||||
/**
|
||||
* Displays information about a FeedItem and actions.
|
||||
*/
|
||||
public class ItemFragment extends Fragment implements OnSwipeGesture {
|
||||
public class ItemFragment extends Fragment {
|
||||
|
||||
private static final String TAG = "ItemFragment";
|
||||
private static final String ARG_FEEDITEMS = "feeditems";
|
||||
private static final String ARG_FEEDITEM_POS = "feeditem_pos";
|
||||
|
||||
private GestureDetectorCompat headerGestureDetector;
|
||||
private GestureDetectorCompat webviewGestureDetector;
|
||||
private static final String ARG_FEEDITEM = "feeditem";
|
||||
|
||||
/**
|
||||
* Creates a new instance of an ItemFragment
|
||||
*
|
||||
* @param feeditem The ID of the FeedItem that should be displayed.
|
||||
* @param feeditem The ID of the FeedItem to show
|
||||
* @return The ItemFragment instance
|
||||
*/
|
||||
public static ItemFragment newInstance(long feeditem) {
|
||||
return newInstance(new long[] { feeditem }, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance of an ItemFragment
|
||||
*
|
||||
* @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 ItemFragment newInstance(long[] feeditems, int feedItemPos) {
|
||||
ItemFragment fragment = new ItemFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putLongArray(ARG_FEEDITEMS, feeditems);
|
||||
args.putInt(ARG_FEEDITEM_POS, feedItemPos);
|
||||
args.putLong(ARG_FEEDITEM, feeditem);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
private boolean itemsLoaded = false;
|
||||
private long[] feedItems;
|
||||
private int feedItemPos;
|
||||
private long itemId;
|
||||
private FeedItem item;
|
||||
private String webviewData;
|
||||
private List<Downloader> 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);
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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
|
||||
|
6
app/src/main/res/layout/feeditem_pager_fragment.xml
Normal file
6
app/src/main/res/layout/feeditem_pager_fragment.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.viewpager.widget.ViewPager
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/pager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
Loading…
x
Reference in New Issue
Block a user