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