Merge pull request #8721 from Isira-Seneviratne/OnClickGesture_interface

Make OnClickGesture an interface.
This commit is contained in:
Stypox 2022-08-04 16:15:54 +02:00 committed by GitHub
commit 1a8f396e77
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 32 additions and 67 deletions

View File

@ -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,44 +261,27 @@ public abstract class BaseListFragment<I, N> extends BaseStateFragment<I>
} }
}); });
infoListAdapter.setOnChannelSelectedListener(new OnClickGesture<>() { infoListAdapter.setOnChannelSelectedListener(selectedItem -> {
@Override
public void selected(final ChannelInfoItem selectedItem) {
try { try {
onItemSelected(selectedItem); onItemSelected(selectedItem);
NavigationHelper.openChannelFragment(getFM(), NavigationHelper.openChannelFragment(getFM(), selectedItem.getServiceId(),
selectedItem.getServiceId(), selectedItem.getUrl(), selectedItem.getName());
selectedItem.getUrl(),
selectedItem.getName());
} catch (final Exception e) { } catch (final Exception e) {
ErrorUtil.showUiErrorSnackbar( ErrorUtil.showUiErrorSnackbar(this, "Opening channel fragment", e);
BaseListFragment.this, "Opening channel fragment", e);
}
} }
}); });
infoListAdapter.setOnPlaylistSelectedListener(new OnClickGesture<>() { infoListAdapter.setOnPlaylistSelectedListener(selectedItem -> {
@Override
public void selected(final PlaylistInfoItem selectedItem) {
try { try {
onItemSelected(selectedItem); onItemSelected(selectedItem);
NavigationHelper.openPlaylistFragment(getFM(), NavigationHelper.openPlaylistFragment(getFM(), selectedItem.getServiceId(),
selectedItem.getServiceId(), selectedItem.getUrl(), selectedItem.getName());
selectedItem.getUrl(),
selectedItem.getName());
} catch (final Exception e) { } catch (final Exception e) {
ErrorUtil.showUiErrorSnackbar(BaseListFragment.this, ErrorUtil.showUiErrorSnackbar(this, "Opening playlist fragment", e);
"Opening playlist fragment", e);
}
} }
}); });
infoListAdapter.setOnCommentsSelectedListener(new OnClickGesture<>() { infoListAdapter.setOnCommentsSelectedListener(this::onItemSelected);
@Override
public void selected(final CommentsInfoItem selectedItem) {
onItemSelected(selectedItem);
}
});
// 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();

View File

@ -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();

View File

@ -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);

View File

@ -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) {

View File

@ -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) {

View File

@ -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

View File

@ -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
} }
} }