diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java index 2cee7fde..2c35bc91 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java @@ -1,7 +1,7 @@ package com.kabouzeid.gramophone.adapter; import android.graphics.PorterDuff; -import android.os.Build; +import android.graphics.drawable.Drawable; import androidx.annotation.LayoutRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -12,29 +12,25 @@ import android.view.View; import android.view.ViewGroup; import android.widget.PopupMenu; +import com.bumptech.glide.Glide; import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter; import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder; -import com.kabouzeid.gramophone.dialogs.ClearSmartPlaylistDialog; import com.kabouzeid.gramophone.dialogs.DeletePlaylistDialog; +import com.kabouzeid.gramophone.glide.CustomGlideRequest; +import com.kabouzeid.gramophone.glide.CustomPaletteTarget; import com.kabouzeid.gramophone.helper.menu.PlaylistMenuHelper; import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper; import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.model.playlist.AbsSmartPlaylist; -import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.NavigationUtil; import java.util.ArrayList; import java.util.List; public class PlaylistAdapter extends AbsMultiSelectAdapter { - - private static final int SMART_PLAYLIST = 0; - private static final int DEFAULT_PLAYLIST = 1; - protected final AppCompatActivity activity; protected List dataSet; protected int itemLayoutRes; @@ -58,7 +54,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter selection) { switch (menuItem.getItemId()) { case R.id.action_delete_playlist: - for (int i = 0; i < selection.size(); i++) { - Playlist playlist = selection.get(i); - if (playlist instanceof AbsSmartPlaylist) { - AbsSmartPlaylist absSmartPlaylist = (AbsSmartPlaylist) playlist; - ClearSmartPlaylistDialog.create(absSmartPlaylist).show(activity.getSupportFragmentManager(), "CLEAR_PLAYLIST_" + absSmartPlaylist.name); - selection.remove(playlist); - i--; - } - } - - if (selection.size() > 0) { - DeletePlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), "DELETE_PLAYLIST"); - } + DeletePlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), "DELETE_PLAYLIST"); break; default: SongsMenuHelper.handleMenuClick(activity, getSongList(selection), menuItem.getItemId()); @@ -159,38 +146,12 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter= Build.VERSION_CODES.LOLLIPOP) { - itemView.setElevation(activity.getResources().getDimensionPixelSize(R.dimen.card_elevation)); - } - } - - if (image != null) { - int iconPadding = activity.getResources().getDimensionPixelSize(R.dimen.list_item_image_icon_padding); - image.setPadding(iconPadding, iconPadding, iconPadding, iconPadding); - image.setColorFilter(ATHUtil.resolveColor(activity, R.attr.iconColor), PorterDuff.Mode.SRC_IN); - } - if (menu != null) { menu.setOnClickListener(view -> { - final Playlist playlist = dataSet.get(getAdapterPosition()); final PopupMenu popupMenu = new PopupMenu(activity, view); - popupMenu.inflate(getItemViewType() == SMART_PLAYLIST ? R.menu.menu_item_smart_playlist : R.menu.menu_item_playlist); - popupMenu.setOnMenuItemClickListener(item -> { - if (item.getItemId() == R.id.action_clear_playlist) { - if (playlist instanceof AbsSmartPlaylist) { - ClearSmartPlaylistDialog.create((AbsSmartPlaylist) playlist).show(activity.getSupportFragmentManager(), "CLEAR_SMART_PLAYLIST_" + playlist.name); - return true; - } - } - return PlaylistMenuHelper.handleMenuClick( - activity, dataSet.get(getAdapterPosition()), item); - }); + + popupMenu.inflate(R.menu.menu_item_playlist); + popupMenu.setOnMenuItemClickListener(item -> PlaylistMenuHelper.handleMenuClick(activity, dataSet.get(getAdapterPosition()), item)); popupMenu.show(); }); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java deleted file mode 100644 index 89d1bccc..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.kabouzeid.gramophone.dialogs; - -import android.app.Dialog; -import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.fragment.app.DialogFragment; -import android.text.Html; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.model.playlist.AbsSmartPlaylist; - -public class ClearSmartPlaylistDialog extends DialogFragment { - - @NonNull - public static ClearSmartPlaylistDialog create(AbsSmartPlaylist playlist) { - ClearSmartPlaylistDialog dialog = new ClearSmartPlaylistDialog(); - Bundle args = new Bundle(); - args.putParcelable("playlist", playlist); - dialog.setArguments(args); - return dialog; - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - // noinspection unchecked - final AbsSmartPlaylist playlist = getArguments().getParcelable("playlist"); - int title = R.string.clear_playlist_title; - // noinspection ConstantConditions - CharSequence content = Html.fromHtml(getString(R.string.clear_playlist_x, playlist.name)); - - return new MaterialDialog.Builder(getActivity()) - .title(title) - .content(content) - .positiveText(R.string.clear_action) - .negativeText(android.R.string.cancel) - .onPositive((dialog, which) -> { - if (getActivity() == null) { - return; - } - playlist.clear(getActivity()); - }) - .build(); - } -} diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/playlist/AbsSmartPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/playlist/AbsSmartPlaylist.java deleted file mode 100644 index c834d712..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/model/playlist/AbsSmartPlaylist.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.kabouzeid.gramophone.model.playlist; - -import android.content.Context; -import android.os.Parcel; -import androidx.annotation.DrawableRes; -import androidx.annotation.Nullable; - -import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.model.Playlist; -import com.kabouzeid.gramophone.model.Song; - -import java.util.List; - -public abstract class AbsSmartPlaylist extends Playlist { - @DrawableRes - public final int iconRes; - - public AbsSmartPlaylist(final String name, final int iconRes) { - super(-Math.abs(31 * name.hashCode() + (iconRes * name.hashCode() * 31 * 31)), name); - this.iconRes = iconRes; - } - - public AbsSmartPlaylist() { - super(); - this.iconRes = R.drawable.ic_queue_music_white_24dp; - } - - public abstract void clear(Context context); - - public abstract List getSongs(Context context); - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + iconRes; - return result; - } - - @Override - public boolean equals(@Nullable final Object obj) { - if (super.equals(obj)) { - if (getClass() != obj.getClass()) { - return false; - } - final AbsSmartPlaylist other = (AbsSmartPlaylist) obj; - return iconRes == other.iconRes; - } - return false; - } - - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - super.writeToParcel(dest, flags); - dest.writeInt(this.iconRes); - } - - protected AbsSmartPlaylist(Parcel in) { - super(in); - this.iconRes = in.readInt(); - } -} diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java index 139235b5..6b64e20e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java @@ -28,7 +28,6 @@ import com.kabouzeid.gramophone.interfaces.MediaCallback; import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.model.PlaylistSong; import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.model.playlist.AbsSmartPlaylist; import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity; import com.kabouzeid.gramophone.util.ThemeUtil; import com.kabouzeid.gramophone.util.PlaylistUtil; @@ -97,26 +96,22 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme private void setUpRecyclerView() { ViewUtil.setUpFastScrollRecyclerViewColor(this, ((FastScrollRecyclerView) recyclerView), ThemeStore.accentColor(this)); recyclerView.setLayoutManager(new LinearLayoutManager(this)); - if (playlist instanceof AbsSmartPlaylist) { - adapter = new PlaylistSongAdapter(this, new ArrayList<>(), R.layout.item_list, false, this); - recyclerView.setAdapter(adapter); - } else { - recyclerViewDragDropManager = new RecyclerViewDragDropManager(); - final GeneralItemAnimator animator = new RefactoredDefaultItemAnimator(); - adapter = new OrderablePlaylistSongAdapter(this, new ArrayList<>(), R.layout.item_list, false, this, (fromPosition, toPosition) -> { - PlaylistUtil.moveItem(playlist.id, (PlaylistSong) adapter.getDataSet().get(fromPosition), toPosition); - Song song = adapter.getDataSet().remove(fromPosition); - adapter.getDataSet().add(toPosition, song); - adapter.notifyItemMoved(fromPosition, toPosition); - }); - wrappedAdapter = recyclerViewDragDropManager.createWrappedAdapter(adapter); + recyclerViewDragDropManager = new RecyclerViewDragDropManager(); + final GeneralItemAnimator animator = new RefactoredDefaultItemAnimator(); + adapter = new OrderablePlaylistSongAdapter(this, new ArrayList<>(), R.layout.item_list, false, this, (fromPosition, toPosition) -> { + PlaylistUtil.moveItem(playlist.id, (PlaylistSong) adapter.getDataSet().get(fromPosition), toPosition); + Song song = adapter.getDataSet().remove(fromPosition); + adapter.getDataSet().add(toPosition, song); + adapter.notifyItemMoved(fromPosition, toPosition); + }); - recyclerView.setAdapter(wrappedAdapter); - recyclerView.setItemAnimator(animator); + wrappedAdapter = recyclerViewDragDropManager.createWrappedAdapter(adapter); - recyclerViewDragDropManager.attachRecyclerView(recyclerView); - } + recyclerView.setAdapter(wrappedAdapter); + recyclerView.setItemAnimator(animator); + + recyclerViewDragDropManager.attachRecyclerView(recyclerView); adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { @Override @@ -142,7 +137,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme @Override public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(playlist instanceof AbsSmartPlaylist ? R.menu.menu_smart_playlist_detail : R.menu.menu_playlist_detail, menu); + getMenuInflater().inflate(R.menu.menu_playlist_detail, menu); return super.onCreateOptionsMenu(menu); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java index fc700da5..f2265f59 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java @@ -112,11 +112,9 @@ public class MusicUtil { public static String buildInfoString(@Nullable final String one, @Nullable final String two) { // skip empty strings if (TextUtils.isEmpty(one)) { - // noinspection ConstantConditions return TextUtils.isEmpty(two) ? "" : two; } if (TextUtils.isEmpty(two)) { - // noinspection ConstantConditions return TextUtils.isEmpty(one) ? "" : one; } @@ -129,10 +127,6 @@ public class MusicUtil { return trackNumberToFix % 1000; } - public static boolean isFavoritePlaylist(@NonNull final Context context, @NonNull final Playlist playlist) { - return playlist.name != null && playlist.name.equals(context.getString(R.string.favorites)); - } - public static void toggleFavorite(@NonNull final Context context, @NonNull final Song song) { song.favorite = !song.favorite; diff --git a/app/src/main/res/menu/menu_item_smart_playlist.xml b/app/src/main/res/menu/menu_item_smart_playlist.xml deleted file mode 100644 index af4a09f3..00000000 --- a/app/src/main/res/menu/menu_item_smart_playlist.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/menu_smart_playlist_detail.xml b/app/src/main/res/menu/menu_smart_playlist_detail.xml deleted file mode 100644 index 950cbf12..00000000 --- a/app/src/main/res/menu/menu_smart_playlist_detail.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - -