Merge pull request #8721 from Isira-Seneviratne/OnClickGesture_interface
Make OnClickGesture an interface.
This commit is contained in:
commit
1a8f396e77
|
@ -23,14 +23,11 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
import org.schabi.newpipe.error.ErrorUtil;
|
import org.schabi.newpipe.error.ErrorUtil;
|
||||||
import org.schabi.newpipe.extractor.InfoItem;
|
import org.schabi.newpipe.extractor.InfoItem;
|
||||||
import org.schabi.newpipe.extractor.channel.ChannelInfoItem;
|
|
||||||
import org.schabi.newpipe.extractor.comments.CommentsInfoItem;
|
|
||||||
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItem;
|
|
||||||
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
|
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
|
||||||
import org.schabi.newpipe.fragments.BaseStateFragment;
|
import org.schabi.newpipe.fragments.BaseStateFragment;
|
||||||
import org.schabi.newpipe.fragments.OnScrollBelowItemsListener;
|
import org.schabi.newpipe.fragments.OnScrollBelowItemsListener;
|
||||||
import org.schabi.newpipe.info_list.dialog.InfoItemDialog;
|
|
||||||
import org.schabi.newpipe.info_list.InfoListAdapter;
|
import org.schabi.newpipe.info_list.InfoListAdapter;
|
||||||
|
import org.schabi.newpipe.info_list.dialog.InfoItemDialog;
|
||||||
import org.schabi.newpipe.util.NavigationHelper;
|
import org.schabi.newpipe.util.NavigationHelper;
|
||||||
import org.schabi.newpipe.util.OnClickGesture;
|
import org.schabi.newpipe.util.OnClickGesture;
|
||||||
import org.schabi.newpipe.util.StateSaver;
|
import org.schabi.newpipe.util.StateSaver;
|
||||||
|
@ -264,45 +261,28 @@ public abstract class BaseListFragment<I, N> extends BaseStateFragment<I>
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
infoListAdapter.setOnChannelSelectedListener(new OnClickGesture<>() {
|
infoListAdapter.setOnChannelSelectedListener(selectedItem -> {
|
||||||
@Override
|
try {
|
||||||
public void selected(final ChannelInfoItem selectedItem) {
|
|
||||||
try {
|
|
||||||
onItemSelected(selectedItem);
|
|
||||||
NavigationHelper.openChannelFragment(getFM(),
|
|
||||||
selectedItem.getServiceId(),
|
|
||||||
selectedItem.getUrl(),
|
|
||||||
selectedItem.getName());
|
|
||||||
} catch (final Exception e) {
|
|
||||||
ErrorUtil.showUiErrorSnackbar(
|
|
||||||
BaseListFragment.this, "Opening channel fragment", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
infoListAdapter.setOnPlaylistSelectedListener(new OnClickGesture<>() {
|
|
||||||
@Override
|
|
||||||
public void selected(final PlaylistInfoItem selectedItem) {
|
|
||||||
try {
|
|
||||||
onItemSelected(selectedItem);
|
|
||||||
NavigationHelper.openPlaylistFragment(getFM(),
|
|
||||||
selectedItem.getServiceId(),
|
|
||||||
selectedItem.getUrl(),
|
|
||||||
selectedItem.getName());
|
|
||||||
} catch (final Exception e) {
|
|
||||||
ErrorUtil.showUiErrorSnackbar(BaseListFragment.this,
|
|
||||||
"Opening playlist fragment", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
infoListAdapter.setOnCommentsSelectedListener(new OnClickGesture<>() {
|
|
||||||
@Override
|
|
||||||
public void selected(final CommentsInfoItem selectedItem) {
|
|
||||||
onItemSelected(selectedItem);
|
onItemSelected(selectedItem);
|
||||||
|
NavigationHelper.openChannelFragment(getFM(), selectedItem.getServiceId(),
|
||||||
|
selectedItem.getUrl(), selectedItem.getName());
|
||||||
|
} catch (final Exception e) {
|
||||||
|
ErrorUtil.showUiErrorSnackbar(this, "Opening channel fragment", e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
infoListAdapter.setOnPlaylistSelectedListener(selectedItem -> {
|
||||||
|
try {
|
||||||
|
onItemSelected(selectedItem);
|
||||||
|
NavigationHelper.openPlaylistFragment(getFM(), selectedItem.getServiceId(),
|
||||||
|
selectedItem.getUrl(), selectedItem.getName());
|
||||||
|
} catch (final Exception e) {
|
||||||
|
ErrorUtil.showUiErrorSnackbar(this, "Opening playlist fragment", e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
infoListAdapter.setOnCommentsSelectedListener(this::onItemSelected);
|
||||||
|
|
||||||
// Ensure that there is always a scroll listener (e.g. when rotating the device)
|
// Ensure that there is always a scroll listener (e.g. when rotating the device)
|
||||||
useNormalItemListScrollListener();
|
useNormalItemListScrollListener();
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,7 +98,7 @@ public final class BookmarkFragment extends BaseLocalListFragment<List<PlaylistL
|
||||||
protected void initListeners() {
|
protected void initListeners() {
|
||||||
super.initListeners();
|
super.initListeners();
|
||||||
|
|
||||||
itemListAdapter.setSelectedListener(new OnClickGesture<LocalItem>() {
|
itemListAdapter.setSelectedListener(new OnClickGesture<>() {
|
||||||
@Override
|
@Override
|
||||||
public void selected(final LocalItem selectedItem) {
|
public void selected(final LocalItem selectedItem) {
|
||||||
final FragmentManager fragmentManager = getFM();
|
final FragmentManager fragmentManager = getFM();
|
||||||
|
|
|
@ -13,12 +13,10 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import org.schabi.newpipe.NewPipeDatabase;
|
import org.schabi.newpipe.NewPipeDatabase;
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
import org.schabi.newpipe.database.LocalItem;
|
|
||||||
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
|
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
|
||||||
import org.schabi.newpipe.database.stream.model.StreamEntity;
|
import org.schabi.newpipe.database.stream.model.StreamEntity;
|
||||||
import org.schabi.newpipe.local.LocalItemListAdapter;
|
import org.schabi.newpipe.local.LocalItemListAdapter;
|
||||||
import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
|
import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
|
||||||
import org.schabi.newpipe.util.OnClickGesture;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -63,18 +61,10 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
|
||||||
new LocalPlaylistManager(NewPipeDatabase.getInstance(requireContext()));
|
new LocalPlaylistManager(NewPipeDatabase.getInstance(requireContext()));
|
||||||
|
|
||||||
playlistAdapter = new LocalItemListAdapter(getActivity());
|
playlistAdapter = new LocalItemListAdapter(getActivity());
|
||||||
playlistAdapter.setSelectedListener(new OnClickGesture<LocalItem>() {
|
playlistAdapter.setSelectedListener(selectedItem -> {
|
||||||
@Override
|
final List<StreamEntity> entities = getStreamEntities();
|
||||||
public void selected(final LocalItem selectedItem) {
|
if (selectedItem instanceof PlaylistMetadataEntry && entities != null) {
|
||||||
if (!(selectedItem instanceof PlaylistMetadataEntry)
|
onPlaylistSelected(playlistManager, (PlaylistMetadataEntry) selectedItem, entities);
|
||||||
|| getStreamEntities() == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
onPlaylistSelected(
|
|
||||||
playlistManager,
|
|
||||||
(PlaylistMetadataEntry) selectedItem,
|
|
||||||
getStreamEntities()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -138,10 +128,6 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
|
||||||
private void onPlaylistSelected(@NonNull final LocalPlaylistManager manager,
|
private void onPlaylistSelected(@NonNull final LocalPlaylistManager manager,
|
||||||
@NonNull final PlaylistMetadataEntry playlist,
|
@NonNull final PlaylistMetadataEntry playlist,
|
||||||
@NonNull final List<StreamEntity> streams) {
|
@NonNull final List<StreamEntity> streams) {
|
||||||
if (getStreamEntities() == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Toast successToast = Toast.makeText(getContext(),
|
final Toast successToast = Toast.makeText(getContext(),
|
||||||
R.string.playlist_add_stream_success, Toast.LENGTH_SHORT);
|
R.string.playlist_add_stream_success, Toast.LENGTH_SHORT);
|
||||||
|
|
||||||
|
|
|
@ -135,7 +135,7 @@ public class StatisticsPlaylistFragment
|
||||||
protected void initListeners() {
|
protected void initListeners() {
|
||||||
super.initListeners();
|
super.initListeners();
|
||||||
|
|
||||||
itemListAdapter.setSelectedListener(new OnClickGesture<LocalItem>() {
|
itemListAdapter.setSelectedListener(new OnClickGesture<>() {
|
||||||
@Override
|
@Override
|
||||||
public void selected(final LocalItem selectedItem) {
|
public void selected(final LocalItem selectedItem) {
|
||||||
if (selectedItem instanceof StreamStatisticsEntry) {
|
if (selectedItem instanceof StreamStatisticsEntry) {
|
||||||
|
|
|
@ -167,7 +167,7 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
|
||||||
itemTouchHelper = new ItemTouchHelper(getItemTouchCallback());
|
itemTouchHelper = new ItemTouchHelper(getItemTouchCallback());
|
||||||
itemTouchHelper.attachToRecyclerView(itemsList);
|
itemTouchHelper.attachToRecyclerView(itemsList);
|
||||||
|
|
||||||
itemListAdapter.setSelectedListener(new OnClickGesture<LocalItem>() {
|
itemListAdapter.setSelectedListener(new OnClickGesture<>() {
|
||||||
@Override
|
@Override
|
||||||
public void selected(final LocalItem selectedItem) {
|
public void selected(final LocalItem selectedItem) {
|
||||||
if (selectedItem instanceof PlaylistStreamEntry) {
|
if (selectedItem instanceof PlaylistStreamEntry) {
|
||||||
|
|
|
@ -346,7 +346,7 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
|
||||||
override fun doInitialLoadLogic() = Unit
|
override fun doInitialLoadLogic() = Unit
|
||||||
override fun startLoading(forceLoad: Boolean) = Unit
|
override fun startLoading(forceLoad: Boolean) = Unit
|
||||||
|
|
||||||
private val listenerFeedGroups = object : OnClickGesture<Item<*>>() {
|
private val listenerFeedGroups = object : OnClickGesture<Item<*>> {
|
||||||
override fun selected(selectedItem: Item<*>?) {
|
override fun selected(selectedItem: Item<*>?) {
|
||||||
when (selectedItem) {
|
when (selectedItem) {
|
||||||
is FeedGroupCardItem -> NavigationHelper.openFeedFragment(fm, selectedItem.groupId, selectedItem.name)
|
is FeedGroupCardItem -> NavigationHelper.openFeedFragment(fm, selectedItem.groupId, selectedItem.name)
|
||||||
|
@ -361,7 +361,7 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val listenerChannelItem = object : OnClickGesture<ChannelInfoItem>() {
|
private val listenerChannelItem = object : OnClickGesture<ChannelInfoItem> {
|
||||||
override fun selected(selectedItem: ChannelInfoItem) = NavigationHelper.openChannelFragment(
|
override fun selected(selectedItem: ChannelInfoItem) = NavigationHelper.openChannelFragment(
|
||||||
fm,
|
fm,
|
||||||
selectedItem.serviceId, selectedItem.url, selectedItem.name
|
selectedItem.serviceId, selectedItem.url, selectedItem.name
|
||||||
|
|
|
@ -2,15 +2,14 @@ package org.schabi.newpipe.util;
|
||||||
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
public abstract class OnClickGesture<T> {
|
public interface OnClickGesture<T> {
|
||||||
|
void selected(T selectedItem);
|
||||||
|
|
||||||
public abstract void selected(T selectedItem);
|
default void held(final T selectedItem) {
|
||||||
|
|
||||||
public void held(final T selectedItem) {
|
|
||||||
// Optional gesture
|
// Optional gesture
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drag(final T selectedItem, final RecyclerView.ViewHolder viewHolder) {
|
default void drag(final T selectedItem, final RecyclerView.ViewHolder viewHolder) {
|
||||||
// Optional gesture
|
// Optional gesture
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue