mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2024-12-23 00:20:32 +00:00
feat: add playlist controls to channel tab
This commit is contained in:
parent
371f986773
commit
753a92055c
@ -9,13 +9,24 @@ import androidx.annotation.NonNull;
|
|||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
|
import org.schabi.newpipe.databinding.PlaylistControlBinding;
|
||||||
import org.schabi.newpipe.error.UserAction;
|
import org.schabi.newpipe.error.UserAction;
|
||||||
import org.schabi.newpipe.extractor.InfoItem;
|
import org.schabi.newpipe.extractor.InfoItem;
|
||||||
import org.schabi.newpipe.extractor.ListExtractor;
|
import org.schabi.newpipe.extractor.ListExtractor;
|
||||||
import org.schabi.newpipe.extractor.channel.ChannelTabInfo;
|
import org.schabi.newpipe.extractor.channel.ChannelTabInfo;
|
||||||
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
|
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
|
||||||
|
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
|
||||||
import org.schabi.newpipe.fragments.list.BaseListInfoFragment;
|
import org.schabi.newpipe.fragments.list.BaseListInfoFragment;
|
||||||
|
import org.schabi.newpipe.player.PlayerType;
|
||||||
|
import org.schabi.newpipe.player.playqueue.ChannelTabPlayQueue;
|
||||||
|
import org.schabi.newpipe.player.playqueue.PlayQueue;
|
||||||
|
import org.schabi.newpipe.util.ChannelTabHelper;
|
||||||
import org.schabi.newpipe.util.ExtractorHelper;
|
import org.schabi.newpipe.util.ExtractorHelper;
|
||||||
|
import org.schabi.newpipe.util.NavigationHelper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import icepick.State;
|
import icepick.State;
|
||||||
import io.reactivex.rxjava3.core.Single;
|
import io.reactivex.rxjava3.core.Single;
|
||||||
@ -27,6 +38,8 @@ public class ChannelTabFragment extends BaseListInfoFragment<InfoItem, ChannelTa
|
|||||||
@State
|
@State
|
||||||
protected String channelName;
|
protected String channelName;
|
||||||
|
|
||||||
|
private PlaylistControlBinding playlistControlBinding;
|
||||||
|
|
||||||
public static ChannelTabFragment getInstance(final int serviceId,
|
public static ChannelTabFragment getInstance(final int serviceId,
|
||||||
final ListLinkHandler tabHandler,
|
final ListLinkHandler tabHandler,
|
||||||
final String channelName) {
|
final String channelName) {
|
||||||
@ -58,6 +71,22 @@ public class ChannelTabFragment extends BaseListInfoFragment<InfoItem, ChannelTa
|
|||||||
return inflater.inflate(R.layout.fragment_channel_tab, container, false);
|
return inflater.inflate(R.layout.fragment_channel_tab, container, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
playlistControlBinding = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Supplier<View> getListHeaderSupplier() {
|
||||||
|
if (ChannelTabHelper.isStreamsTab(tabHandler)) {
|
||||||
|
playlistControlBinding = PlaylistControlBinding
|
||||||
|
.inflate(activity.getLayoutInflater(), itemsList, false);
|
||||||
|
return playlistControlBinding::getRoot;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Single<ChannelTabInfo> loadResult(final boolean forceLoad) {
|
protected Single<ChannelTabInfo> loadResult(final boolean forceLoad) {
|
||||||
return ExtractorHelper.getChannelTab(serviceId, tabHandler, forceLoad);
|
return ExtractorHelper.getChannelTab(serviceId, tabHandler, forceLoad);
|
||||||
@ -72,4 +101,47 @@ public class ChannelTabFragment extends BaseListInfoFragment<InfoItem, ChannelTa
|
|||||||
public void setTitle(final String title) {
|
public void setTitle(final String title) {
|
||||||
super.setTitle(channelName);
|
super.setTitle(channelName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handleResult(final @NonNull ChannelTabInfo result) {
|
||||||
|
super.handleResult(result);
|
||||||
|
|
||||||
|
if (playlistControlBinding != null) {
|
||||||
|
// PlaylistControls should be visible only if there is some item in
|
||||||
|
// infoListAdapter other than header
|
||||||
|
if (infoListAdapter.getItemCount() > 1) {
|
||||||
|
playlistControlBinding.getRoot().setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
playlistControlBinding.getRoot().setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
playlistControlBinding.playlistCtrlPlayAllButton.setOnClickListener(
|
||||||
|
view -> NavigationHelper.playOnMainPlayer(activity, getPlayQueue()));
|
||||||
|
playlistControlBinding.playlistCtrlPlayPopupButton.setOnClickListener(
|
||||||
|
view -> NavigationHelper.playOnPopupPlayer(activity, getPlayQueue(), false));
|
||||||
|
playlistControlBinding.playlistCtrlPlayBgButton.setOnClickListener(
|
||||||
|
view -> NavigationHelper.playOnBackgroundPlayer(activity, getPlayQueue(),
|
||||||
|
false));
|
||||||
|
|
||||||
|
playlistControlBinding.playlistCtrlPlayPopupButton.setOnLongClickListener(view -> {
|
||||||
|
NavigationHelper.enqueueOnPlayer(activity, getPlayQueue(), PlayerType.POPUP);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
playlistControlBinding.playlistCtrlPlayBgButton.setOnLongClickListener(view -> {
|
||||||
|
NavigationHelper.enqueueOnPlayer(activity, getPlayQueue(), PlayerType.AUDIO);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private PlayQueue getPlayQueue() {
|
||||||
|
final List<StreamInfoItem> streamItems = infoListAdapter.getItemsList().stream()
|
||||||
|
.filter(StreamInfoItem.class::isInstance)
|
||||||
|
.map(StreamInfoItem.class::cast)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
return new ChannelTabPlayQueue(currentInfo.getServiceId(), tabHandler,
|
||||||
|
currentInfo.getNextPage(), streamItems, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user