implement functionality to add items to playlists

This commit is contained in:
dkanada 2020-04-30 18:25:27 +09:00
commit 3ca2b750ff
9 changed files with 86 additions and 85 deletions

View file

@ -9,7 +9,7 @@ import com.afollestad.materialdialogs.MaterialDialog;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
import com.kabouzeid.gramophone.util.PlaylistUtil;
import java.util.ArrayList;
import java.util.List;
@ -56,7 +56,7 @@ public class AddToPlaylistDialog extends DialogFragment {
CreatePlaylistDialog.create(songs).show(getActivity().getSupportFragmentManager(), "ADD_TO_PLAYLIST");
} else {
materialDialog.dismiss();
PlaylistsUtil.addToPlaylist(getActivity(), songs, playlists.get(i - 1).id, true);
PlaylistUtil.addItems(songs, playlists.get(i - 1).id);
}
})
.build();

View file

@ -6,12 +6,11 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import android.text.InputType;
import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
import com.kabouzeid.gramophone.util.PlaylistUtil;
import java.util.ArrayList;
import java.util.List;
@ -49,27 +48,13 @@ public class CreatePlaylistDialog extends DialogFragment {
.title(R.string.action_new_playlist)
.positiveText(R.string.create_action)
.negativeText(android.R.string.cancel)
.inputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PERSON_NAME |
InputType.TYPE_TEXT_FLAG_CAP_WORDS)
.inputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME | InputType.TYPE_TEXT_FLAG_CAP_WORDS)
.input(R.string.playlist_name_empty, 0, false, (materialDialog, charSequence) -> {
if (getActivity() == null)
return;
final String name = charSequence.toString().trim();
if (!name.isEmpty()) {
if (!PlaylistsUtil.doesPlaylistExist(getActivity(), name)) {
final String playlistId = PlaylistsUtil.createPlaylist(getActivity(), name);
if (getActivity() != null) {
// noinspection unchecked
List<Song> songs = getArguments().getParcelableArrayList(SONGS);
if (songs != null && !songs.isEmpty()) {
PlaylistsUtil.addToPlaylist(getActivity(), songs, playlistId, true);
}
}
} else {
Toast.makeText(getActivity(), getActivity().getResources().getString(
R.string.playlist_exists, name), Toast.LENGTH_SHORT).show();
}
if (getActivity() == null || getArguments() == null || name.isEmpty()) return;
List<Song> songs = getArguments().getParcelableArrayList(SONGS);
if (songs != null && !songs.isEmpty()) {
PlaylistUtil.createPlaylist(name, songs);
}
})
.build();

View file

@ -9,7 +9,7 @@ import android.text.Html;
import com.afollestad.materialdialogs.MaterialDialog;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
import com.kabouzeid.gramophone.util.PlaylistUtil;
import java.util.ArrayList;
import java.util.List;
@ -54,7 +54,7 @@ public class DeletePlaylistDialog extends DialogFragment {
.negativeText(android.R.string.cancel)
.onPositive((dialog, which) -> {
if (getActivity() == null) return;
PlaylistsUtil.deletePlaylist(getActivity(), playlists);
PlaylistUtil.deletePlaylist(playlists);
})
.build();
}

View file

@ -9,7 +9,7 @@ import android.text.Html;
import com.afollestad.materialdialogs.MaterialDialog;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
import com.kabouzeid.gramophone.util.PlaylistUtil;
import java.util.ArrayList;
import java.util.List;
@ -35,7 +35,6 @@ public class RemoveFromPlaylistDialog extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
//noinspection unchecked
final List<Song> songs = getArguments().getParcelableArrayList("songs");
int title;
CharSequence content;
@ -54,7 +53,7 @@ public class RemoveFromPlaylistDialog extends DialogFragment {
.negativeText(android.R.string.cancel)
.onPositive((dialog, which) -> {
if (getActivity() == null) return;
PlaylistsUtil.removeFromPlaylist(getActivity(), songs.get(0), songs.get(0).id);
PlaylistUtil.deleteItems(songs, songs.get(0).id);
})
.build();
}

View file

@ -8,7 +8,7 @@ import android.text.InputType;
import com.afollestad.materialdialogs.MaterialDialog;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
import com.kabouzeid.gramophone.util.PlaylistUtil;
public class RenamePlaylistDialog extends DialogFragment {
@ -26,21 +26,19 @@ public class RenamePlaylistDialog extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
long playlistId = getArguments().getLong(PLAYLIST_ID);
String playlistId = getArguments().getString(PLAYLIST_ID);
return new MaterialDialog.Builder(getActivity())
.title(R.string.rename_playlist_title)
.positiveText(R.string.rename_action)
.negativeText(android.R.string.cancel)
.inputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PERSON_NAME |
InputType.TYPE_TEXT_FLAG_CAP_WORDS)
.input(getString(R.string.playlist_name_empty), PlaylistsUtil.getNameForPlaylist(getActivity(), playlistId), false,
.inputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME | InputType.TYPE_TEXT_FLAG_CAP_WORDS)
.input(getString(R.string.playlist_name_empty), "", false,
(materialDialog, charSequence) -> {
final String name = charSequence.toString().trim();
if (!name.isEmpty()) {
long playlistId1 = getArguments().getLong(PLAYLIST_ID);
PlaylistsUtil.renamePlaylist(getActivity(), playlistId1, name);
String id = getArguments().getString(PLAYLIST_ID);
PlaylistUtil.renamePlaylist(id, name);
}
})
.build();

View file

@ -31,7 +31,7 @@ import com.kabouzeid.gramophone.model.playlist.AbsSmartPlaylist;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.util.QueryUtil;
import com.kabouzeid.gramophone.util.ThemeUtil;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
import com.kabouzeid.gramophone.util.PlaylistUtil;
import com.kabouzeid.gramophone.util.ViewUtil;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
@ -104,11 +104,10 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
recyclerViewDragDropManager = new RecyclerViewDragDropManager();
final GeneralItemAnimator animator = new RefactoredDefaultItemAnimator();
adapter = new OrderablePlaylistSongAdapter(this, new ArrayList<>(), R.layout.item_list, false, this, (fromPosition, toPosition) -> {
if (PlaylistsUtil.moveItem(PlaylistDetailActivity.this, playlist.id, fromPosition, toPosition)) {
Song song = adapter.getDataSet().remove(fromPosition);
adapter.getDataSet().add(toPosition, song);
adapter.notifyItemMoved(fromPosition, toPosition);
}
PlaylistUtil.moveItem(playlist.id, adapter.getDataSet().get(fromPosition), toPosition);
Song song = adapter.getDataSet().remove(fromPosition);
adapter.getDataSet().add(toPosition, song);
adapter.notifyItemMoved(fromPosition, toPosition);
});
wrappedAdapter = recyclerViewDragDropManager.createWrappedAdapter(adapter);

View file

@ -0,0 +1,58 @@
package com.kabouzeid.gramophone.util;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.model.Song;
import org.jellyfin.apiclient.interaction.EmptyResponse;
import org.jellyfin.apiclient.interaction.Response;
import org.jellyfin.apiclient.model.playlists.PlaylistCreationRequest;
import java.util.ArrayList;
import java.util.List;
public class PlaylistUtil {
public static void createPlaylist(final String name, final List<Song> songs) {
ArrayList<String> ids = new ArrayList<>();
for (Song song : songs) {
ids.add(song.id);
}
PlaylistCreationRequest request = new PlaylistCreationRequest();
request.setUserId(App.getApiClient().getCurrentUserId());
request.setName(name);
request.setItemIdList(ids);
App.getApiClient().CreatePlaylist(request, new Response<>());
}
public static void deletePlaylist(final List<Playlist> playlists) {
for (Playlist playlist : playlists) {
App.getApiClient().DeleteItem(playlist.id, new EmptyResponse());
}
}
public static void addItems(final List<Song> songs, final String playlist) {
String[] ids = new String[songs.size()];
for (int i = 0; i < songs.size(); i++) {
ids[i] = songs.get(i).id;
}
String user = App.getApiClient().getCurrentUserId();
App.getApiClient().AddToPlaylist(playlist, ids, user, new EmptyResponse());
}
public static void deleteItems(final List<Song> songs, final String playlist) {
String[] ids = new String[songs.size()];
for (int i = 0; i < songs.size(); i++) {
ids[i] = songs.get(i).id;
}
App.getApiClient().RemoveFromPlaylist(playlist, ids, new EmptyResponse());
}
public static void moveItem(final String playlist, final Song song, int to) {
}
public static void renamePlaylist(final String playlist, final String name) {
}
}

View file

@ -1,43 +0,0 @@
package com.kabouzeid.gramophone.util;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.model.Song;
import java.util.List;
public class PlaylistsUtil {
public static boolean doesPlaylistExist(@NonNull final Context context, final String name) {
return false;
}
public static String createPlaylist(@NonNull final Context context, @Nullable final String name) {
return "";
}
public static void deletePlaylist(@NonNull final Context context, @NonNull final List<Playlist> playlists) {
}
public static void addToPlaylist(@NonNull final Context context, final Song song, final String playlistId, final boolean showToastOnFinish) {
}
public static void addToPlaylist(@NonNull final Context context, @NonNull final List<Song> songs, final String playlistId, final boolean showToastOnFinish) {
}
public static void removeFromPlaylist(@NonNull final Context context, @NonNull final Song song, String playlistId) {
}
public static boolean moveItem(@NonNull final Context context, String playlistId, int from, int to) {
return true;
}
public static void renamePlaylist(@NonNull final Context context, final long id, final String newName) {
}
public static String getNameForPlaylist(@NonNull final Context context, final long id) {
return "";
}
}

View file

@ -4,23 +4,28 @@
<group
android:id="@+id/navigation_drawer_menu_category_sections"
android:checkableBehavior="single">
<item
android:id="@+id/nav_library"
android:icon="@drawable/ic_library_music_white_24dp"
android:title="@string/all" />
</group>
<group
android:id="@+id/navigation_drawer_menu_category_other"
android:checkableBehavior="none">
<item
android:id="@+id/nav_settings"
android:icon="@drawable/ic_settings_white_24dp"
android:title="@string/action_settings" />
<item
android:id="@+id/nav_about"
android:icon="@drawable/ic_help_white_24dp"
android:title="@string/action_about" />
</group>
</menu>