mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-11-04 01:03:00 +00:00 
			
		
		
		
	Make OnClickGesture an interface.
This commit is contained in:
		@@ -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();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user