Adapter clean ups
This commit is contained in:
parent
61d8b8179b
commit
98dcdf2d47
55 changed files with 811 additions and 1147 deletions
|
|
@ -18,7 +18,6 @@ import android.widget.FrameLayout;
|
|||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.afollestad.materialdialogs.util.DialogUtils;
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||
|
|
@ -47,6 +46,9 @@ import com.squareup.otto.Subscribe;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.InjectView;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
|
|
@ -55,15 +57,24 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
|||
public static final String TAG = AlbumAdapter.class.getSimpleName();
|
||||
private static final int FADE_IN_TIME = 500;
|
||||
|
||||
@NonNull
|
||||
private final AppCompatActivity activity;
|
||||
private boolean usePalette;
|
||||
private List<Album> dataSet;
|
||||
private int defaultFooterColor;
|
||||
|
||||
public AlbumAdapter(@NonNull AppCompatActivity activity, @Nullable CabHolder cabHolder) {
|
||||
super(activity, cabHolder, R.menu.menu_media_selection);
|
||||
this.activity = activity;
|
||||
usePalette = PreferenceUtil.getInstance(activity).coloredAlbumFooters();
|
||||
defaultFooterColor = ColorUtil.resolveColor(activity, R.attr.default_bar_color);
|
||||
loadDataSet();
|
||||
setHasStableIds(true);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_grid_album, parent, false);
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_grid, parent, false);
|
||||
return new ViewHolder(view);
|
||||
}
|
||||
|
||||
|
|
@ -71,18 +82,18 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
|||
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
|
||||
final Album album = dataSet.get(position);
|
||||
|
||||
resetColors(holder.title, holder.artist, holder.footer);
|
||||
setFooterColor(holder.title, holder.text, holder.footer, defaultFooterColor, false);
|
||||
|
||||
final boolean isChecked = isChecked(album);
|
||||
holder.view.setActivated(isChecked);
|
||||
holder.checkMark.setVisibility(isChecked ? View.VISIBLE : View.INVISIBLE);
|
||||
holder.itemView.setActivated(isChecked);
|
||||
holder.selectedIndicator.setVisibility(isChecked ? View.VISIBLE : View.GONE);
|
||||
|
||||
holder.title.setText(album.title);
|
||||
holder.artist.setText(album.artistName);
|
||||
holder.text.setText(album.artistName);
|
||||
|
||||
ImageLoader.getInstance().displayImage(
|
||||
MusicUtil.getAlbumImageLoaderString(album),
|
||||
holder.albumArt,
|
||||
holder.image,
|
||||
new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.showImageOnFail(R.drawable.default_album_art)
|
||||
|
|
@ -94,13 +105,13 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
|||
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
|
||||
FadeInBitmapDisplayer.animate(view, FADE_IN_TIME);
|
||||
if (usePalette)
|
||||
paletteBlackAndWhite(holder.title, holder.artist, holder.footer);
|
||||
applyPalette(null, holder.title, holder.text, holder.footer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
|
||||
if (usePalette)
|
||||
applyPalette(loadedImage, holder.title, holder.artist, holder.footer);
|
||||
applyPalette(loadedImage, holder.title, holder.text, holder.footer);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
|
@ -141,37 +152,33 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
||||
@NonNull
|
||||
final ImageView albumArt;
|
||||
@NonNull
|
||||
final TextView title;
|
||||
@NonNull
|
||||
final TextView artist;
|
||||
final View footer;
|
||||
@NonNull
|
||||
final ImageView checkMark;
|
||||
@NonNull
|
||||
final View view;
|
||||
@InjectView(R.id.image)
|
||||
ImageView image;
|
||||
@InjectView(R.id.title)
|
||||
TextView title;
|
||||
@InjectView(R.id.text)
|
||||
TextView text;
|
||||
@InjectView(R.id.footer)
|
||||
View footer;
|
||||
@InjectView(R.id.selected_indicator)
|
||||
ImageView selectedIndicator;
|
||||
|
||||
public ViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
view = itemView;
|
||||
albumArt = (ImageView) itemView.findViewById(R.id.album_art);
|
||||
title = (TextView) itemView.findViewById(R.id.album_title);
|
||||
artist = (TextView) itemView.findViewById(R.id.album_interpret);
|
||||
footer = itemView.findViewById(R.id.footer);
|
||||
checkMark = (ImageView) itemView.findViewById(R.id.check_mark);
|
||||
view.setOnClickListener(this);
|
||||
view.setOnLongClickListener(this);
|
||||
ButterKnife.inject(this, itemView);
|
||||
|
||||
itemView.setOnClickListener(this);
|
||||
itemView.setOnLongClickListener(this);
|
||||
|
||||
// fixes the ripple starts at the right position
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
view.setOnTouchListener(new View.OnTouchListener() {
|
||||
image.setTransitionName(activity.getString(R.string.transition_album_art));
|
||||
// fixes the ripple, so that it starts at the right position instead of in the middle
|
||||
itemView.setOnTouchListener(new View.OnTouchListener() {
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
@Override
|
||||
public boolean onTouch(@NonNull View view, @NonNull MotionEvent motionEvent) {
|
||||
((FrameLayout) view.findViewById(R.id.content)).getForeground().setHotspot(motionEvent.getX(), motionEvent.getY());
|
||||
((FrameLayout) view.findViewById(R.id.container)).getForeground().setHotspot(motionEvent.getX(), motionEvent.getY());
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
|
@ -184,8 +191,8 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
|||
toggleChecked(getAdapterPosition());
|
||||
} else {
|
||||
Pair[] albumPairs = new Pair[]{
|
||||
Pair.create(albumArt,
|
||||
activity.getResources().getString(R.string.transition_album_cover)
|
||||
Pair.create(image,
|
||||
activity.getResources().getString(R.string.transition_album_art)
|
||||
)};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||
|
|
@ -200,14 +207,6 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
|||
}
|
||||
}
|
||||
|
||||
public AlbumAdapter(@NonNull AppCompatActivity activity, @Nullable CabHolder cabHolder) {
|
||||
super(activity, cabHolder, R.menu.menu_media_selection);
|
||||
this.activity = activity;
|
||||
usePalette = PreferenceUtil.getInstance(activity).coloredAlbumFooters();
|
||||
loadDataSet();
|
||||
setHasStableIds(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return dataSet.get(position).id;
|
||||
|
|
@ -224,33 +223,23 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
|||
.generate(new Palette.PaletteAsyncListener() {
|
||||
@Override
|
||||
public void onGenerated(@NonNull Palette palette) {
|
||||
final Palette.Swatch vibrantSwatch = palette.getVibrantSwatch();
|
||||
if (vibrantSwatch != null) {
|
||||
title.setTextColor(ColorUtil.getOpaqueColor(vibrantSwatch.getTitleTextColor()));
|
||||
artist.setTextColor(ColorUtil.getOpaqueColor(vibrantSwatch.getTitleTextColor()));
|
||||
ViewUtil.animateViewColor(footer, footer.getDrawingCacheBackgroundColor(), vibrantSwatch.getRgb());
|
||||
} else {
|
||||
paletteBlackAndWhite(title, artist, footer);
|
||||
}
|
||||
setFooterColor(title, artist, footer, palette.getVibrantColor(defaultFooterColor), true);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
paletteBlackAndWhite(title, artist, footer);
|
||||
setFooterColor(title, artist, footer, defaultFooterColor, true);
|
||||
}
|
||||
}
|
||||
|
||||
private void paletteBlackAndWhite(@NonNull final TextView title, @NonNull final TextView artist, final View footer) {
|
||||
title.setTextColor(ColorUtil.getOpaqueColor(DialogUtils.resolveColor(activity, R.attr.title_text_color)));
|
||||
artist.setTextColor(ColorUtil.getOpaqueColor(DialogUtils.resolveColor(activity, R.attr.caption_text_color)));
|
||||
int defaultBarColor = DialogUtils.resolveColor(activity, R.attr.default_bar_color);
|
||||
ViewUtil.animateViewColor(footer, defaultBarColor, defaultBarColor);
|
||||
}
|
||||
|
||||
private void resetColors(@NonNull final TextView title, @NonNull final TextView artist, @NonNull final View footer) {
|
||||
title.setTextColor(DialogUtils.resolveColor(activity, R.attr.title_text_color));
|
||||
artist.setTextColor(DialogUtils.resolveColor(activity, R.attr.caption_text_color));
|
||||
int defaultBarColor = DialogUtils.resolveColor(activity, R.attr.default_bar_color);
|
||||
footer.setBackgroundColor(defaultBarColor);
|
||||
private void setFooterColor(@NonNull final TextView title, @NonNull final TextView artist, final View footer, int footerColor, boolean animate) {
|
||||
int textColor = ColorUtil.getTextColorForBackground(footerColor);
|
||||
title.setTextColor(textColor);
|
||||
artist.setTextColor(textColor);
|
||||
if (animate) {
|
||||
ViewUtil.animateViewColor(footer, footer.getDrawingCacheBackgroundColor(), footerColor);
|
||||
} else {
|
||||
footer.setBackgroundColor(footerColor);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.kabouzeid.gramophone.adapter;
|
||||
|
||||
import android.os.Build;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.Pair;
|
||||
|
|
@ -29,6 +30,9 @@ import com.nostra13.universalimageloader.core.ImageLoader;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.InjectView;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
|
|
@ -65,7 +69,7 @@ public class ArtistAlbumAdapter extends AbsMultiSelectAdapter<ArtistAlbumAdapter
|
|||
@NonNull
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_grid_artist_album, parent, false);
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_grid_card, parent, false);
|
||||
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
|
||||
if (viewType == TYPE_FIRST) {
|
||||
params.leftMargin = listMargin;
|
||||
|
|
@ -81,7 +85,7 @@ public class ArtistAlbumAdapter extends AbsMultiSelectAdapter<ArtistAlbumAdapter
|
|||
|
||||
ImageLoader.getInstance().displayImage(
|
||||
MusicUtil.getAlbumImageLoaderString(album),
|
||||
holder.albumArt,
|
||||
holder.image,
|
||||
new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.showImageOnFail(R.drawable.default_album_art)
|
||||
|
|
@ -90,8 +94,8 @@ public class ArtistAlbumAdapter extends AbsMultiSelectAdapter<ArtistAlbumAdapter
|
|||
);
|
||||
|
||||
holder.title.setText(album.title);
|
||||
holder.year.setText(String.valueOf(album.year));
|
||||
holder.view.setActivated(isChecked(album));
|
||||
holder.text.setText(String.valueOf(album.year));
|
||||
holder.itemView.setActivated(isChecked(album));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -138,23 +142,23 @@ public class ArtistAlbumAdapter extends AbsMultiSelectAdapter<ArtistAlbumAdapter
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
||||
@NonNull
|
||||
final ImageView albumArt;
|
||||
@NonNull
|
||||
final TextView title;
|
||||
@NonNull
|
||||
final TextView year;
|
||||
@NonNull
|
||||
final View view;
|
||||
@InjectView(R.id.image)
|
||||
ImageView image;
|
||||
@InjectView(R.id.title)
|
||||
TextView title;
|
||||
@InjectView(R.id.text)
|
||||
TextView text;
|
||||
|
||||
public ViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
view = itemView;
|
||||
albumArt = (ImageView) itemView.findViewById(R.id.album_art);
|
||||
title = (TextView) itemView.findViewById(R.id.album_title);
|
||||
year = (TextView) itemView.findViewById(R.id.album_year);
|
||||
view.setOnClickListener(this);
|
||||
view.setOnLongClickListener(this);
|
||||
ButterKnife.inject(this, itemView);
|
||||
|
||||
itemView.setOnClickListener(this);
|
||||
itemView.setOnLongClickListener(this);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
image.setTransitionName(activity.getString(R.string.transition_album_art));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -163,8 +167,8 @@ public class ArtistAlbumAdapter extends AbsMultiSelectAdapter<ArtistAlbumAdapter
|
|||
toggleChecked(getAdapterPosition());
|
||||
} else {
|
||||
Pair[] albumPairs = new Pair[]{
|
||||
Pair.create(albumArt,
|
||||
activity.getResources().getString(R.string.transition_album_cover)
|
||||
Pair.create(image,
|
||||
activity.getResources().getString(R.string.transition_album_art)
|
||||
)};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||
|
|
|
|||
|
|
@ -9,13 +9,12 @@ import android.view.View;
|
|||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.afollestad.materialdialogs.util.DialogUtils;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
|
||||
|
|
@ -30,7 +29,7 @@ public class PlayingQueueAdapter extends ArrayAdapter<Song> {
|
|||
private final AppCompatActivity activity;
|
||||
|
||||
public PlayingQueueAdapter(@NonNull AppCompatActivity activity, @NonNull ArrayList<Song> playList) {
|
||||
super(activity, R.layout.item_list_playlist_song, playList);
|
||||
super(activity, R.layout.item_list_single_row, playList);
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
|
|
@ -39,10 +38,10 @@ public class PlayingQueueAdapter extends ArrayAdapter<Song> {
|
|||
public View getView(final int position, @Nullable View convertView, ViewGroup parent) {
|
||||
final Song song = getItem(position);
|
||||
if (convertView == null) {
|
||||
convertView = LayoutInflater.from(activity).inflate(R.layout.item_list_playlist_song, parent, false);
|
||||
convertView = LayoutInflater.from(activity).inflate(R.layout.item_list_single_row, parent, false);
|
||||
}
|
||||
final TextView title = (TextView) convertView.findViewById(R.id.song_title);
|
||||
final ImageView playingIndicator = (ImageView) convertView.findViewById(R.id.playing_indicator);
|
||||
final TextView title = (TextView) convertView.findViewById(R.id.title);
|
||||
final ImageView playingIndicator = (ImageView) convertView.findViewById(R.id.image);
|
||||
final ImageView overflowButton = (ImageView) convertView.findViewById(R.id.menu);
|
||||
|
||||
title.setText(song.title);
|
||||
|
|
@ -53,23 +52,25 @@ public class PlayingQueueAdapter extends ArrayAdapter<Song> {
|
|||
playingIndicator.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
overflowButton.setOnClickListener(new View.OnClickListener() {
|
||||
overflowButton.setOnClickListener(new SongMenuHelper.OnClickSongMenu(activity) {
|
||||
@Override
|
||||
public void onClick(final View v) {
|
||||
PopupMenu popupMenu = new PopupMenu(activity, v);
|
||||
popupMenu.inflate(R.menu.menu_item_playing_queue_song);
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(@NonNull MenuItem item) {
|
||||
if (item.getItemId() == R.id.action_remove_from_playing_queue) {
|
||||
MusicPlayerRemote.removeFromQueue(position);
|
||||
notifyDataSetChanged();
|
||||
return true;
|
||||
}
|
||||
return MenuItemClickHelper.handleSongMenuClick(activity, song, item);
|
||||
}
|
||||
});
|
||||
popupMenu.show();
|
||||
public Song getSong() {
|
||||
return song;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
if (item.getItemId() == R.id.action_remove_from_playing_queue) {
|
||||
MusicPlayerRemote.removeFromQueue(position);
|
||||
notifyDataSetChanged();
|
||||
return true;
|
||||
}
|
||||
return super.onMenuItemClick(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMenuRes() {
|
||||
return R.menu.menu_item_playing_queue_song;
|
||||
}
|
||||
});
|
||||
return convertView;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.kabouzeid.gramophone.adapter;
|
||||
|
||||
import android.os.Build;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.Pair;
|
||||
|
|
@ -18,8 +19,8 @@ import com.kabouzeid.gramophone.R;
|
|||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.ClearSmartPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.DeletePlaylistDialog;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.menu.PlaylistMenuHelper;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.loader.PlaylistLoader;
|
||||
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
||||
|
|
@ -31,8 +32,10 @@ import com.kabouzeid.gramophone.model.smartplaylist.LastAddedPlaylist;
|
|||
import com.kabouzeid.gramophone.model.smartplaylist.MyTopTracksPlaylist;
|
||||
import com.kabouzeid.gramophone.model.smartplaylist.RecentlyPlayedPlaylist;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.squareup.otto.Subscribe;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -48,8 +51,8 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
|||
|
||||
public static final String TAG = PlaylistAdapter.class.getSimpleName();
|
||||
|
||||
private int VIEW_TYPE_SMART = 0;
|
||||
private int VIEW_TYPE_DEFAULT = 1;
|
||||
private int SMART_PLAYLIST = 0;
|
||||
private int DEFAULT_PLAYLIST = 1;
|
||||
|
||||
protected final AppCompatActivity activity;
|
||||
protected List<Playlist> dataSet;
|
||||
|
|
@ -79,17 +82,21 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
|||
@NonNull
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
int layoutRes = viewType == VIEW_TYPE_DEFAULT ? R.layout.item_list_playlist : R.layout.item_list_smart_playlist;
|
||||
View view = LayoutInflater.from(activity).inflate(layoutRes, parent, false);
|
||||
return new ViewHolder(view);
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list_single_row, parent, false);
|
||||
return new ViewHolder(view, viewType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
|
||||
final Playlist playlist = dataSet.get(position);
|
||||
holder.playlistName.setText(playlist.name);
|
||||
holder.view.setActivated(isChecked(playlist));
|
||||
holder.icon.setImageResource(getIconRes(playlist));
|
||||
holder.itemView.setActivated(isChecked(playlist));
|
||||
|
||||
holder.icon.setImageDrawable(Util.getTintedDrawable(
|
||||
activity,
|
||||
getIconRes(playlist),
|
||||
ColorUtil.resolveColor(activity, R.attr.themed_drawable_color)
|
||||
));
|
||||
}
|
||||
|
||||
private int getIconRes(Playlist playlist) {
|
||||
|
|
@ -101,7 +108,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
|||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
return dataSet.get(position) instanceof AbsSmartPlaylist ? VIEW_TYPE_SMART : VIEW_TYPE_DEFAULT;
|
||||
return dataSet.get(position) instanceof AbsSmartPlaylist ? SMART_PLAYLIST : DEFAULT_PLAYLIST;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -154,25 +161,37 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
||||
@InjectView(R.id.playlist_name)
|
||||
@InjectView(R.id.title)
|
||||
TextView playlistName;
|
||||
@InjectView(R.id.menu)
|
||||
View menu;
|
||||
@InjectView(R.id.playlist_icon)
|
||||
@InjectView(R.id.image)
|
||||
ImageView icon;
|
||||
View view;
|
||||
@InjectView(R.id.short_separator)
|
||||
View shortSeparator;
|
||||
|
||||
public ViewHolder(@NonNull View itemView) {
|
||||
public ViewHolder(@NonNull View itemView, int itemViewType) {
|
||||
super(itemView);
|
||||
ButterKnife.inject(this, itemView);
|
||||
view = itemView;
|
||||
view.setOnClickListener(this);
|
||||
view.setOnLongClickListener(this);
|
||||
|
||||
if (itemViewType == SMART_PLAYLIST) {
|
||||
shortSeparator.setVisibility(View.GONE);
|
||||
itemView.setBackgroundColor(ColorUtil.resolveColor(activity, R.attr.card_color));
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
itemView.setElevation(activity.getResources().getDimensionPixelSize(R.dimen.card_elevation));
|
||||
}
|
||||
}
|
||||
|
||||
int padding = activity.getResources().getDimensionPixelSize(R.dimen.list_item_image_icon_padding);
|
||||
icon.setPadding(padding, padding, padding, padding);
|
||||
|
||||
itemView.setOnClickListener(this);
|
||||
itemView.setOnLongClickListener(this);
|
||||
menu.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
PopupMenu popupMenu = new PopupMenu(activity, view);
|
||||
popupMenu.inflate(getItemViewType() == VIEW_TYPE_SMART ? R.menu.menu_item_smart_playlist : R.menu.menu_item_playlist);
|
||||
popupMenu.inflate(getItemViewType() == SMART_PLAYLIST ? R.menu.menu_item_smart_playlist : R.menu.menu_item_playlist);
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(@NonNull MenuItem item) {
|
||||
|
|
@ -183,7 +202,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
|||
return true;
|
||||
}
|
||||
}
|
||||
return MenuItemClickHelper.handlePlaylistMenuClick(
|
||||
return PlaylistMenuHelper.handleMenuClick(
|
||||
activity, dataSet.get(getAdapterPosition()), item);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,22 +1,21 @@
|
|||
package com.kabouzeid.gramophone.adapter;
|
||||
|
||||
import android.os.Build;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
||||
import com.kabouzeid.gramophone.lastfm.rest.LastFMRestClient;
|
||||
import com.kabouzeid.gramophone.lastfm.rest.model.artistinfo.ArtistInfo;
|
||||
import com.kabouzeid.gramophone.lastfm.rest.model.artistinfo.Image;
|
||||
|
|
@ -37,6 +36,9 @@ import java.util.ArrayList;
|
|||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.InjectView;
|
||||
import butterknife.Optional;
|
||||
import retrofit.Callback;
|
||||
import retrofit.RetrofitError;
|
||||
import retrofit.client.Response;
|
||||
|
|
@ -100,22 +102,19 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
|
|||
@NonNull
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
if (viewType == ALBUM)
|
||||
return new ViewHolder(LayoutInflater.from(activity).inflate(R.layout.item_search_album, parent, false), viewType);
|
||||
if (viewType == ARTIST)
|
||||
return new ViewHolder(LayoutInflater.from(activity).inflate(R.layout.item_search_artist, parent, false), viewType);
|
||||
if (viewType == SONG)
|
||||
return new ViewHolder(LayoutInflater.from(activity).inflate(R.layout.item_search_song, parent, false), viewType);
|
||||
return new ViewHolder(LayoutInflater.from(activity).inflate(R.layout.item_search_header, parent, false), viewType);
|
||||
if (viewType == HEADER)
|
||||
return new ViewHolder(LayoutInflater.from(activity).inflate(R.layout.sub_header, parent, false), viewType);
|
||||
return new ViewHolder(LayoutInflater.from(activity).inflate(R.layout.item_list, parent, false), viewType);
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
|
||||
switch (getItemViewType(position)) {
|
||||
case ALBUM:
|
||||
final Album album = (Album) results.get(position);
|
||||
holder.title.setText(album.title);
|
||||
holder.subTitle.setText(album.artistName);
|
||||
holder.text.setText(album.artistName);
|
||||
ImageLoader.getInstance().displayImage(
|
||||
MusicUtil.getAlbumImageLoaderString(album),
|
||||
holder.image,
|
||||
|
|
@ -129,7 +128,7 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
|
|||
case ARTIST:
|
||||
final Artist artist = (Artist) results.get(position);
|
||||
holder.title.setText(artist.name);
|
||||
holder.subTitle.setText(MusicUtil.getArtistInfoString(activity, artist));
|
||||
holder.text.setText(MusicUtil.getArtistInfoString(activity, artist));
|
||||
if (MusicUtil.isArtistNameUnknown(artist.name)) {
|
||||
holder.image.setImageResource(R.drawable.default_artist_image);
|
||||
break;
|
||||
|
|
@ -169,7 +168,7 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
|
|||
case SONG:
|
||||
final Song song = (Song) results.get(position);
|
||||
holder.title.setText(song.title);
|
||||
holder.subTitle.setText(song.albumName);
|
||||
holder.text.setText(song.albumName);
|
||||
break;
|
||||
default:
|
||||
holder.title.setText(results.get(position).toString());
|
||||
|
|
@ -183,53 +182,46 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
@InjectView(R.id.title)
|
||||
TextView title;
|
||||
@Nullable
|
||||
private final ImageView image;
|
||||
@NonNull
|
||||
public final TextView title;
|
||||
@Optional
|
||||
@InjectView(R.id.image)
|
||||
ImageView image;
|
||||
@Nullable
|
||||
public final TextView subTitle;
|
||||
private final int viewType;
|
||||
@Optional
|
||||
@InjectView(R.id.text)
|
||||
TextView text;
|
||||
@Nullable
|
||||
@Optional
|
||||
@InjectView(R.id.menu)
|
||||
View menu;
|
||||
|
||||
public ViewHolder(@NonNull View itemView, int viewType) {
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
public ViewHolder(@NonNull View itemView, int itemViewType) {
|
||||
super(itemView);
|
||||
itemView.setOnClickListener(this);
|
||||
this.viewType = viewType;
|
||||
switch (viewType) {
|
||||
case ALBUM:
|
||||
image = (ImageView) itemView.findViewById(R.id.album_art);
|
||||
title = (TextView) itemView.findViewById(R.id.album_title);
|
||||
subTitle = (TextView) itemView.findViewById(R.id.album_artist);
|
||||
break;
|
||||
case ARTIST:
|
||||
image = (ImageView) itemView.findViewById(R.id.artist_image);
|
||||
title = (TextView) itemView.findViewById(R.id.artist_name);
|
||||
subTitle = (TextView) itemView.findViewById(R.id.artist_info);
|
||||
break;
|
||||
ButterKnife.inject(this, itemView);
|
||||
|
||||
switch (itemViewType) {
|
||||
case SONG:
|
||||
image = null;
|
||||
title = (TextView) itemView.findViewById(R.id.song_title);
|
||||
subTitle = (TextView) itemView.findViewById(R.id.song_info);
|
||||
itemView.findViewById(R.id.menu).setOnClickListener(new View.OnClickListener() {
|
||||
menu.setOnClickListener(new SongMenuHelper.OnClickSongMenu(activity) {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
PopupMenu popupMenu = new PopupMenu(activity, view);
|
||||
popupMenu.inflate(R.menu.menu_item_song);
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(@NonNull MenuItem menuItem) {
|
||||
return MenuItemClickHelper.handleSongMenuClick(activity, (Song) results.get(getAdapterPosition()), menuItem);
|
||||
}
|
||||
});
|
||||
popupMenu.show();
|
||||
public Song getSong() {
|
||||
return (Song) results.get(getAdapterPosition());
|
||||
}
|
||||
});
|
||||
break;
|
||||
default:
|
||||
image = null;
|
||||
title = (TextView) itemView.findViewById(R.id.title);
|
||||
subTitle = null;
|
||||
itemView.setOnClickListener(null);
|
||||
case ALBUM:
|
||||
menu.setVisibility(View.GONE);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
image.setTransitionName(activity.getString(R.string.transition_album_art));
|
||||
}
|
||||
break;
|
||||
case ARTIST:
|
||||
menu.setVisibility(View.GONE);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
image.setTransitionName(activity.getString(R.string.transition_artist_image));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -237,13 +229,13 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
|
|||
@Override
|
||||
public void onClick(View view) {
|
||||
Object item = results.get(getAdapterPosition());
|
||||
switch (viewType) {
|
||||
switch (getItemViewType()) {
|
||||
case ALBUM:
|
||||
NavigationUtil.goToAlbum(activity,
|
||||
((Album) item).id,
|
||||
new Pair[]{
|
||||
Pair.create(image,
|
||||
activity.getResources().getString(R.string.transition_album_cover)
|
||||
activity.getResources().getString(R.string.transition_album_art)
|
||||
)
|
||||
});
|
||||
break;
|
||||
|
|
@ -252,7 +244,7 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
|
|||
((Artist) item).id,
|
||||
new Pair[]{
|
||||
Pair.create(image,
|
||||
activity.getResources().getString(R.string.transition_artist_image)
|
||||
activity.getResources().getString(R.string.transition_album_art)
|
||||
)
|
||||
});
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
package com.kabouzeid.gramophone.adapter;
|
||||
package com.kabouzeid.gramophone.adapter.artist;
|
||||
|
||||
import android.os.Build;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.AbsMultiSelectAdapter;
|
||||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
|
|
@ -36,6 +36,8 @@ import com.squareup.otto.Subscribe;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.InjectView;
|
||||
import retrofit.Callback;
|
||||
import retrofit.RetrofitError;
|
||||
import retrofit.client.Response;
|
||||
|
|
@ -43,14 +45,12 @@ import retrofit.client.Response;
|
|||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolder, Artist> {
|
||||
@NonNull
|
||||
public abstract class AbsArtistAdapter extends AbsMultiSelectAdapter<AbsArtistAdapter.ViewHolder, Artist> {
|
||||
protected final AppCompatActivity activity;
|
||||
protected List<Artist> dataSet;
|
||||
@NonNull
|
||||
protected final LastFMRestClient lastFMRestClient;
|
||||
|
||||
public ArtistAdapter(@NonNull AppCompatActivity activity, @Nullable CabHolder cabHolder) {
|
||||
public AbsArtistAdapter(@NonNull AppCompatActivity activity, @Nullable CabHolder cabHolder) {
|
||||
super(activity, cabHolder, R.menu.menu_media_selection);
|
||||
this.activity = activity;
|
||||
lastFMRestClient = new LastFMRestClient(activity);
|
||||
|
|
@ -67,23 +67,26 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
|||
dataSet = ArtistLoader.getAllArtists(activity);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list_artist, parent, false);
|
||||
return new ViewHolder(view);
|
||||
protected Image getArtistImageToUse(List<Image> images) {
|
||||
int thumbnailIndex = 0;
|
||||
if (images.size() > 2) {
|
||||
thumbnailIndex = 2;
|
||||
} else if (images.size() > 1) {
|
||||
thumbnailIndex = 1;
|
||||
}
|
||||
return images.get(thumbnailIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
|
||||
final Artist artist = dataSet.get(position);
|
||||
|
||||
holder.artistName.setText(artist.name);
|
||||
holder.artistInfo.setText(MusicUtil.getArtistInfoString(activity, artist));
|
||||
holder.view.setActivated(isChecked(artist));
|
||||
holder.title.setText(artist.name);
|
||||
holder.text.setText(MusicUtil.getArtistInfoString(activity, artist));
|
||||
holder.itemView.setActivated(isChecked(artist));
|
||||
|
||||
if (MusicUtil.isArtistNameUnknown(artist.name)) {
|
||||
holder.artistImage.setImageResource(R.drawable.default_artist_image);
|
||||
holder.image.setImageResource(R.drawable.default_artist_image);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -91,15 +94,9 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
|||
@Override
|
||||
public void success(@NonNull ArtistInfo artistInfo, Response response) {
|
||||
if (artistInfo.getArtist() != null) {
|
||||
int thumbnailIndex = 0;
|
||||
List<Image> images = artistInfo.getArtist().getImage();
|
||||
if (images.size() > 2) {
|
||||
thumbnailIndex = 2;
|
||||
} else if (images.size() > 1) {
|
||||
thumbnailIndex = 1;
|
||||
}
|
||||
ImageLoader.getInstance().displayImage(images.get(thumbnailIndex).getText(),
|
||||
holder.artistImage,
|
||||
ImageLoader.getInstance().displayImage(getArtistImageToUse(images).getText(),
|
||||
holder.image,
|
||||
new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.cacheOnDisk(true)
|
||||
|
|
@ -109,13 +106,13 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
|||
.build()
|
||||
);
|
||||
} else {
|
||||
holder.artistImage.setImageResource(R.drawable.default_artist_image);
|
||||
holder.image.setImageResource(R.drawable.default_artist_image);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failure(RetrofitError error) {
|
||||
holder.artistImage.setImageResource(R.drawable.default_artist_image);
|
||||
holder.image.setImageResource(R.drawable.default_artist_image);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -154,48 +151,6 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
|||
return songs;
|
||||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
||||
@NonNull
|
||||
final TextView artistName;
|
||||
@NonNull
|
||||
final TextView artistInfo;
|
||||
@NonNull
|
||||
final ImageView artistImage;
|
||||
@NonNull
|
||||
final View view;
|
||||
|
||||
public ViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
view = itemView;
|
||||
artistName = (TextView) itemView.findViewById(R.id.artist_name);
|
||||
artistInfo = (TextView) itemView.findViewById(R.id.artist_info);
|
||||
artistImage = (ImageView) itemView.findViewById(R.id.artist_image);
|
||||
view.setOnClickListener(this);
|
||||
view.setOnLongClickListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (isInQuickSelectMode()) {
|
||||
toggleChecked(getAdapterPosition());
|
||||
} else {
|
||||
Pair[] artistPairs = new Pair[]{
|
||||
Pair.create(artistImage,
|
||||
activity.getResources().getString(R.string.transition_artist_image)
|
||||
)};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
artistPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(artistPairs);
|
||||
NavigationUtil.goToArtist(activity, dataSet.get(getAdapterPosition()).id, artistPairs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onLongClick(View view) {
|
||||
toggleChecked(getAdapterPosition());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
|
||||
super.onDetachedFromRecyclerView(recyclerView);
|
||||
|
|
@ -218,4 +173,45 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
||||
@InjectView(R.id.title)
|
||||
TextView title;
|
||||
@InjectView(R.id.text)
|
||||
TextView text;
|
||||
@InjectView(R.id.image)
|
||||
ImageView image;
|
||||
|
||||
public ViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.inject(this, itemView);
|
||||
itemView.setOnClickListener(this);
|
||||
itemView.setOnLongClickListener(this);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
image.setTransitionName(activity.getString(R.string.transition_artist_image));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (isInQuickSelectMode()) {
|
||||
toggleChecked(getAdapterPosition());
|
||||
} else {
|
||||
Pair[] artistPairs = new Pair[]{
|
||||
Pair.create(image,
|
||||
activity.getResources().getString(R.string.transition_artist_image)
|
||||
)};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
artistPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(artistPairs);
|
||||
NavigationUtil.goToArtist(activity, dataSet.get(getAdapterPosition()).id, artistPairs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onLongClick(View view) {
|
||||
toggleChecked(getAdapterPosition());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
package com.kabouzeid.gramophone.adapter.artist;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.lastfm.rest.model.artistinfo.Image;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class ArtistGridAdapter extends AbsArtistAdapter {
|
||||
public ArtistGridAdapter(@NonNull AppCompatActivity activity, @Nullable CabHolder cabHolder) {
|
||||
super(activity, cabHolder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_grid, parent, false);
|
||||
return new ViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Image getArtistImageToUse(List<Image> images) {
|
||||
return images.get(images.size() - 1);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package com.kabouzeid.gramophone.adapter.artist;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class ArtistListAdapter extends AbsArtistAdapter {
|
||||
public ArtistListAdapter(@NonNull AppCompatActivity activity, @Nullable CabHolder cabHolder) {
|
||||
super(activity, cabHolder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list, parent, false);
|
||||
return new ViewHolder(view);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter;
|
||||
package com.kabouzeid.gramophone.adapter.song;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.Nullable;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter;
|
||||
package com.kabouzeid.gramophone.adapter.song;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
|
@ -9,21 +9,23 @@ import android.view.MenuItem;
|
|||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.AbsMultiSelectAdapter;
|
||||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.InjectView;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
|
|
@ -45,7 +47,7 @@ public class AlbumSongAdapter extends AbsMultiSelectAdapter<AlbumSongAdapter.Vie
|
|||
return dataSet.get(position).id;
|
||||
}
|
||||
|
||||
public void updateDataSet(ArrayList<Song> objects){
|
||||
public void updateDataSet(ArrayList<Song> objects) {
|
||||
dataSet = objects;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
|
@ -53,7 +55,7 @@ public class AlbumSongAdapter extends AbsMultiSelectAdapter<AlbumSongAdapter.Vie
|
|||
@NonNull
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list_album_song, parent, false);
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list, parent, false);
|
||||
return new ViewHolder(view);
|
||||
}
|
||||
|
||||
|
|
@ -63,10 +65,10 @@ public class AlbumSongAdapter extends AbsMultiSelectAdapter<AlbumSongAdapter.Vie
|
|||
|
||||
final int trackNumber = MusicUtil.getFixedTrackNumber(song.trackNumber);
|
||||
final String trackNumberString = trackNumber > 0 ? String.valueOf(trackNumber) : "-";
|
||||
holder.trackNumber.setText(trackNumberString);
|
||||
holder.songTitle.setText(song.title);
|
||||
holder.artistName.setText(MusicUtil.getReadableDurationString(song.duration));
|
||||
holder.view.setActivated(isChecked(song));
|
||||
holder.track_number.setText(trackNumberString);
|
||||
holder.title.setText(song.title);
|
||||
holder.text.setText(MusicUtil.getReadableDurationString(song.duration));
|
||||
holder.itemView.setActivated(isChecked(song));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -95,38 +97,31 @@ public class AlbumSongAdapter extends AbsMultiSelectAdapter<AlbumSongAdapter.Vie
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
||||
@NonNull
|
||||
final TextView songTitle;
|
||||
@NonNull
|
||||
final TextView trackNumber;
|
||||
@NonNull
|
||||
final TextView artistName;
|
||||
@NonNull
|
||||
final ImageView overflowButton;
|
||||
@NonNull
|
||||
final View view;
|
||||
@InjectView(R.id.title)
|
||||
TextView title;
|
||||
@InjectView(R.id.text)
|
||||
TextView text;
|
||||
@InjectView(R.id.image)
|
||||
ImageView image;
|
||||
@InjectView(R.id.image_text)
|
||||
TextView track_number;
|
||||
@InjectView(R.id.menu)
|
||||
ImageView menu;
|
||||
|
||||
public ViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
view = itemView;
|
||||
songTitle = (TextView) itemView.findViewById(R.id.song_title);
|
||||
trackNumber = (TextView) itemView.findViewById(R.id.track_number);
|
||||
artistName = (TextView) itemView.findViewById(R.id.song_info);
|
||||
overflowButton = (ImageView) itemView.findViewById(R.id.menu);
|
||||
view.setOnClickListener(this);
|
||||
view.setOnLongClickListener(this);
|
||||
overflowButton.setOnClickListener(new View.OnClickListener() {
|
||||
ButterKnife.inject(this, itemView);
|
||||
|
||||
menu.setVisibility(View.VISIBLE);
|
||||
track_number.setVisibility(View.VISIBLE);
|
||||
image.setVisibility(View.GONE);
|
||||
|
||||
itemView.setOnClickListener(this);
|
||||
itemView.setOnLongClickListener(this);
|
||||
menu.setOnClickListener(new SongMenuHelper.OnClickSongMenu(activity) {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
PopupMenu popupMenu = new PopupMenu(activity, v);
|
||||
popupMenu.inflate(R.menu.menu_item_song);
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(@NonNull MenuItem item) {
|
||||
return MenuItemClickHelper.handleSongMenuClick(activity, dataSet.get(getAdapterPosition()), item);
|
||||
}
|
||||
});
|
||||
popupMenu.show();
|
||||
public Song getSong() {
|
||||
return dataSet.get(getAdapterPosition());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter;
|
||||
package com.kabouzeid.gramophone.adapter.song;
|
||||
|
||||
import android.os.Build;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.Pair;
|
||||
|
|
@ -11,15 +12,14 @@ import android.view.View;
|
|||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.afollestad.materialcab.MaterialCab;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
|
|
@ -45,7 +45,7 @@ public class ArtistSongAdapter extends ArrayAdapter<Song> implements MaterialCab
|
|||
private final AppCompatActivity activity;
|
||||
|
||||
public ArtistSongAdapter(@NonNull AppCompatActivity activity, @NonNull ArrayList<Song> songs, @Nullable CabHolder cabHolder) {
|
||||
super(activity, R.layout.item_list_song, songs);
|
||||
super(activity, R.layout.item_list, songs);
|
||||
this.activity = activity;
|
||||
this.cabHolder = cabHolder;
|
||||
checked = new ArrayList<>();
|
||||
|
|
@ -63,12 +63,12 @@ public class ArtistSongAdapter extends ArrayAdapter<Song> implements MaterialCab
|
|||
public View getView(final int position, @Nullable View convertView, ViewGroup parent) {
|
||||
final Song song = getItem(position);
|
||||
if (convertView == null) {
|
||||
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_list_artist_song, parent, false);
|
||||
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_list, parent, false);
|
||||
}
|
||||
|
||||
final TextView songTitle = (TextView) convertView.findViewById(R.id.song_title);
|
||||
final TextView songInfo = (TextView) convertView.findViewById(R.id.song_info);
|
||||
final ImageView albumArt = (ImageView) convertView.findViewById(R.id.album_art);
|
||||
final TextView songTitle = (TextView) convertView.findViewById(R.id.title);
|
||||
final TextView songInfo = (TextView) convertView.findViewById(R.id.text);
|
||||
final ImageView albumArt = (ImageView) convertView.findViewById(R.id.image);
|
||||
|
||||
songTitle.setText(song.title);
|
||||
songInfo.setText(song.albumName);
|
||||
|
|
@ -83,29 +83,29 @@ public class ArtistSongAdapter extends ArrayAdapter<Song> implements MaterialCab
|
|||
.build()
|
||||
);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
albumArt.setTransitionName(activity.getString(R.string.transition_album_art));
|
||||
}
|
||||
|
||||
final ImageView overflowButton = (ImageView) convertView.findViewById(R.id.menu);
|
||||
overflowButton.setOnClickListener(new View.OnClickListener() {
|
||||
overflowButton.setOnClickListener(new SongMenuHelper.OnClickSongMenu(activity) {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
PopupMenu popupMenu = new PopupMenu(activity, v);
|
||||
popupMenu.inflate(R.menu.menu_item_song);
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(@NonNull MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_go_to_album:
|
||||
Pair[] albumPairs = new Pair[]{
|
||||
Pair.create(albumArt, activity.getResources().getString(R.string.transition_album_cover))
|
||||
};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, song.albumId, albumPairs);
|
||||
return true;
|
||||
}
|
||||
return MenuItemClickHelper.handleSongMenuClick(activity, song, item);
|
||||
}
|
||||
});
|
||||
popupMenu.show();
|
||||
public Song getSong() {
|
||||
return song;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
if (item.getItemId() == R.id.action_go_to_album) {
|
||||
Pair[] albumPairs = new Pair[]{
|
||||
Pair.create(albumArt, activity.getResources().getString(R.string.transition_album_art))
|
||||
};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, song.albumId, albumPairs);
|
||||
return true;
|
||||
}
|
||||
return super.onMenuItemClick(item);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter;
|
||||
package com.kabouzeid.gramophone.adapter.song;
|
||||
|
||||
import android.os.Build;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.Pair;
|
||||
|
|
@ -10,14 +11,13 @@ import android.view.MenuItem;
|
|||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.RemoveFromPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
||||
import com.kabouzeid.gramophone.model.Playlist;
|
||||
|
|
@ -33,6 +33,9 @@ import com.nostra13.universalimageloader.core.ImageLoader;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.InjectView;
|
||||
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
|
|
@ -72,8 +75,8 @@ public class PlaylistSongAdapter extends AbsPlaylistSongAdapter<PlaylistSongAdap
|
|||
@NonNull
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list_song, parent, false);
|
||||
return new ViewHolder(view, R.menu.menu_item_playlist_song);
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list, parent, false);
|
||||
return new ViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -81,11 +84,11 @@ public class PlaylistSongAdapter extends AbsPlaylistSongAdapter<PlaylistSongAdap
|
|||
final PlaylistSong song = dataSet.get(position);
|
||||
|
||||
holder.itemView.setActivated(isChecked(song));
|
||||
holder.songTitle.setText(song.title);
|
||||
holder.songInfo.setText(song.artistName);
|
||||
holder.title.setText(song.title);
|
||||
holder.text.setText(song.artistName);
|
||||
ImageLoader.getInstance().displayImage(
|
||||
MusicUtil.getSongImageLoaderString(song),
|
||||
holder.albumArt,
|
||||
holder.image,
|
||||
new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.showImageOnFail(R.drawable.default_album_art)
|
||||
|
|
@ -107,7 +110,7 @@ public class PlaylistSongAdapter extends AbsPlaylistSongAdapter<PlaylistSongAdap
|
|||
@Override
|
||||
protected void onMultipleItemAction(@NonNull MenuItem menuItem, ArrayList<PlaylistSong> selection) {
|
||||
switch (menuItem.getItemId()) {
|
||||
case R.id.action_delete_from_playlist:
|
||||
case R.id.action_remove_from_playlist:
|
||||
RemoveFromPlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST");
|
||||
break;
|
||||
case R.id.action_add_to_playlist:
|
||||
|
|
@ -132,48 +135,53 @@ public class PlaylistSongAdapter extends AbsPlaylistSongAdapter<PlaylistSongAdap
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
||||
@NonNull
|
||||
final TextView songTitle;
|
||||
@NonNull
|
||||
final TextView songInfo;
|
||||
@NonNull
|
||||
final ImageView overflowButton;
|
||||
@NonNull
|
||||
final ImageView albumArt;
|
||||
@InjectView(R.id.title)
|
||||
TextView title;
|
||||
@InjectView(R.id.text)
|
||||
TextView text;
|
||||
@InjectView(R.id.menu)
|
||||
ImageView menu;
|
||||
@InjectView(R.id.image)
|
||||
ImageView image;
|
||||
|
||||
public ViewHolder(@NonNull View itemView, final int songMenu) {
|
||||
public ViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
songTitle = (TextView) itemView.findViewById(R.id.song_title);
|
||||
songInfo = (TextView) itemView.findViewById(R.id.song_info);
|
||||
albumArt = (ImageView) itemView.findViewById(R.id.album_art);
|
||||
ButterKnife.inject(this, itemView);
|
||||
|
||||
itemView.setOnClickListener(this);
|
||||
itemView.setOnLongClickListener(this);
|
||||
overflowButton = (ImageView) itemView.findViewById(R.id.menu);
|
||||
overflowButton.setOnClickListener(new View.OnClickListener() {
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
image.setTransitionName(activity.getString(R.string.transition_album_art));
|
||||
}
|
||||
|
||||
menu.setOnClickListener(new SongMenuHelper.OnClickSongMenu(activity) {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
PopupMenu popupMenu = new PopupMenu(activity, v);
|
||||
popupMenu.inflate(songMenu);
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(@NonNull MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_delete_from_playlist:
|
||||
RemoveFromPlaylistDialog.create(dataSet.get(getAdapterPosition())).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST");
|
||||
return true;
|
||||
case R.id.action_go_to_album:
|
||||
Pair[] albumPairs = new Pair[]{
|
||||
Pair.create(albumArt, activity.getString(R.string.transition_album_cover))
|
||||
};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).albumId, albumPairs);
|
||||
return true;
|
||||
}
|
||||
return MenuItemClickHelper.handleSongMenuClick(activity, dataSet.get(getAdapterPosition()), item);
|
||||
}
|
||||
});
|
||||
popupMenu.show();
|
||||
public Song getSong() {
|
||||
return dataSet.get(getAdapterPosition());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMenuRes() {
|
||||
return R.menu.menu_item_playlist_song;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_remove_from_playlist:
|
||||
RemoveFromPlaylistDialog.create((PlaylistSong) getSong()).show(activity.getSupportFragmentManager(), "REMOVE_FROM_PLAYLIST");
|
||||
return true;
|
||||
case R.id.action_go_to_album:
|
||||
Pair[] albumPairs = new Pair[]{
|
||||
Pair.create(image, activity.getString(R.string.transition_album_art))
|
||||
};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, ((PlaylistSong) getSong()).albumId, albumPairs);
|
||||
return true;
|
||||
}
|
||||
return super.onMenuItemClick(item);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter;
|
||||
package com.kabouzeid.gramophone.adapter.song;
|
||||
|
||||
import android.graphics.Typeface;
|
||||
import android.os.Build;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
|
|
@ -10,7 +11,6 @@ import android.view.MenuItem;
|
|||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.afollestad.materialcab.MaterialCab;
|
||||
|
|
@ -20,8 +20,8 @@ import com.kabouzeid.gramophone.R;
|
|||
import com.kabouzeid.gramophone.adapter.AbsMultiSelectAdapter;
|
||||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.loader.SongLoader;
|
||||
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||
|
|
@ -35,6 +35,9 @@ import com.squareup.otto.Subscribe;
|
|||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.InjectView;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
|
|
@ -67,7 +70,7 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
|
|||
@NonNull
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list_song, parent, false);
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list, parent, false);
|
||||
return new ViewHolder(view);
|
||||
}
|
||||
|
||||
|
|
@ -81,28 +84,28 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
|
|||
if (getItemViewType(position) == SONG) {
|
||||
final Song song = dataSet.get(position - 1);
|
||||
|
||||
holder.songTitle.setText(song.title);
|
||||
holder.songInfo.setText(song.artistName);
|
||||
holder.title.setText(song.title);
|
||||
holder.text.setText(song.artistName);
|
||||
ImageLoader.getInstance().displayImage(
|
||||
MusicUtil.getSongImageLoaderString(song),
|
||||
holder.albumArt,
|
||||
holder.image,
|
||||
new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.showImageOnFail(R.drawable.default_album_art)
|
||||
.resetViewBeforeLoading(true)
|
||||
.build()
|
||||
);
|
||||
holder.view.setActivated(isChecked(song));
|
||||
holder.itemView.setActivated(isChecked(song));
|
||||
} else {
|
||||
holder.songTitle.setText(activity.getResources().getString(R.string.action_shuffle_all).toUpperCase());
|
||||
holder.songTitle.setTextColor(ThemeSingleton.get().positiveColor);
|
||||
holder.songTitle.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
|
||||
holder.songInfo.setVisibility(View.GONE);
|
||||
holder.overflowButton.setVisibility(View.GONE);
|
||||
holder.title.setText(activity.getResources().getString(R.string.action_shuffle_all).toUpperCase());
|
||||
holder.title.setTextColor(ThemeSingleton.get().positiveColor);
|
||||
holder.title.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
|
||||
holder.text.setVisibility(View.GONE);
|
||||
holder.menu.setVisibility(View.GONE);
|
||||
final int padding = activity.getResources().getDimensionPixelSize(R.dimen.default_item_margin) / 2;
|
||||
holder.albumArt.setPadding(padding, padding, padding, padding);
|
||||
holder.albumArt.setColorFilter(ThemeSingleton.get().positiveColor);
|
||||
holder.albumArt.setImageResource(R.drawable.ic_shuffle_white_48dp);
|
||||
holder.image.setPadding(padding, padding, padding, padding);
|
||||
holder.image.setColorFilter(ThemeSingleton.get().positiveColor);
|
||||
holder.image.setImageResource(R.drawable.ic_shuffle_white_48dp);
|
||||
holder.separator.setVisibility(View.VISIBLE);
|
||||
holder.short_separator.setVisibility(View.GONE);
|
||||
}
|
||||
|
|
@ -135,53 +138,49 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
||||
@NonNull
|
||||
final TextView songTitle;
|
||||
@NonNull
|
||||
final TextView songInfo;
|
||||
@NonNull
|
||||
final ImageView overflowButton;
|
||||
@NonNull
|
||||
final ImageView albumArt;
|
||||
final View separator;
|
||||
final View short_separator;
|
||||
@NonNull
|
||||
final View view;
|
||||
@InjectView(R.id.title)
|
||||
TextView title;
|
||||
@InjectView(R.id.text)
|
||||
TextView text;
|
||||
@InjectView(R.id.menu)
|
||||
ImageView menu;
|
||||
@InjectView(R.id.image)
|
||||
ImageView image;
|
||||
@InjectView(R.id.separator)
|
||||
View separator;
|
||||
@InjectView(R.id.short_separator)
|
||||
View short_separator;
|
||||
|
||||
public ViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
view = itemView;
|
||||
songTitle = (TextView) itemView.findViewById(R.id.song_title);
|
||||
songInfo = (TextView) itemView.findViewById(R.id.song_info);
|
||||
albumArt = (ImageView) itemView.findViewById(R.id.album_art);
|
||||
overflowButton = (ImageView) itemView.findViewById(R.id.menu);
|
||||
separator = itemView.findViewById(R.id.separator);
|
||||
short_separator = itemView.findViewById(R.id.short_separator);
|
||||
view.setOnClickListener(this);
|
||||
view.setOnLongClickListener(this);
|
||||
overflowButton.setOnClickListener(new View.OnClickListener() {
|
||||
ButterKnife.inject(this, itemView);
|
||||
|
||||
itemView.setOnClickListener(this);
|
||||
itemView.setOnLongClickListener(this);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
image.setTransitionName(activity.getString(R.string.transition_album_art));
|
||||
}
|
||||
|
||||
menu.setOnClickListener(new SongMenuHelper.OnClickSongMenu(activity) {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
PopupMenu popupMenu = new PopupMenu(activity, view);
|
||||
popupMenu.inflate(R.menu.menu_item_song);
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(@NonNull MenuItem item) {
|
||||
final int position = getAdapterPosition() - 1;
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_go_to_album:
|
||||
Pair[] albumPairs = new Pair[]{
|
||||
Pair.create(albumArt, activity.getResources().getString(R.string.transition_album_cover))
|
||||
};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, dataSet.get(position).albumId, albumPairs);
|
||||
return true;
|
||||
}
|
||||
return MenuItemClickHelper.handleSongMenuClick(activity, dataSet.get(position), item);
|
||||
}
|
||||
});
|
||||
popupMenu.show();
|
||||
public Song getSong() {
|
||||
return dataSet.get(getAdapterPosition() - 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_go_to_album:
|
||||
Pair[] albumPairs = new Pair[]{
|
||||
Pair.create(image, activity.getResources().getString(R.string.transition_album_art))
|
||||
};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, getSong().albumId, albumPairs);
|
||||
return true;
|
||||
}
|
||||
return super.onMenuItemClick(item);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter.smartplaylist;
|
||||
package com.kabouzeid.gramophone.adapter.song.smartplaylist;
|
||||
|
||||
import android.os.Build;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.Pair;
|
||||
|
|
@ -10,14 +11,13 @@ import android.view.MenuItem;
|
|||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.songadapter.AbsPlaylistSongAdapter;
|
||||
import com.kabouzeid.gramophone.adapter.song.AbsPlaylistSongAdapter;
|
||||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
|
||||
|
|
@ -30,6 +30,9 @@ import com.nostra13.universalimageloader.core.ImageLoader;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.InjectView;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
|
|
@ -67,8 +70,8 @@ public class SmartPlaylistSongAdapter extends AbsPlaylistSongAdapter<SmartPlayli
|
|||
@NonNull
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list_song, parent, false);
|
||||
return new ViewHolder(view, R.menu.menu_item_cannot_delete_single_songs_playlist_song);
|
||||
View view = LayoutInflater.from(activity).inflate(R.layout.item_list, parent, false);
|
||||
return new ViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -76,11 +79,11 @@ public class SmartPlaylistSongAdapter extends AbsPlaylistSongAdapter<SmartPlayli
|
|||
final Song song = dataSet.get(position);
|
||||
|
||||
holder.itemView.setActivated(isChecked(song));
|
||||
holder.songTitle.setText(song.title);
|
||||
holder.songInfo.setText(song.artistName);
|
||||
holder.title.setText(song.title);
|
||||
holder.text.setText(song.artistName);
|
||||
ImageLoader.getInstance().displayImage(
|
||||
MusicUtil.getSongImageLoaderString(song),
|
||||
holder.albumArt,
|
||||
holder.image,
|
||||
new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.showImageOnFail(R.drawable.default_album_art)
|
||||
|
|
@ -120,45 +123,49 @@ public class SmartPlaylistSongAdapter extends AbsPlaylistSongAdapter<SmartPlayli
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
||||
@NonNull
|
||||
final TextView songTitle;
|
||||
@NonNull
|
||||
final TextView songInfo;
|
||||
@NonNull
|
||||
final ImageView overflowButton;
|
||||
@NonNull
|
||||
final ImageView albumArt;
|
||||
@InjectView(R.id.title)
|
||||
TextView title;
|
||||
@InjectView(R.id.text)
|
||||
TextView text;
|
||||
@InjectView(R.id.menu)
|
||||
ImageView menu;
|
||||
@InjectView(R.id.image)
|
||||
ImageView image;
|
||||
|
||||
public ViewHolder(@NonNull View itemView, final int songMenu) {
|
||||
public ViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
songTitle = (TextView) itemView.findViewById(R.id.song_title);
|
||||
songInfo = (TextView) itemView.findViewById(R.id.song_info);
|
||||
albumArt = (ImageView) itemView.findViewById(R.id.album_art);
|
||||
ButterKnife.inject(this, itemView);
|
||||
|
||||
itemView.setOnClickListener(this);
|
||||
itemView.setOnLongClickListener(this);
|
||||
overflowButton = (ImageView) itemView.findViewById(R.id.menu);
|
||||
overflowButton.setOnClickListener(new View.OnClickListener() {
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
image.setTransitionName(activity.getString(R.string.transition_album_art));
|
||||
}
|
||||
|
||||
menu.setOnClickListener(new SongMenuHelper.OnClickSongMenu(activity) {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
PopupMenu popupMenu = new PopupMenu(activity, v);
|
||||
popupMenu.inflate(songMenu);
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(@NonNull MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_go_to_album:
|
||||
Pair[] albumPairs = new Pair[]{
|
||||
Pair.create(albumArt, activity.getString(R.string.transition_album_cover))
|
||||
};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).albumId, albumPairs);
|
||||
return true;
|
||||
}
|
||||
return MenuItemClickHelper.handleSongMenuClick(activity, dataSet.get(getAdapterPosition()), item);
|
||||
}
|
||||
});
|
||||
popupMenu.show();
|
||||
public Song getSong() {
|
||||
return dataSet.get(getAdapterPosition());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMenuRes() {
|
||||
return R.menu.menu_item_cannot_delete_single_songs_playlist_song;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
if (item.getItemId() == R.id.action_go_to_album) {
|
||||
Pair[] albumPairs = new Pair[]{
|
||||
Pair.create(image, activity.getString(R.string.transition_album_art))
|
||||
};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).albumId, albumPairs);
|
||||
return true;
|
||||
}
|
||||
return super.onMenuItemClick(item);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -43,7 +43,7 @@ public class WidgetMedium extends AppWidgetProvider {
|
|||
if (song.id == -1) return;
|
||||
widgetLayout = new RemoteViews(context.getPackageName(), R.layout.widget_medium);
|
||||
linkButtons(context, widgetLayout);
|
||||
widgetLayout.setTextViewText(R.id.song_title, song.title);
|
||||
widgetLayout.setTextViewText(R.id.title, song.title);
|
||||
widgetLayout.setTextViewText(R.id.song_secondary_information, song.artistName + " | " + song.albumName);
|
||||
updateWidgetsPlayState(context, isPlaying);
|
||||
loadAlbumArt(context, song);
|
||||
|
|
@ -107,15 +107,15 @@ public class WidgetMedium extends AppWidgetProvider {
|
|||
|
||||
private static void setAlbumArt(@NonNull final Context context, @Nullable final Bitmap albumArt) {
|
||||
if (albumArt != null) {
|
||||
widgetLayout.setImageViewBitmap(R.id.album_art, albumArt);
|
||||
widgetLayout.setImageViewBitmap(R.id.image, albumArt);
|
||||
} else {
|
||||
widgetLayout.setImageViewResource(R.id.album_art, R.drawable.default_album_art);
|
||||
widgetLayout.setImageViewResource(R.id.image, R.drawable.default_album_art);
|
||||
}
|
||||
updateWidgets(context);
|
||||
}
|
||||
|
||||
private static void linkButtons(@NonNull final Context context, @NonNull final RemoteViews views) {
|
||||
views.setOnClickPendingIntent(R.id.album_art, retrievePlaybackActions(context, 0));
|
||||
views.setOnClickPendingIntent(R.id.image, retrievePlaybackActions(context, 0));
|
||||
views.setOnClickPendingIntent(R.id.media_titles, retrievePlaybackActions(context, 0));
|
||||
views.setOnClickPendingIntent(R.id.button_toggle_play_pause, retrievePlaybackActions(context, 1));
|
||||
views.setOnClickPendingIntent(R.id.button_next, retrievePlaybackActions(context, 2));
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
package com.kabouzeid.gramophone.helper.menu;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.MenuItem;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class GenericMenuHelper {
|
||||
public static boolean handleMenuClick(@NonNull AppCompatActivity activity, @NonNull MenuItem item) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
package com.kabouzeid.gramophone.helper.menu;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.dialogs.DeletePlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.RenamePlaylistDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
||||
import com.kabouzeid.gramophone.model.Playlist;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class PlaylistMenuHelper {
|
||||
public static final int MENU_RES = R.menu.menu_item_playlist;
|
||||
|
||||
public static boolean handleMenuClick(@NonNull AppCompatActivity activity, @NonNull Playlist playlist, @NonNull MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_play:
|
||||
MusicPlayerRemote.openQueue(new ArrayList<>(getPlaylistSongs(activity, playlist)), 0, true);
|
||||
return true;
|
||||
case R.id.action_add_to_current_playing:
|
||||
MusicPlayerRemote.enqueue(new ArrayList<>(getPlaylistSongs(activity, playlist)));
|
||||
return true;
|
||||
case R.id.action_rename_playlist:
|
||||
RenamePlaylistDialog.create(playlist.id).show(activity.getSupportFragmentManager(), "RENAME_PLAYLIST");
|
||||
return true;
|
||||
case R.id.action_delete_playlist:
|
||||
DeletePlaylistDialog.create(playlist).show(activity.getSupportFragmentManager(), "DELETE_PLAYLIST");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static ArrayList<? extends Song> getPlaylistSongs(@NonNull Activity activity, Playlist playlist) {
|
||||
return playlist instanceof AbsSmartPlaylist ?
|
||||
((AbsSmartPlaylist) playlist).getSongs(activity) :
|
||||
PlaylistSongLoader.getPlaylistSongList(activity, playlist.id);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,23 +1,20 @@
|
|||
package com.kabouzeid.gramophone.helper;
|
||||
package com.kabouzeid.gramophone.helper.menu;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.PopupMenu;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.DeletePlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.RenamePlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.SongDetailDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.interfaces.PaletteColorHolder;
|
||||
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
||||
import com.kabouzeid.gramophone.model.Playlist;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity;
|
||||
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
|
||||
|
|
@ -25,14 +22,14 @@ import com.kabouzeid.gramophone.util.MusicUtil;
|
|||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class MenuItemClickHelper {
|
||||
public class SongMenuHelper {
|
||||
public static int MENU_RES = R.menu.menu_item_song;
|
||||
|
||||
public static boolean handleSongMenuClick(@NonNull AppCompatActivity activity, @NonNull Song song, @NonNull MenuItem item) {
|
||||
public static boolean handleMenuClick(@NonNull AppCompatActivity activity, @NonNull Song song, @NonNull MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_set_as_ringtone:
|
||||
MusicUtil.setRingtone(activity, song.id);
|
||||
|
|
@ -79,28 +76,30 @@ public class MenuItemClickHelper {
|
|||
return false;
|
||||
}
|
||||
|
||||
public static boolean handlePlaylistMenuClick(@NonNull AppCompatActivity activity, @NonNull Playlist playlist, @NonNull MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_play:
|
||||
MusicPlayerRemote.openQueue(new ArrayList<>(getPlaylistSongs(activity, playlist)), 0, true);
|
||||
return true;
|
||||
case R.id.action_add_to_current_playing:
|
||||
MusicPlayerRemote.enqueue(new ArrayList<>(getPlaylistSongs(activity, playlist)));
|
||||
return true;
|
||||
case R.id.action_rename_playlist:
|
||||
RenamePlaylistDialog.create(playlist.id).show(activity.getSupportFragmentManager(), "RENAME_PLAYLIST");
|
||||
return true;
|
||||
case R.id.action_delete_playlist:
|
||||
DeletePlaylistDialog.create(playlist).show(activity.getSupportFragmentManager(), "DELETE_PLAYLIST");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public static abstract class OnClickSongMenu implements View.OnClickListener, PopupMenu.OnMenuItemClickListener {
|
||||
private AppCompatActivity activity;
|
||||
|
||||
@NonNull
|
||||
private static ArrayList<? extends Song> getPlaylistSongs(@NonNull Activity activity, Playlist playlist) {
|
||||
return playlist instanceof AbsSmartPlaylist ?
|
||||
((AbsSmartPlaylist) playlist).getSongs(activity) :
|
||||
PlaylistSongLoader.getPlaylistSongList(activity, playlist.id);
|
||||
public OnClickSongMenu(@NonNull AppCompatActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
public int getMenuRes() {
|
||||
return MENU_RES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
PopupMenu popupMenu = new PopupMenu(activity, v);
|
||||
popupMenu.inflate(getMenuRes());
|
||||
popupMenu.setOnMenuItemClickListener(this);
|
||||
popupMenu.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
return handleMenuClick(activity, getSong(), item);
|
||||
}
|
||||
|
||||
public abstract Song getSong();
|
||||
}
|
||||
}
|
||||
|
|
@ -7,7 +7,7 @@ import android.support.annotation.Nullable;
|
|||
import android.support.v7.app.AppCompatActivity;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.songadapter.smartplaylist.SmartPlaylistSongAdapter;
|
||||
import com.kabouzeid.gramophone.adapter.song.smartplaylist.SmartPlaylistSongAdapter;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.model.Playlist;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
|
|
@ -24,7 +24,7 @@ public abstract class AbsSmartPlaylist extends Playlist {
|
|||
public final int iconRes;
|
||||
|
||||
public AbsSmartPlaylist(final String name, final int iconRes) {
|
||||
super(-1, name);
|
||||
super(-Math.abs(31 * name.hashCode() + (iconRes * name.hashCode() * 31 * 31)), name);
|
||||
this.iconRes = iconRes;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ import com.afollestad.materialdialogs.util.DialogUtils;
|
|||
import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView;
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.songadapter.AlbumSongAdapter;
|
||||
import com.kabouzeid.gramophone.adapter.song.AlbumSongAdapter;
|
||||
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.imageloader.BlurProcessor;
|
||||
|
|
@ -77,13 +77,13 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH
|
|||
|
||||
@InjectView(R.id.list)
|
||||
ObservableRecyclerView recyclerView;
|
||||
@InjectView(R.id.album_art)
|
||||
@InjectView(R.id.image)
|
||||
ImageView albumArtImageView;
|
||||
@InjectView(R.id.album_art_background)
|
||||
ImageView albumArtBackground;
|
||||
@InjectView(R.id.toolbar)
|
||||
Toolbar toolbar;
|
||||
@InjectView(R.id.album_title)
|
||||
@InjectView(R.id.title)
|
||||
TextView albumTitleView;
|
||||
@InjectView(R.id.list_background)
|
||||
View songsBackgroundView;
|
||||
|
|
@ -156,6 +156,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH
|
|||
|
||||
// Translate album cover
|
||||
albumArtImageView.setTranslationY(Math.max(-albumArtViewHeight, -scrollY / 2));
|
||||
albumArtBackground.setTranslationY(Math.max(-albumArtViewHeight, -scrollY / 2));
|
||||
|
||||
// Translate list background
|
||||
songsBackgroundView.setTranslationY(Math.max(0, -scrollY + albumArtViewHeight));
|
||||
|
|
@ -254,43 +255,31 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH
|
|||
}
|
||||
|
||||
private void applyPalette(@Nullable Bitmap bitmap) {
|
||||
final int defaultBarColor = ColorUtil.resolveColor(this, R.attr.default_bar_color);
|
||||
if (bitmap != null) {
|
||||
Palette.from(bitmap)
|
||||
.resizeBitmapSize(100)
|
||||
.generate(new Palette.PaletteAsyncListener() {
|
||||
@Override
|
||||
public void onGenerated(@NonNull Palette palette) {
|
||||
final Palette.Swatch vibrantSwatch = palette.getVibrantSwatch();
|
||||
if (vibrantSwatch != null) {
|
||||
toolbarColor = vibrantSwatch.getRgb();
|
||||
albumTitleView.setBackgroundColor(toolbarColor);
|
||||
albumTitleView.setTextColor(ColorUtil.getOpaqueColor(vibrantSwatch.getTitleTextColor()));
|
||||
if (PreferenceUtil.getInstance(AlbumDetailActivity.this).coloredNavigationBarAlbum())
|
||||
setNavigationBarColor(toolbarColor);
|
||||
notifyTaskColorChange(toolbarColor);
|
||||
} else {
|
||||
resetColors();
|
||||
}
|
||||
setColors(palette.getVibrantColor(defaultBarColor));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
resetColors();
|
||||
setColors(defaultBarColor);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void resetColors() {
|
||||
int titleTextColor = DialogUtils.resolveColor(this, R.attr.title_text_color);
|
||||
int defaultBarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
|
||||
|
||||
toolbarColor = defaultBarColor;
|
||||
albumTitleView.setBackgroundColor(defaultBarColor);
|
||||
albumTitleView.setTextColor(titleTextColor);
|
||||
private void setColors(int vibrantColor) {
|
||||
toolbarColor = vibrantColor;
|
||||
albumTitleView.setBackgroundColor(vibrantColor);
|
||||
albumTitleView.setTextColor(ColorUtil.getTextColorForBackground(vibrantColor));
|
||||
|
||||
if (PreferenceUtil.getInstance(this).coloredNavigationBarArtist())
|
||||
setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
|
||||
setNavigationBarColor(vibrantColor);
|
||||
|
||||
notifyTaskColorChange(toolbarColor);
|
||||
notifyTaskColorChange(vibrantColor);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ import com.github.ksoichiro.android.observablescrollview.ObservableListView;
|
|||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.ArtistAlbumAdapter;
|
||||
import com.kabouzeid.gramophone.adapter.songadapter.ArtistSongAdapter;
|
||||
import com.kabouzeid.gramophone.adapter.song.ArtistSongAdapter;
|
||||
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.bitmapblur.StackBlurManager;
|
||||
|
|
@ -91,13 +91,13 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
|
|||
|
||||
@InjectView(R.id.artist_image_background)
|
||||
ImageView artistImageBackground;
|
||||
@InjectView(R.id.artist_image)
|
||||
@InjectView(R.id.image)
|
||||
SquareIfPlaceImageView artistImage;
|
||||
@InjectView(R.id.list_background)
|
||||
View songListBackground;
|
||||
@InjectView(R.id.list)
|
||||
ObservableListView songListView;
|
||||
@InjectView(R.id.artist_name)
|
||||
@InjectView(R.id.title)
|
||||
TextView artistName;
|
||||
@InjectView(R.id.toolbar)
|
||||
Toolbar toolbar;
|
||||
|
|
@ -191,6 +191,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
|
|||
|
||||
// Translate album cover
|
||||
artistImage.setTranslationY(Math.max(-artistImageViewHeight, -scrollY / 2));
|
||||
artistImageBackground.setTranslationY(Math.max(-artistImageViewHeight, -scrollY / 2));
|
||||
|
||||
// Translate list background
|
||||
songListBackground.setTranslationY(Math.max(0, -scrollY + artistImageViewHeight));
|
||||
|
|
@ -305,7 +306,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
|
|||
private MaterialDialog getBiographyDialog() {
|
||||
return new MaterialDialog.Builder(ArtistDetailActivity.this)
|
||||
.title(artist.name)
|
||||
.content(biography)
|
||||
.content(biography != null ? biography : "")
|
||||
.positiveText(android.R.string.ok)
|
||||
.build();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -281,18 +281,18 @@ public class MainActivity extends AbsFabActivity
|
|||
public void onClick(View v) {
|
||||
//noinspection ConstantConditions
|
||||
NavigationUtil.openCurrentPlayingIfPossible(MainActivity.this, getSharedViewsWithFab(new Pair[]{
|
||||
Pair.create(navigationDrawerHeader.findViewById(R.id.album_art),
|
||||
getResources().getString(R.string.transition_album_cover)
|
||||
Pair.create(navigationDrawerHeader.findViewById(R.id.image),
|
||||
getResources().getString(R.string.transition_album_art)
|
||||
)
|
||||
}));
|
||||
}
|
||||
});
|
||||
}
|
||||
((TextView) navigationDrawerHeader.findViewById(R.id.song_title)).setText(song.title);
|
||||
((TextView) navigationDrawerHeader.findViewById(R.id.song_artist)).setText(song.artistName);
|
||||
((TextView) navigationDrawerHeader.findViewById(R.id.title)).setText(song.title);
|
||||
((TextView) navigationDrawerHeader.findViewById(R.id.text)).setText(song.artistName);
|
||||
ImageLoader.getInstance().displayImage(
|
||||
MusicUtil.getSongImageLoaderString(song),
|
||||
((ImageView) navigationDrawerHeader.findViewById(R.id.album_art)),
|
||||
((ImageView) navigationDrawerHeader.findViewById(R.id.image)),
|
||||
new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.showImageOnFail(R.drawable.default_album_art)
|
||||
|
|
|
|||
|
|
@ -42,7 +42,6 @@ import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
|
|||
import com.kabouzeid.gramophone.dialogs.SongDetailDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.SongShareDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.bitmapblur.StackBlurManager;
|
||||
import com.kabouzeid.gramophone.imageloader.BlurProcessor;
|
||||
import com.kabouzeid.gramophone.misc.SmallTransitionListener;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
|
|
@ -77,9 +76,9 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
|
||||
private static final int CMD_UPDATE_PROGRESS_VIEWS = 1;
|
||||
|
||||
@InjectView(R.id.song_title)
|
||||
@InjectView(R.id.title)
|
||||
TextView songTitle;
|
||||
@InjectView(R.id.song_artist)
|
||||
@InjectView(R.id.text)
|
||||
TextView songArtist;
|
||||
@InjectView(R.id.footer)
|
||||
LinearLayout footer;
|
||||
|
|
@ -97,7 +96,7 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
RelativeLayout mediaControllerContainer;
|
||||
@InjectView(R.id.album_art_background)
|
||||
ImageView albumArtBackground;
|
||||
@InjectView(R.id.album_art)
|
||||
@InjectView(R.id.image)
|
||||
SquareIfPlaceImageView albumArt;
|
||||
@InjectView(R.id.toolbar)
|
||||
Toolbar toolbar;
|
||||
|
|
@ -121,8 +120,6 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
private boolean alternativeProgressSlider;
|
||||
private boolean showPlaybackControllerCard;
|
||||
|
||||
private StackBlurManager defaultAlbumArtStackBlurManager;
|
||||
|
||||
private Song song;
|
||||
|
||||
@Override
|
||||
|
|
@ -439,6 +436,7 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
@Override
|
||||
public void onLoadingFailed(String imageUri, View view, @Nullable FailReason failReason) {
|
||||
applyPalette(null);
|
||||
|
||||
ImageLoader.getInstance().displayImage(
|
||||
"drawable://" + R.drawable.default_album_art,
|
||||
albumArtBackground,
|
||||
|
|
@ -453,7 +451,9 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
onLoadingFailed(imageUri, view, null);
|
||||
return;
|
||||
}
|
||||
|
||||
applyPalette(loadedImage);
|
||||
|
||||
ImageLoader.getInstance().displayImage(
|
||||
imageUri,
|
||||
albumArtBackground,
|
||||
|
|
@ -465,36 +465,25 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
}
|
||||
|
||||
private void applyPalette(@Nullable Bitmap bitmap) {
|
||||
final int defaultBarColor = ColorUtil.resolveColor(this, R.attr.default_bar_color);
|
||||
if (bitmap != null) {
|
||||
Palette.from(bitmap)
|
||||
.resizeBitmapSize(100)
|
||||
.generate(new Palette.PaletteAsyncListener() {
|
||||
@Override
|
||||
public void onGenerated(@NonNull Palette palette) {
|
||||
final Palette.Swatch vibrantSwatch = palette.getVibrantSwatch();
|
||||
if (vibrantSwatch != null) {
|
||||
final int swatchRgb = vibrantSwatch.getRgb();
|
||||
animateColorChange(swatchRgb);
|
||||
animateTextColorChange(ColorUtil.getOpaqueColor(vibrantSwatch.getTitleTextColor()));
|
||||
notifyTaskColorChange(swatchRgb);
|
||||
} else {
|
||||
resetColors();
|
||||
}
|
||||
setColors(palette.getVibrantColor(defaultBarColor));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
resetColors();
|
||||
setColors(defaultBarColor);
|
||||
}
|
||||
}
|
||||
|
||||
private void resetColors() {
|
||||
final int textColor = ColorUtil.getOpaqueColor(DialogUtils.resolveColor(this, R.attr.title_text_color));
|
||||
final int defaultBarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
|
||||
|
||||
animateColorChange(defaultBarColor);
|
||||
animateTextColorChange(textColor);
|
||||
|
||||
notifyTaskColorChange(defaultBarColor);
|
||||
private void setColors(int vibrantColor) {
|
||||
animateColorChange(vibrantColor);
|
||||
animateTextColorChange(ColorUtil.getTextColorForBackground(vibrantColor));
|
||||
notifyTaskColorChange(vibrantColor);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@ import android.widget.TextView;
|
|||
import com.afollestad.materialcab.MaterialCab;
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.songadapter.AbsPlaylistSongAdapter;
|
||||
import com.kabouzeid.gramophone.adapter.songadapter.PlaylistSongAdapter;
|
||||
import com.kabouzeid.gramophone.adapter.song.AbsPlaylistSongAdapter;
|
||||
import com.kabouzeid.gramophone.adapter.song.PlaylistSongAdapter;
|
||||
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
|
|
@ -77,7 +77,7 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder
|
|||
adapter = new PlaylistSongAdapter(this, playlist, this);
|
||||
|
||||
DragSortRecycler dragSortRecycler = new DragSortRecycler();
|
||||
dragSortRecycler.setViewHandleId(R.id.album_art);
|
||||
dragSortRecycler.setViewHandleId(R.id.image);
|
||||
dragSortRecycler.setOnItemMovedListener(new DragSortRecycler.OnItemMovedListener() {
|
||||
@Override
|
||||
public void onItemMoved(int from, int to) {
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ public abstract class AbsFabActivity extends AbsPlaybackControlActivity {
|
|||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@NonNull
|
||||
protected FloatingActionButton getFab() {
|
||||
if (fab == null) {
|
||||
fab = (FloatingActionButton) findViewById(R.id.fab);
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
|
|||
|
||||
public static final String TAG = AlbumTagEditorActivity.class.getSimpleName();
|
||||
|
||||
@InjectView(R.id.album_title)
|
||||
@InjectView(R.id.title)
|
||||
EditText albumTitle;
|
||||
@InjectView(R.id.album_artist)
|
||||
EditText albumArtist;
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW
|
|||
EditText genre;
|
||||
@InjectView(R.id.year)
|
||||
EditText year;
|
||||
@InjectView(R.id.track_number)
|
||||
@InjectView(R.id.image_text)
|
||||
EditText trackNumber;
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import android.support.v7.widget.GridLayoutManager;
|
|||
import android.support.v7.widget.RecyclerView;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.ArtistAdapter;
|
||||
import com.kabouzeid.gramophone.adapter.artist.ArtistListAdapter;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
|
|
@ -23,7 +23,7 @@ public class ArtistViewFragment extends AbsMainActivityRecyclerViewFragment {
|
|||
@NonNull
|
||||
@Override
|
||||
protected RecyclerView.Adapter createAdapter() {
|
||||
return new ArtistAdapter(getMainActivity(), getMainActivity());
|
||||
return new ArtistListAdapter(getMainActivity(), getMainActivity());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import android.support.v7.widget.GridLayoutManager;
|
|||
import android.support.v7.widget.RecyclerView;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.songadapter.SongAdapter;
|
||||
import com.kabouzeid.gramophone.adapter.song.SongAdapter;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
|
|
|
|||
|
|
@ -52,4 +52,8 @@ public class ColorUtil {
|
|||
public static boolean useDarkTextColorOnBackground(int backgroundColor) {
|
||||
return (Color.red(backgroundColor) * 0.299 + Color.green(backgroundColor) * 0.587 + Color.blue(backgroundColor) * 0.114) > 186;
|
||||
}
|
||||
|
||||
public static int getTextColorForBackground(int backgroundColor) {
|
||||
return (Color.red(backgroundColor) * 0.299 + Color.green(backgroundColor) * 0.587 + Color.blue(backgroundColor) * 0.114) > 186 ? Color.BLACK : Color.WHITE;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,13 +15,13 @@
|
|||
android:scaleType="centerCrop" />
|
||||
|
||||
<com.kabouzeid.gramophone.views.SquareIfPlaceImageView
|
||||
android:id="@+id/album_art"
|
||||
android:id="@+id/image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:scaleType="centerCrop"
|
||||
android:src="@drawable/default_album_art"
|
||||
android:transitionName="@string/transition_album_cover"
|
||||
android:transitionName="@string/transition_album_art"
|
||||
tools:ignore="ContentDescription,UnusedAttribute" />
|
||||
</FrameLayout>
|
||||
|
||||
|
|
@ -46,7 +46,7 @@
|
|||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/album_title"
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/title_view_height"
|
||||
android:height="@dimen/title_view_height"
|
||||
|
|
|
|||
|
|
@ -16,11 +16,13 @@
|
|||
android:layout_height="match_parent">
|
||||
|
||||
<com.kabouzeid.gramophone.views.WidthFitSquareImageView
|
||||
android:transitionName="@string/transition_album_art"
|
||||
android:id="@+id/image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="centerCrop"
|
||||
android:src="@drawable/default_album_art" />
|
||||
android:src="@drawable/default_album_art"
|
||||
tools:ignore="UnusedAttribute" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/header"
|
||||
|
|
@ -41,7 +43,7 @@
|
|||
android:layout_height="wrap_content">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/album_title"
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
android:scaleType="centerCrop" />
|
||||
|
||||
<com.kabouzeid.gramophone.views.SquareIfPlaceImageView
|
||||
android:id="@+id/artist_image"
|
||||
android:id="@+id/image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/header_image_height"
|
||||
android:layout_gravity="center"
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/artist_name"
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/title_view_height"
|
||||
android:height="@dimen/title_view_height"
|
||||
|
|
@ -100,7 +100,7 @@
|
|||
<android.support.design.widget.FloatingActionButton
|
||||
android:id="@+id/fab"
|
||||
style="@style/PlayPauseFab"
|
||||
android:layout_gravity="end|right|bottom"
|
||||
android:layout_gravity="end|bottom"
|
||||
android:layout_margin="@dimen/fab_margin" />
|
||||
|
||||
</FrameLayout>
|
||||
|
|
@ -1,8 +1,7 @@
|
|||
<android.support.v4.widget.DrawerLayout
|
||||
android:id="@+id/drawer_layout"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<android.support.v4.widget.DrawerLayout 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"
|
||||
android:id="@+id/drawer_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="true"
|
||||
|
|
|
|||
|
|
@ -74,11 +74,11 @@
|
|||
android:paddingLeft="72dp"
|
||||
android:paddingRight="72dp"
|
||||
android:paddingTop="@dimen/title_box_padding_large"
|
||||
android:transitionName="@string/transition_album_text"
|
||||
android:transitionName="@string/transition_album_art"
|
||||
tools:ignore="UnusedAttribute">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/song_title"
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
|
|
@ -87,7 +87,7 @@
|
|||
android:textColor="?attr/title_text_color" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/song_artist"
|
||||
android:id="@+id/text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
|
|
@ -199,22 +199,23 @@
|
|||
tools:ignore="ContentDescription" />
|
||||
|
||||
<com.kabouzeid.gramophone.views.SquareIfPlaceImageView
|
||||
android:id="@+id/album_art"
|
||||
android:id="@+id/image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:scaleType="centerCrop"
|
||||
android:src="@drawable/default_album_art"
|
||||
android:transitionName="@string/transition_album_cover"
|
||||
android:transitionName="@string/transition_album_art"
|
||||
tools:ignore="ContentDescription,UnusedAttribute" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/favorite_icon"
|
||||
android:visibility="invisible"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:src="@drawable/ic_favorite_red_a400_96dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
android:visibility="invisible"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/default_progress_container"
|
||||
|
|
@ -249,7 +250,7 @@
|
|||
android:textAppearance="@style/TextAppearance.AppCompat.Title"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="16sp"
|
||||
tools:ignore="RtlHardcoded,RtlSymmetry,SmallSp" />
|
||||
tools:ignore="RelativeOverlap,RtlHardcoded,RtlSymmetry,SmallSp" />
|
||||
|
||||
</RelativeLayout>
|
||||
</FrameLayout>
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@
|
|||
android:layout_height="wrap_content">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/track_number"
|
||||
android:id="@+id/image_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="2dp">
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="2dp">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/content"
|
||||
android:id="@+id/container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:foreground="?rect_selector">
|
||||
|
|
@ -19,12 +19,10 @@
|
|||
tools:ignore="UnusedAttribute,UselessParent">
|
||||
|
||||
<com.kabouzeid.gramophone.views.WidthFitSquareImageView
|
||||
android:id="@+id/album_art"
|
||||
android:id="@+id/image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="centerCrop"
|
||||
android:src="@drawable/default_album_art"
|
||||
android:transitionName="@string/transition_album_cover" />
|
||||
android:scaleType="centerCrop" />
|
||||
|
||||
|
||||
<LinearLayout
|
||||
|
|
@ -35,11 +33,10 @@
|
|||
android:gravity="center_vertical"
|
||||
android:orientation="vertical"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:transitionName="@string/transition_album_text">
|
||||
android:paddingRight="16dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/album_title"
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
|
|
@ -48,7 +45,7 @@
|
|||
android:textColor="?title_text_color" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/album_interpret"
|
||||
android:id="@+id/text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
|
|
@ -63,13 +60,13 @@
|
|||
</FrameLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/check_mark"
|
||||
android:id="@+id/selected_indicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:paddingBottom="68dp"
|
||||
android:src="@drawable/ic_check_white_96dp"
|
||||
android:tint="?check_mark_color"
|
||||
android:visibility="invisible" />
|
||||
android:visibility="gone" />
|
||||
|
||||
</FrameLayout>
|
||||
|
|
@ -15,11 +15,10 @@
|
|||
android:orientation="vertical">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/album_art"
|
||||
android:id="@+id/image"
|
||||
android:layout_width="104dp"
|
||||
android:layout_height="104dp"
|
||||
android:scaleType="centerCrop"
|
||||
android:transitionName="@string/transition_album_cover"
|
||||
tools:ignore="ContentDescription,UnusedAttribute" />
|
||||
|
||||
<LinearLayout
|
||||
|
|
@ -34,11 +33,10 @@
|
|||
android:orientation="vertical"
|
||||
android:paddingLeft="8dp"
|
||||
android:paddingRight="8dp"
|
||||
android:transitionName="@string/transition_album_text"
|
||||
tools:ignore="UnusedAttribute">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/album_title"
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true"
|
||||
|
|
@ -47,7 +45,7 @@
|
|||
android:textSize="14sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/album_year"
|
||||
android:id="@+id/text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true"
|
||||
|
|
@ -16,25 +16,44 @@
|
|||
android:paddingRight="0dp"
|
||||
android:paddingStart="16dp">
|
||||
|
||||
<com.kabouzeid.gramophone.views.WidthFitSquareImageView
|
||||
android:id="@+id/album_art"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:scaleType="centerCrop" />
|
||||
<FrameLayout
|
||||
android:id="@+id/image_container"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/image"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:scaleType="centerCrop"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/image_text"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="match_parent"
|
||||
android:fontFamily="sans-serif"
|
||||
android:gravity="center"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
|
||||
android:textColor="?title_text_color"
|
||||
android:visibility="gone" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/text_container"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/song_title"
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
|
|
@ -43,7 +62,7 @@
|
|||
android:textColor="?title_text_color" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/song_info"
|
||||
android:id="@+id/text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
|
|
@ -56,8 +75,8 @@
|
|||
android:id="@+id/menu"
|
||||
style="@style/OverFlowButton"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="2dp"
|
||||
android:layout_marginRight="2dp"
|
||||
android:layout_marginEnd="2dp"
|
||||
android:layout_marginStart="2dp"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -1,63 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="72dp"
|
||||
android:foreground="?rect_selector"
|
||||
tools:ignore="UnusedAttribute">
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp">
|
||||
|
||||
<de.hdodenhof.circleimageview.CircleImageView
|
||||
android:id="@+id/artist_image"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:scaleType="centerCrop" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/artist_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
|
||||
android:textColor="?title_text_color" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/artist_info"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||
android:textColor="?caption_text_color" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/short_separator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:layout_marginLeft="72dp"
|
||||
android:layout_marginStart="72dp"
|
||||
android:background="?separator_color" />
|
||||
|
||||
</FrameLayout>
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="72dp"
|
||||
android:foreground="?rect_selector"
|
||||
tools:ignore="UnusedAttribute">
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:descendantFocusability="blocksDescendants"
|
||||
android:orientation="horizontal"
|
||||
android:paddingEnd="0dp"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="0dp"
|
||||
android:paddingStart="16dp">
|
||||
|
||||
<com.kabouzeid.gramophone.views.WidthFitSquareImageView
|
||||
android:id="@+id/album_art"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:scaleType="centerCrop" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/song_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
|
||||
android:textColor="?title_text_color" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/song_info"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||
android:textColor="?caption_text_color" />
|
||||
</LinearLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/menu"
|
||||
style="@style/OverFlowButton"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="2dp"
|
||||
android:layout_marginRight="2dp"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/short_separator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:layout_marginLeft="72dp"
|
||||
android:layout_marginStart="72dp"
|
||||
android:background="?separator_color" />
|
||||
</FrameLayout>
|
||||
|
|
@ -1,61 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="64dp"
|
||||
android:foreground="?rect_selector"
|
||||
tools:ignore="UnusedAttribute">
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:paddingEnd="0dp"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="0dp"
|
||||
android:paddingStart="16dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/playlist_icon"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:padding="8dp"
|
||||
android:src="@drawable/ic_queue_music_white_24dp"
|
||||
android:tint="?themed_drawable_color"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/playlist_name"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_weight="1"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
|
||||
android:textColor="?title_text_color" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/menu"
|
||||
style="@style/OverFlowButton"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="2dp"
|
||||
android:layout_marginRight="2dp"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/short_separator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:layout_marginLeft="72dp"
|
||||
android:layout_marginStart="72dp"
|
||||
android:background="?separator_color" />
|
||||
|
||||
</FrameLayout>
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="64dp"
|
||||
android:descendantFocusability="blocksDescendants"
|
||||
android:orientation="horizontal"
|
||||
tools:ignore="UnusedAttribute">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/song_title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_weight="1"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Body2" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/playing_indicator"
|
||||
style="@style/PlayingIndicator"
|
||||
android:layout_marginEnd="-8dp"
|
||||
android:layout_marginRight="-8dp"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/menu"
|
||||
style="@style/OverFlowButton"
|
||||
android:layout_gravity="center_vertical"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -2,11 +2,11 @@
|
|||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="72dp"
|
||||
android:layout_height="64dp"
|
||||
android:foreground="?rect_selector"
|
||||
tools:ignore="UnusedAttribute">
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:descendantFocusability="blocksDescendants"
|
||||
|
|
@ -16,54 +16,63 @@
|
|||
android:paddingRight="0dp"
|
||||
android:paddingStart="16dp">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/image_container"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/image"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:scaleType="centerCrop"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/image_text"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="match_parent"
|
||||
android:fontFamily="sans-serif"
|
||||
android:gravity="center"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
|
||||
android:textColor="?title_text_color"
|
||||
android:visibility="gone" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/track_number"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:id="@+id/title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_weight="1"
|
||||
android:fontFamily="sans-serif"
|
||||
android:gravity="center"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
|
||||
android:textColor="?title_text_color" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/song_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
|
||||
android:textColor="?title_text_color" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/song_info"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||
android:textColor="?caption_text_color" />
|
||||
</LinearLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/menu"
|
||||
style="@style/OverFlowButton"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="2dp"
|
||||
android:layout_marginRight="2dp"
|
||||
android:layout_marginEnd="2dp"
|
||||
android:layout_marginStart="2dp"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/separator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="?separator_color"
|
||||
android:visibility="gone" />
|
||||
|
||||
<View
|
||||
android:id="@+id/short_separator"
|
||||
android:layout_width="match_parent"
|
||||
|
|
@ -72,4 +81,5 @@
|
|||
android:layout_marginLeft="72dp"
|
||||
android:layout_marginStart="72dp"
|
||||
android:background="?separator_color" />
|
||||
|
||||
</FrameLayout>
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="64dp"
|
||||
android:background="?card_color"
|
||||
android:elevation="2dp"
|
||||
android:foreground="?rect_selector"
|
||||
tools:ignore="UnusedAttribute">
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:paddingEnd="0dp"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="0dp"
|
||||
android:paddingStart="16dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/playlist_icon"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:padding="8dp"
|
||||
android:src="@drawable/ic_queue_music_white_24dp"
|
||||
android:tint="?themed_drawable_color"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/playlist_name"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_weight="1"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
|
||||
android:textColor="?title_text_color" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/menu"
|
||||
style="@style/OverFlowButton"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="2dp"
|
||||
android:layout_marginRight="2dp"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</FrameLayout>
|
||||
|
|
@ -1,66 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="72dp"
|
||||
android:background="?card_color"
|
||||
android:elevation="2dp"
|
||||
android:foreground="?rect_selector"
|
||||
tools:ignore="UnusedAttribute">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:descendantFocusability="blocksDescendants"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp">
|
||||
|
||||
<com.kabouzeid.gramophone.views.WidthFitSquareImageView
|
||||
android:id="@+id/album_art"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:scaleType="centerCrop" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/album_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
|
||||
android:textColor="?title_text_color" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/album_artist"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||
android:textColor="?caption_text_color" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/short_separator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:layout_marginLeft="72dp"
|
||||
android:layout_marginStart="72dp"
|
||||
android:background="?separator_color" />
|
||||
|
||||
</FrameLayout>
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="72dp"
|
||||
android:background="?card_color"
|
||||
android:elevation="2dp"
|
||||
android:foreground="?rect_selector"
|
||||
tools:ignore="UnusedAttribute">
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp">
|
||||
|
||||
<de.hdodenhof.circleimageview.CircleImageView
|
||||
android:id="@+id/artist_image"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:scaleType="centerCrop" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/artist_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
|
||||
android:textColor="?title_text_color" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/artist_info"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||
android:textColor="?caption_text_color" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/short_separator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:layout_marginLeft="72dp"
|
||||
android:layout_marginStart="72dp"
|
||||
android:background="?separator_color" />
|
||||
|
||||
</FrameLayout>
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="72dp"
|
||||
android:background="?card_color"
|
||||
android:elevation="2dp"
|
||||
android:foreground="?rect_selector"
|
||||
tools:ignore="UnusedAttribute">
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:descendantFocusability="blocksDescendants"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingStart="16dp"
|
||||
tools:ignore="RtlSymmetry">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/song_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
|
||||
android:textColor="?title_text_color" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/song_info"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||
android:textColor="?caption_text_color" />
|
||||
</LinearLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/menu"
|
||||
style="@style/OverFlowButton"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="2dp"
|
||||
android:layout_marginRight="2dp" />
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/separator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="?separator_color" />
|
||||
</FrameLayout>
|
||||
|
|
@ -1,19 +1,18 @@
|
|||
<FrameLayout
|
||||
android:id="@+id/header"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/header"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/navigation_drawer_header_height"
|
||||
android:clickable="true"
|
||||
android:foreground="?rect_selector">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/album_art"
|
||||
android:id="@+id/image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="centerCrop"
|
||||
android:src="@drawable/default_album_art"
|
||||
android:transitionName="@string/transition_album_cover"
|
||||
android:transitionName="@string/transition_album_art"
|
||||
tools:ignore="UnusedAttribute" />
|
||||
|
||||
<View
|
||||
|
|
@ -31,7 +30,7 @@
|
|||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/song_title"
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="16dp"
|
||||
|
|
@ -39,11 +38,11 @@
|
|||
android:fontFamily="sans-serif-medium"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
|
||||
android:textColor="@color/white"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="14sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/song_artist"
|
||||
android:id="@+id/text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="16dp"
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
tools:ignore="ContentDescription">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/album_art"
|
||||
android:id="@+id/image"
|
||||
android:layout_width="@dimen/widget_medium_image_size"
|
||||
android:layout_height="@dimen/widget_medium_image_size"
|
||||
android:scaleType="centerCrop"
|
||||
|
|
@ -60,7 +60,7 @@
|
|||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/song_title"
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/action_delete_from_playlist"
|
||||
android:id="@+id/action_remove_from_playlist"
|
||||
android:title="@string/action_remove_from_playlist"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_delete_from_playlist"
|
||||
android:id="@+id/action_remove_from_playlist"
|
||||
android:icon="@drawable/ic_delete_white_24dp"
|
||||
android:title="@string/action_remove_from_playlist"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
|
|
|||
|
|
@ -9,7 +9,8 @@
|
|||
<dimen name="nav_drawer_margin">56dp</dimen>
|
||||
|
||||
<dimen name="title_view_height">72dp</dimen>
|
||||
<dimen name="toolbar_elevation">2dp</dimen>
|
||||
<dimen name="toolbar_elevation">4dp</dimen>
|
||||
<dimen name="card_elevation">2dp</dimen>
|
||||
|
||||
<dimen name="header_image_height">360dp</dimen>
|
||||
<dimen name="progress_container_height">20dp</dimen>
|
||||
|
|
@ -63,4 +64,7 @@ http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout
|
|||
<dimen name="title_box_text_spacing_small">0dp</dimen>
|
||||
<dimen name="title_box_text_spacing_large">2dp</dimen>
|
||||
|
||||
<!-- For use with 24dp drawables in the item_list layouts-->
|
||||
<dimen name="list_item_image_icon_padding">8dp</dimen>
|
||||
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="transition_album_cover">album_cover_transition</string>
|
||||
<string name="transition_fab">fab_transition</string>
|
||||
<string name="transition_album_text">album_text_transition</string>
|
||||
<string name="transition_album_art">album_art_transition</string>
|
||||
<string name="transition_artist_image">artist_image_transition</string>
|
||||
<string name="transition_fab">fab_transition</string>
|
||||
</resources>
|
||||
Loading…
Add table
Add a link
Reference in a new issue