mirror of
https://github.com/TeamNewPipe/NewPipe.git
synced 2024-11-22 02:53:09 +01:00
Merge pull request #4771 from Stypox/fix-playlist-select
Fix playlist select dialog and do some refactoring
This commit is contained in:
commit
9e7fb4d21a
@ -1,7 +1,6 @@
|
||||
package org.schabi.newpipe.settings;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@ -34,6 +33,7 @@ import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import io.reactivex.Flowable;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
|
||||
public class SelectPlaylistFragment extends DialogFragment {
|
||||
@ -46,12 +46,11 @@ public class SelectPlaylistFragment extends DialogFragment {
|
||||
private final ImageLoader imageLoader = ImageLoader.getInstance();
|
||||
|
||||
private OnSelectedListener onSelectedListener = null;
|
||||
private OnCancelListener onCancelListener = null;
|
||||
|
||||
private ProgressBar progressBar;
|
||||
private TextView emptyView;
|
||||
private RecyclerView recyclerView;
|
||||
private Disposable playlistsSubscriber;
|
||||
private Disposable disposable = null;
|
||||
|
||||
private List<PlaylistLocalItem> playlists = new Vector<>();
|
||||
|
||||
@ -59,10 +58,6 @@ public class SelectPlaylistFragment extends DialogFragment {
|
||||
onSelectedListener = listener;
|
||||
}
|
||||
|
||||
public void setOnCancelListener(final OnCancelListener listener) {
|
||||
onCancelListener = listener;
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Fragment's Lifecycle
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
@ -70,15 +65,32 @@ public class SelectPlaylistFragment extends DialogFragment {
|
||||
@Override
|
||||
public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container,
|
||||
final Bundle savedInstanceState) {
|
||||
final View v =
|
||||
inflater.inflate(R.layout.select_playlist_fragment, container, false);
|
||||
final View v = inflater.inflate(R.layout.select_playlist_fragment, container, false);
|
||||
progressBar = v.findViewById(R.id.progressBar);
|
||||
recyclerView = v.findViewById(R.id.items_list);
|
||||
emptyView = v.findViewById(R.id.empty_state_view);
|
||||
|
||||
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
|
||||
final SelectPlaylistAdapter playlistAdapter = new SelectPlaylistAdapter();
|
||||
recyclerView.setAdapter(playlistAdapter);
|
||||
|
||||
progressBar = v.findViewById(R.id.progressBar);
|
||||
emptyView = v.findViewById(R.id.empty_state_view);
|
||||
loadPlaylists();
|
||||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
if (disposable != null) {
|
||||
disposable.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Load and display playlists
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
private void loadPlaylists() {
|
||||
progressBar.setVisibility(View.VISIBLE);
|
||||
recyclerView.setVisibility(View.GONE);
|
||||
emptyView.setVisibility(View.GONE);
|
||||
@ -87,43 +99,36 @@ public class SelectPlaylistFragment extends DialogFragment {
|
||||
final LocalPlaylistManager localPlaylistManager = new LocalPlaylistManager(database);
|
||||
final RemotePlaylistManager remotePlaylistManager = new RemotePlaylistManager(database);
|
||||
|
||||
playlistsSubscriber = Flowable.combineLatest(localPlaylistManager.getPlaylists(),
|
||||
disposable = Flowable.combineLatest(localPlaylistManager.getPlaylists(),
|
||||
remotePlaylistManager.getPlaylists(), PlaylistLocalItem::merge)
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(this::displayPlaylists, this::onError);
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
private void displayPlaylists(final List<PlaylistLocalItem> newPlaylists) {
|
||||
playlists = newPlaylists;
|
||||
progressBar.setVisibility(View.GONE);
|
||||
emptyView.setVisibility(newPlaylists.isEmpty() ? View.VISIBLE : View.GONE);
|
||||
recyclerView.setVisibility(newPlaylists.isEmpty() ? View.GONE : View.VISIBLE);
|
||||
}
|
||||
|
||||
if (playlistsSubscriber != null) {
|
||||
playlistsSubscriber.dispose();
|
||||
playlistsSubscriber = null;
|
||||
}
|
||||
protected void onError(final Throwable e) {
|
||||
final Activity activity = requireActivity();
|
||||
ErrorActivity.reportError(activity, e, activity.getClass(), null, ErrorActivity.ErrorInfo
|
||||
.make(UserAction.UI_ERROR, "none", "load_playlists", R.string.app_ui_crash));
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Handle actions
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
@Override
|
||||
public void onCancel(final DialogInterface dialogInterface) {
|
||||
super.onCancel(dialogInterface);
|
||||
if (onCancelListener != null) {
|
||||
onCancelListener.onCancel();
|
||||
}
|
||||
}
|
||||
|
||||
private void clickedItem(final int position) {
|
||||
if (onSelectedListener != null) {
|
||||
final LocalItem selectedItem = playlists.get(position);
|
||||
|
||||
if (selectedItem instanceof PlaylistMetadataEntry) {
|
||||
final PlaylistMetadataEntry entry = ((PlaylistMetadataEntry) selectedItem);
|
||||
onSelectedListener
|
||||
.onLocalPlaylistSelected(entry.uid, entry.name);
|
||||
onSelectedListener.onLocalPlaylistSelected(entry.uid, entry.name);
|
||||
|
||||
} else if (selectedItem instanceof PlaylistRemoteEntity) {
|
||||
final PlaylistRemoteEntity entry = ((PlaylistRemoteEntity) selectedItem);
|
||||
@ -134,31 +139,6 @@ public class SelectPlaylistFragment extends DialogFragment {
|
||||
dismiss();
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Item handling
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
private void displayPlaylists(final List<PlaylistLocalItem> newPlaylists) {
|
||||
this.playlists = newPlaylists;
|
||||
progressBar.setVisibility(View.GONE);
|
||||
if (newPlaylists.isEmpty()) {
|
||||
emptyView.setVisibility(View.VISIBLE);
|
||||
return;
|
||||
}
|
||||
recyclerView.setVisibility(View.VISIBLE);
|
||||
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Error
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
protected void onError(final Throwable e) {
|
||||
final Activity activity = getActivity();
|
||||
ErrorActivity.reportError(activity, e, activity.getClass(), null, ErrorActivity.ErrorInfo
|
||||
.make(UserAction.UI_ERROR, "none", "", R.string.app_ui_crash));
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Interfaces
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
@ -168,22 +148,20 @@ public class SelectPlaylistFragment extends DialogFragment {
|
||||
void onRemotePlaylistSelected(int serviceId, String url, String name);
|
||||
}
|
||||
|
||||
public interface OnCancelListener {
|
||||
void onCancel();
|
||||
}
|
||||
|
||||
private class SelectPlaylistAdapter
|
||||
extends RecyclerView.Adapter<SelectPlaylistAdapter.SelectPlaylistItemHolder> {
|
||||
@NonNull
|
||||
@Override
|
||||
public SelectPlaylistItemHolder onCreateViewHolder(final ViewGroup parent,
|
||||
final int viewType) {
|
||||
final int viewType) {
|
||||
final View item = LayoutInflater.from(parent.getContext())
|
||||
.inflate(R.layout.list_playlist_mini_item, parent, false);
|
||||
return new SelectPlaylistItemHolder(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(final SelectPlaylistItemHolder holder, final int position) {
|
||||
public void onBindViewHolder(@NonNull final SelectPlaylistItemHolder holder,
|
||||
final int position) {
|
||||
final PlaylistLocalItem selectedItem = playlists.get(position);
|
||||
|
||||
if (selectedItem instanceof PlaylistMetadataEntry) {
|
||||
|
Loading…
Reference in New Issue
Block a user