remove final references to smart playlist class
This commit is contained in:
parent
7a3aa73cbe
commit
4dc3a89c0b
7 changed files with 39 additions and 254 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
package com.kabouzeid.gramophone.adapter;
|
package com.kabouzeid.gramophone.adapter;
|
||||||
|
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.os.Build;
|
import android.graphics.drawable.Drawable;
|
||||||
import androidx.annotation.LayoutRes;
|
import androidx.annotation.LayoutRes;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
@ -12,29 +12,25 @@ import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.PopupMenu;
|
import android.widget.PopupMenu;
|
||||||
|
|
||||||
|
import com.bumptech.glide.Glide;
|
||||||
import com.kabouzeid.appthemehelper.util.ATHUtil;
|
import com.kabouzeid.appthemehelper.util.ATHUtil;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter;
|
import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter;
|
||||||
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
|
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
|
||||||
import com.kabouzeid.gramophone.dialogs.ClearSmartPlaylistDialog;
|
|
||||||
import com.kabouzeid.gramophone.dialogs.DeletePlaylistDialog;
|
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.PlaylistMenuHelper;
|
||||||
import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper;
|
import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper;
|
||||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||||
import com.kabouzeid.gramophone.model.Playlist;
|
import com.kabouzeid.gramophone.model.Playlist;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
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 com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewHolder, Playlist> {
|
public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewHolder, Playlist> {
|
||||||
|
|
||||||
private static final int SMART_PLAYLIST = 0;
|
|
||||||
private static final int DEFAULT_PLAYLIST = 1;
|
|
||||||
|
|
||||||
protected final AppCompatActivity activity;
|
protected final AppCompatActivity activity;
|
||||||
protected List<Playlist> dataSet;
|
protected List<Playlist> dataSet;
|
||||||
protected int itemLayoutRes;
|
protected int itemLayoutRes;
|
||||||
|
|
@ -58,7 +54,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getItemId(int position) {
|
public long getItemId(int position) {
|
||||||
return dataSet.get(position).id.hashCode();
|
return dataSet.get(position).hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -87,27 +83,30 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
||||||
holder.shortSeparator.setVisibility(View.GONE);
|
holder.shortSeparator.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (holder.shortSeparator != null && !(dataSet.get(position) instanceof AbsSmartPlaylist)) {
|
if (holder.shortSeparator != null) {
|
||||||
holder.shortSeparator.setVisibility(View.VISIBLE);
|
holder.shortSeparator.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (holder.image != null) {
|
loadImage(playlist, holder);
|
||||||
holder.image.setImageResource(getIconRes(playlist));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getIconRes(Playlist playlist) {
|
protected void loadImage(Playlist playlist, final PlaylistAdapter.ViewHolder holder) {
|
||||||
if (playlist instanceof AbsSmartPlaylist) {
|
if (holder.image == null) return;
|
||||||
return ((AbsSmartPlaylist) playlist).iconRes;
|
|
||||||
}
|
|
||||||
|
|
||||||
return MusicUtil.isFavoritePlaylist(activity, playlist) ? R.drawable.ic_favorite_white_24dp : R.drawable.ic_queue_music_white_24dp;
|
CustomGlideRequest.Builder
|
||||||
|
.from(Glide.with(activity), playlist.id)
|
||||||
|
.generatePalette(activity).build()
|
||||||
|
.into(new CustomPaletteTarget(holder.image) {
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(Drawable placeholder) {
|
||||||
|
super.onLoadCleared(placeholder);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemViewType(int position) {
|
public void onColorReady(int color) {
|
||||||
return dataSet.get(position) instanceof AbsSmartPlaylist ? SMART_PLAYLIST : DEFAULT_PLAYLIST;
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -129,19 +128,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
||||||
protected void onMultipleItemAction(@NonNull MenuItem menuItem, @NonNull List<Playlist> selection) {
|
protected void onMultipleItemAction(@NonNull MenuItem menuItem, @NonNull List<Playlist> selection) {
|
||||||
switch (menuItem.getItemId()) {
|
switch (menuItem.getItemId()) {
|
||||||
case R.id.action_delete_playlist:
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
SongsMenuHelper.handleMenuClick(activity, getSongList(selection), menuItem.getItemId());
|
SongsMenuHelper.handleMenuClick(activity, getSongList(selection), menuItem.getItemId());
|
||||||
|
|
@ -159,38 +146,12 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
||||||
public ViewHolder(@NonNull View itemView, int itemViewType) {
|
public ViewHolder(@NonNull View itemView, int itemViewType) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
|
|
||||||
if (itemViewType == SMART_PLAYLIST) {
|
|
||||||
if (shortSeparator != null) {
|
|
||||||
shortSeparator.setVisibility(View.GONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
itemView.setBackgroundColor(ATHUtil.resolveColor(activity, R.attr.cardBackgroundColor));
|
|
||||||
if (Build.VERSION.SDK_INT >= 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) {
|
if (menu != null) {
|
||||||
menu.setOnClickListener(view -> {
|
menu.setOnClickListener(view -> {
|
||||||
final Playlist playlist = dataSet.get(getAdapterPosition());
|
|
||||||
final PopupMenu popupMenu = new PopupMenu(activity, view);
|
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 -> {
|
popupMenu.inflate(R.menu.menu_item_playlist);
|
||||||
if (item.getItemId() == R.id.action_clear_playlist) {
|
popupMenu.setOnMenuItemClickListener(item -> PlaylistMenuHelper.handleMenuClick(activity, dataSet.get(getAdapterPosition()), item));
|
||||||
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.show();
|
popupMenu.show();
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Song> 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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -28,7 +28,6 @@ import com.kabouzeid.gramophone.interfaces.MediaCallback;
|
||||||
import com.kabouzeid.gramophone.model.Playlist;
|
import com.kabouzeid.gramophone.model.Playlist;
|
||||||
import com.kabouzeid.gramophone.model.PlaylistSong;
|
import com.kabouzeid.gramophone.model.PlaylistSong;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
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.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.util.ThemeUtil;
|
import com.kabouzeid.gramophone.util.ThemeUtil;
|
||||||
import com.kabouzeid.gramophone.util.PlaylistUtil;
|
import com.kabouzeid.gramophone.util.PlaylistUtil;
|
||||||
|
|
@ -97,10 +96,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
private void setUpRecyclerView() {
|
private void setUpRecyclerView() {
|
||||||
ViewUtil.setUpFastScrollRecyclerViewColor(this, ((FastScrollRecyclerView) recyclerView), ThemeStore.accentColor(this));
|
ViewUtil.setUpFastScrollRecyclerViewColor(this, ((FastScrollRecyclerView) recyclerView), ThemeStore.accentColor(this));
|
||||||
recyclerView.setLayoutManager(new LinearLayoutManager(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();
|
recyclerViewDragDropManager = new RecyclerViewDragDropManager();
|
||||||
final GeneralItemAnimator animator = new RefactoredDefaultItemAnimator();
|
final GeneralItemAnimator animator = new RefactoredDefaultItemAnimator();
|
||||||
adapter = new OrderablePlaylistSongAdapter(this, new ArrayList<>(), R.layout.item_list, false, this, (fromPosition, toPosition) -> {
|
adapter = new OrderablePlaylistSongAdapter(this, new ArrayList<>(), R.layout.item_list, false, this, (fromPosition, toPosition) -> {
|
||||||
|
|
@ -116,7 +112,6 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
recyclerView.setItemAnimator(animator);
|
recyclerView.setItemAnimator(animator);
|
||||||
|
|
||||||
recyclerViewDragDropManager.attachRecyclerView(recyclerView);
|
recyclerViewDragDropManager.attachRecyclerView(recyclerView);
|
||||||
}
|
|
||||||
|
|
||||||
adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
|
adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -142,7 +137,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
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);
|
return super.onCreateOptionsMenu(menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -112,11 +112,9 @@ public class MusicUtil {
|
||||||
public static String buildInfoString(@Nullable final String one, @Nullable final String two) {
|
public static String buildInfoString(@Nullable final String one, @Nullable final String two) {
|
||||||
// skip empty strings
|
// skip empty strings
|
||||||
if (TextUtils.isEmpty(one)) {
|
if (TextUtils.isEmpty(one)) {
|
||||||
// noinspection ConstantConditions
|
|
||||||
return TextUtils.isEmpty(two) ? "" : two;
|
return TextUtils.isEmpty(two) ? "" : two;
|
||||||
}
|
}
|
||||||
if (TextUtils.isEmpty(two)) {
|
if (TextUtils.isEmpty(two)) {
|
||||||
// noinspection ConstantConditions
|
|
||||||
return TextUtils.isEmpty(one) ? "" : one;
|
return TextUtils.isEmpty(one) ? "" : one;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -129,10 +127,6 @@ public class MusicUtil {
|
||||||
return trackNumberToFix % 1000;
|
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) {
|
public static void toggleFavorite(@NonNull final Context context, @NonNull final Song song) {
|
||||||
song.favorite = !song.favorite;
|
song.favorite = !song.favorite;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_play"
|
|
||||||
android:title="@string/action_play" />
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_play_next"
|
|
||||||
android:title="@string/action_play_next" />
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_add_to_queue"
|
|
||||||
android:title="@string/action_add_to_queue" />
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_add_to_playlist"
|
|
||||||
android:title="@string/action_add_to_playlist" />
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_clear_playlist"
|
|
||||||
android:title="@string/action_clear_playlist" />
|
|
||||||
|
|
||||||
</menu>
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
tools:context="com.kabouzeid.gramophone.ui.activities.PlaylistDetailActivity">
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_shuffle_playlist"
|
|
||||||
android:icon="@drawable/ic_shuffle_white_24dp"
|
|
||||||
android:title="@string/action_shuffle_playlist"
|
|
||||||
app:showAsAction="ifRoom" />
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_play"
|
|
||||||
android:title="@string/action_play"
|
|
||||||
app:showAsAction="never" />
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_play_next"
|
|
||||||
android:title="@string/action_play_next"
|
|
||||||
app:showAsAction="never" />
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_add_to_queue"
|
|
||||||
android:title="@string/action_add_to_queue"
|
|
||||||
app:showAsAction="never" />
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_add_to_playlist"
|
|
||||||
android:title="@string/action_add_to_playlist" />
|
|
||||||
|
|
||||||
</menu>
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue