Skip to content

Commit

Permalink
Rename local playlist by long-clicking in BookmarkFragment.
Browse files Browse the repository at this point in the history
After long clicking on a local playlist, show a dialog with 2 options for "rename" and "delete"
Rename shows another dialog to let the user rename the playlist.
Delete lets the user delete a playlist like before.
  • Loading branch information
XiangRongLin committed Jan 19, 2020
1 parent 8c3be2c commit 77aa12d
Showing 1 changed file with 66 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
package org.schabi.newpipe.local.bookmark;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.Log;
import android.widget.EditText;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import io.reactivex.disposables.Disposable;
import org.reactivestreams.Subscriber;
import org.reactivestreams.Subscription;
import org.schabi.newpipe.NewPipeDatabase;
Expand Down Expand Up @@ -118,7 +124,33 @@ public void selected(LocalItem selectedItem) {
@Override
public void held(LocalItem selectedItem) {
if (selectedItem instanceof PlaylistMetadataEntry) {
showLocalDeleteDialog((PlaylistMetadataEntry) selectedItem);
final Resources resources = getContext().getResources();
String[] commands = new String[]{
resources.getString(R.string.rename_playlist),
resources.getString(R.string.delete_playlist)
};

final DialogInterface.OnClickListener actions = (dialogInterface, i) -> {
switch (i) {
case 0:
showLocalRenameDialog((PlaylistMetadataEntry) selectedItem);
break;
case 1:
showLocalDeleteDialog((PlaylistMetadataEntry) selectedItem);
break;
}
};

final View bannerView = View.inflate(activity, R.layout.dialog_title, null);
bannerView.setSelected(true);
TextView titleView = bannerView.findViewById(R.id.itemTitleView);
titleView.setText(((PlaylistMetadataEntry) selectedItem).name);

new AlertDialog.Builder(getActivity())
.setCustomTitle(bannerView)
.setItems(commands, actions)
.create()
.show();

} else if (selectedItem instanceof PlaylistRemoteEntity) {
showRemoteDeleteDialog((PlaylistRemoteEntity) selectedItem);
Expand Down Expand Up @@ -271,6 +303,39 @@ private void showDeleteDialog(final String name, final Single<Integer> deleteRea
.show();
}

private void showLocalRenameDialog(PlaylistMetadataEntry selectedItem) {
final View dialogView = View.inflate(getContext(), R.layout.dialog_playlist_name, null);
EditText nameEdit = dialogView.findViewById(R.id.playlist_name);
nameEdit.setText(selectedItem.name);
nameEdit.setSelection(nameEdit.getText().length());

final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(
getContext())
.setTitle(R.string.rename_playlist)
.setView(dialogView)
.setCancelable(true)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.rename, (dialogInterface, i) -> {
changeLocalPlaylistName(selectedItem.uid, nameEdit.getText().toString());
});
dialogBuilder.show();
}

private void changeLocalPlaylistName(long id, String name) {
if (localPlaylistManager == null) {
return;
}

Log.d(TAG, "Updating playlist id=[" + id +
"] with new name=[" + name + "] items");

localPlaylistManager.renamePlaylist(id, name);
final Disposable disposable = localPlaylistManager.renamePlaylist(id, name)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(longs -> {/*Do nothing on success*/}, this::onError);
disposables.add(disposable);
}

private static List<PlaylistLocalItem> merge(final List<PlaylistMetadataEntry> localPlaylists,
final List<PlaylistRemoteEntity> remotePlaylists) {
List<PlaylistLocalItem> items = new ArrayList<>(
Expand Down

0 comments on commit 77aa12d

Please sign in to comment.