Use custom dialog to edit and delete local playlists at once
This commit is contained in:
parent
77aa12dd81
commit
0ed3354cee
4 changed files with 118 additions and 54 deletions
|
@ -1,13 +1,9 @@
|
||||||
package org.schabi.newpipe.local.bookmark;
|
package org.schabi.newpipe.local.bookmark;
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.res.Resources;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.EditText;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
@ -26,6 +22,7 @@ import org.schabi.newpipe.database.playlist.PlaylistLocalItem;
|
||||||
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
|
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
|
||||||
import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
|
import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
|
||||||
import org.schabi.newpipe.local.BaseLocalListFragment;
|
import org.schabi.newpipe.local.BaseLocalListFragment;
|
||||||
|
import org.schabi.newpipe.local.dialog.BookmarkDialog;
|
||||||
import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
|
import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
|
||||||
import org.schabi.newpipe.local.playlist.RemotePlaylistManager;
|
import org.schabi.newpipe.local.playlist.RemotePlaylistManager;
|
||||||
import org.schabi.newpipe.report.UserAction;
|
import org.schabi.newpipe.report.UserAction;
|
||||||
|
@ -124,34 +121,7 @@ public final class BookmarkFragment
|
||||||
@Override
|
@Override
|
||||||
public void held(LocalItem selectedItem) {
|
public void held(LocalItem selectedItem) {
|
||||||
if (selectedItem instanceof PlaylistMetadataEntry) {
|
if (selectedItem instanceof PlaylistMetadataEntry) {
|
||||||
final Resources resources = getContext().getResources();
|
showLocalDialog((PlaylistMetadataEntry) selectedItem);
|
||||||
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) {
|
} else if (selectedItem instanceof PlaylistRemoteEntity) {
|
||||||
showRemoteDeleteDialog((PlaylistRemoteEntity) selectedItem);
|
showRemoteDeleteDialog((PlaylistRemoteEntity) selectedItem);
|
||||||
}
|
}
|
||||||
|
@ -279,14 +249,27 @@ public final class BookmarkFragment
|
||||||
// Utils
|
// Utils
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
private void showLocalDeleteDialog(final PlaylistMetadataEntry item) {
|
|
||||||
showDeleteDialog(item.name, localPlaylistManager.deletePlaylist(item.uid));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showRemoteDeleteDialog(final PlaylistRemoteEntity item) {
|
private void showRemoteDeleteDialog(final PlaylistRemoteEntity item) {
|
||||||
showDeleteDialog(item.getName(), remotePlaylistManager.deletePlaylist(item.getUid()));
|
showDeleteDialog(item.getName(), remotePlaylistManager.deletePlaylist(item.getUid()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void showLocalDialog(PlaylistMetadataEntry selectedItem) {
|
||||||
|
BookmarkDialog dialog = new BookmarkDialog(getContext(),
|
||||||
|
selectedItem.name, new BookmarkDialog.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onDeleteClicked() {
|
||||||
|
showDeleteDialog(selectedItem.name,
|
||||||
|
localPlaylistManager.deletePlaylist(selectedItem.uid));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSaveClicked(@NonNull String name) {
|
||||||
|
changeLocalPlaylistName(selectedItem.uid, name);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
dialog.show();
|
||||||
|
}
|
||||||
|
|
||||||
private void showDeleteDialog(final String name, final Single<Integer> deleteReactor) {
|
private void showDeleteDialog(final String name, final Single<Integer> deleteReactor) {
|
||||||
if (activity == null || disposables == null) return;
|
if (activity == null || disposables == null) return;
|
||||||
|
|
||||||
|
@ -303,24 +286,6 @@ public final class BookmarkFragment
|
||||||
.show();
|
.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) {
|
private void changeLocalPlaylistName(long id, String name) {
|
||||||
if (localPlaylistManager == null) {
|
if (localPlaylistManager == null) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
package org.schabi.newpipe.local.dialog
|
||||||
|
|
||||||
|
import android.app.Dialog
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.Window
|
||||||
|
import android.widget.Button
|
||||||
|
import android.widget.EditText
|
||||||
|
import org.schabi.newpipe.R
|
||||||
|
|
||||||
|
class BookmarkDialog(
|
||||||
|
context: Context,
|
||||||
|
private val playlistName: String,
|
||||||
|
val listener: OnClickListener)
|
||||||
|
: Dialog(context) {
|
||||||
|
|
||||||
|
private lateinit var editText: EditText
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
requestWindowFeature(Window.FEATURE_NO_TITLE)
|
||||||
|
setContentView(R.layout.dialog_bookmark)
|
||||||
|
initListeners()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun initListeners() {
|
||||||
|
editText = findViewById(R.id.playlist_name_edit_text);
|
||||||
|
editText.setText(playlistName)
|
||||||
|
|
||||||
|
findViewById<Button>(R.id.bookmark_delete).setOnClickListener {
|
||||||
|
listener.onDeleteClicked()
|
||||||
|
dismiss()
|
||||||
|
}
|
||||||
|
findViewById<Button>(R.id.bookmark_cancel).setOnClickListener {
|
||||||
|
dismiss()
|
||||||
|
}
|
||||||
|
findViewById<Button>(R.id.bookmark_save).setOnClickListener {
|
||||||
|
listener.onSaveClicked(editText.text.toString())
|
||||||
|
dismiss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface OnClickListener {
|
||||||
|
fun onDeleteClicked()
|
||||||
|
fun onSaveClicked(name: String)
|
||||||
|
}
|
||||||
|
}
|
51
app/src/main/res/layout/dialog_bookmark.xml
Normal file
51
app/src/main/res/layout/dialog_bookmark.xml
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/playlist_name_edit_text"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:importantForAutofill="no"
|
||||||
|
android:inputType="text"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:layout_margin="10dp"
|
||||||
|
android:hint="@string/playlist_name_input"/>
|
||||||
|
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingTop="10dp"
|
||||||
|
android:padding="5dp">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/bookmark_delete"
|
||||||
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:text="@string/delete" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/bookmark_cancel"
|
||||||
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_toStartOf="@+id/bookmark_save"
|
||||||
|
android:text="@android:string/cancel" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/bookmark_save"
|
||||||
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:text="@string/save" />
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
|
@ -589,4 +589,5 @@
|
||||||
<string name="downloads_storage_use_saf_title">Use SAF</string>
|
<string name="downloads_storage_use_saf_title">Use SAF</string>
|
||||||
<string name="downloads_storage_use_saf_summary">The Storage Access Framework allows downloads to an external SD card.\nNote: some devices are not compatible</string>
|
<string name="downloads_storage_use_saf_summary">The Storage Access Framework allows downloads to an external SD card.\nNote: some devices are not compatible</string>
|
||||||
<string name="choose_instance_prompt">Choose an instance</string>
|
<string name="choose_instance_prompt">Choose an instance</string>
|
||||||
|
<string name="save">save</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue