From 98dcdf2d4714d9069ae44d36b6e4005e810bd65a Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Sun, 12 Jul 2015 03:22:24 +0200 Subject: [PATCH] Adapter clean ups --- .../gramophone/adapter/AlbumAdapter.java | 115 +++++++-------- .../adapter/ArtistAlbumAdapter.java | 44 +++--- .../adapter/PlayingQueueAdapter.java | 45 +++--- .../gramophone/adapter/PlaylistAdapter.java | 55 +++++--- .../gramophone/adapter/SearchAdapter.java | 100 ++++++------- .../AbsArtistAdapter.java} | 132 +++++++++--------- .../adapter/artist/ArtistGridAdapter.java | 34 +++++ .../adapter/artist/ArtistListAdapter.java | 26 ++++ .../AbsPlaylistSongAdapter.java | 2 +- .../AlbumSongAdapter.java | 69 +++++---- .../ArtistSongAdapter.java | 58 ++++---- .../PlaylistSongAdapter.java | 100 +++++++------ .../{songadapter => song}/SongAdapter.java | 117 ++++++++-------- .../SmartPlaylistSongAdapter.java | 93 ++++++------ .../gramophone/appwidget/WidgetMedium.java | 8 +- .../helper/menu/GenericMenuHelper.java | 14 ++ .../helper/menu/PlaylistMenuHelper.java | 49 +++++++ .../SongMenuHelper.java} | 65 +++++---- .../model/smartplaylist/AbsSmartPlaylist.java | 4 +- .../ui/activities/AlbumDetailActivity.java | 37 ++--- .../ui/activities/ArtistDetailActivity.java | 9 +- .../ui/activities/MainActivity.java | 10 +- .../activities/MusicControllerActivity.java | 37 ++--- .../ui/activities/PlaylistDetailActivity.java | 6 +- .../ui/activities/base/AbsFabActivity.java | 2 +- .../tageditor/AlbumTagEditorActivity.java | 2 +- .../tageditor/SongTagEditorActivity.java | 2 +- .../ArtistViewFragment.java | 4 +- .../SongViewFragment.java | 2 +- .../kabouzeid/gramophone/util/ColorUtil.java | 4 + .../main/res/layout/activity_album_detail.xml | 6 +- .../res/layout/activity_album_tag_editor.xml | 6 +- .../res/layout/activity_artist_detail.xml | 6 +- app/src/main/res/layout/activity_main.xml | 5 +- .../res/layout/activity_music_controller.xml | 19 +-- .../res/layout/activity_song_tag_editor.xml | 2 +- .../{item_grid_album.xml => item_grid.xml} | 27 ++-- ...id_artist_album.xml => item_grid_card.xml} | 8 +- .../{item_list_song.xml => item_list.xml} | 45 ++++-- app/src/main/res/layout/item_list_artist.xml | 63 --------- .../main/res/layout/item_list_artist_song.xml | 73 ---------- .../main/res/layout/item_list_playlist.xml | 61 -------- .../res/layout/item_list_playlist_song.xml | 35 ----- ...lbum_song.xml => item_list_single_row.xml} | 84 ++++++----- .../res/layout/item_list_smart_playlist.xml | 54 ------- app/src/main/res/layout/item_search_album.xml | 66 --------- .../main/res/layout/item_search_artist.xml | 65 --------- app/src/main/res/layout/item_search_song.xml | 62 -------- .../res/layout/navigation_drawer_header.xml | 15 +- ...{item_search_header.xml => sub_header.xml} | 0 app/src/main/res/layout/widget_medium.xml | 4 +- .../main/res/menu/menu_item_playlist_song.xml | 2 +- .../menu/menu_playlists_songs_selection.xml | 2 +- app/src/main/res/values/dimens.xml | 6 +- app/src/main/res/values/values.xml | 5 +- 55 files changed, 815 insertions(+), 1151 deletions(-) rename app/src/main/java/com/kabouzeid/gramophone/adapter/{ArtistAdapter.java => artist/AbsArtistAdapter.java} (76%) create mode 100644 app/src/main/java/com/kabouzeid/gramophone/adapter/artist/ArtistGridAdapter.java create mode 100644 app/src/main/java/com/kabouzeid/gramophone/adapter/artist/ArtistListAdapter.java rename app/src/main/java/com/kabouzeid/gramophone/adapter/{songadapter => song}/AbsPlaylistSongAdapter.java (93%) rename app/src/main/java/com/kabouzeid/gramophone/adapter/{songadapter => song}/AlbumSongAdapter.java (66%) rename app/src/main/java/com/kabouzeid/gramophone/adapter/{songadapter => song}/ArtistSongAdapter.java (77%) rename app/src/main/java/com/kabouzeid/gramophone/adapter/{songadapter => song}/PlaylistSongAdapter.java (66%) rename app/src/main/java/com/kabouzeid/gramophone/adapter/{songadapter => song}/SongAdapter.java (63%) rename app/src/main/java/com/kabouzeid/gramophone/adapter/{songadapter => song}/smartplaylist/SmartPlaylistSongAdapter.java (65%) create mode 100644 app/src/main/java/com/kabouzeid/gramophone/helper/menu/GenericMenuHelper.java create mode 100644 app/src/main/java/com/kabouzeid/gramophone/helper/menu/PlaylistMenuHelper.java rename app/src/main/java/com/kabouzeid/gramophone/helper/{MenuItemClickHelper.java => menu/SongMenuHelper.java} (63%) rename app/src/main/res/layout/{item_grid_album.xml => item_grid.xml} (74%) rename app/src/main/res/layout/{item_grid_artist_album.xml => item_grid_card.xml} (88%) rename app/src/main/res/layout/{item_list_song.xml => item_list.xml} (65%) delete mode 100644 app/src/main/res/layout/item_list_artist.xml delete mode 100644 app/src/main/res/layout/item_list_artist_song.xml delete mode 100644 app/src/main/res/layout/item_list_playlist.xml delete mode 100644 app/src/main/res/layout/item_list_playlist_song.xml rename app/src/main/res/layout/{item_list_album_song.xml => item_list_single_row.xml} (55%) delete mode 100644 app/src/main/res/layout/item_list_smart_playlist.xml delete mode 100644 app/src/main/res/layout/item_search_album.xml delete mode 100644 app/src/main/res/layout/item_search_artist.xml delete mode 100644 app/src/main/res/layout/item_search_song.xml rename app/src/main/res/layout/{item_search_header.xml => sub_header.xml} (100%) diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java index 857d827c..92081e95 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java @@ -18,7 +18,6 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; -import com.afollestad.materialdialogs.util.DialogUtils; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; @@ -47,6 +46,9 @@ import com.squareup.otto.Subscribe; import java.util.ArrayList; import java.util.List; +import butterknife.ButterKnife; +import butterknife.InjectView; + /** * @author Karim Abou Zeid (kabouzeid) */ @@ -55,15 +57,24 @@ public class AlbumAdapter extends AbsMultiSelectAdapter dataSet; + private int defaultFooterColor; + + public AlbumAdapter(@NonNull AppCompatActivity activity, @Nullable CabHolder cabHolder) { + super(activity, cabHolder, R.menu.menu_media_selection); + this.activity = activity; + usePalette = PreferenceUtil.getInstance(activity).coloredAlbumFooters(); + defaultFooterColor = ColorUtil.resolveColor(activity, R.attr.default_bar_color); + loadDataSet(); + setHasStableIds(true); + } @NonNull @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = LayoutInflater.from(activity).inflate(R.layout.item_grid_album, parent, false); + View view = LayoutInflater.from(activity).inflate(R.layout.item_grid, parent, false); return new ViewHolder(view); } @@ -71,18 +82,18 @@ public class AlbumAdapter extends AbsMultiSelectAdapter= Build.VERSION_CODES.LOLLIPOP) { - view.setOnTouchListener(new View.OnTouchListener() { + image.setTransitionName(activity.getString(R.string.transition_album_art)); + // fixes the ripple, so that it starts at the right position instead of in the middle + itemView.setOnTouchListener(new View.OnTouchListener() { @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public boolean onTouch(@NonNull View view, @NonNull MotionEvent motionEvent) { - ((FrameLayout) view.findViewById(R.id.content)).getForeground().setHotspot(motionEvent.getX(), motionEvent.getY()); + ((FrameLayout) view.findViewById(R.id.container)).getForeground().setHotspot(motionEvent.getX(), motionEvent.getY()); return false; } }); @@ -184,8 +191,8 @@ public class AlbumAdapter extends AbsMultiSelectAdapter= Build.VERSION_CODES.LOLLIPOP) { + image.setTransitionName(activity.getString(R.string.transition_album_art)); + } } @Override @@ -163,8 +167,8 @@ public class ArtistAlbumAdapter extends AbsMultiSelectAdapter { private final AppCompatActivity activity; public PlayingQueueAdapter(@NonNull AppCompatActivity activity, @NonNull ArrayList playList) { - super(activity, R.layout.item_list_playlist_song, playList); + super(activity, R.layout.item_list_single_row, playList); this.activity = activity; } @@ -39,10 +38,10 @@ public class PlayingQueueAdapter extends ArrayAdapter { public View getView(final int position, @Nullable View convertView, ViewGroup parent) { final Song song = getItem(position); if (convertView == null) { - convertView = LayoutInflater.from(activity).inflate(R.layout.item_list_playlist_song, parent, false); + convertView = LayoutInflater.from(activity).inflate(R.layout.item_list_single_row, parent, false); } - final TextView title = (TextView) convertView.findViewById(R.id.song_title); - final ImageView playingIndicator = (ImageView) convertView.findViewById(R.id.playing_indicator); + final TextView title = (TextView) convertView.findViewById(R.id.title); + final ImageView playingIndicator = (ImageView) convertView.findViewById(R.id.image); final ImageView overflowButton = (ImageView) convertView.findViewById(R.id.menu); title.setText(song.title); @@ -53,23 +52,25 @@ public class PlayingQueueAdapter extends ArrayAdapter { playingIndicator.setVisibility(View.GONE); } - overflowButton.setOnClickListener(new View.OnClickListener() { + overflowButton.setOnClickListener(new SongMenuHelper.OnClickSongMenu(activity) { @Override - public void onClick(final View v) { - PopupMenu popupMenu = new PopupMenu(activity, v); - popupMenu.inflate(R.menu.menu_item_playing_queue_song); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(@NonNull MenuItem item) { - if (item.getItemId() == R.id.action_remove_from_playing_queue) { - MusicPlayerRemote.removeFromQueue(position); - notifyDataSetChanged(); - return true; - } - return MenuItemClickHelper.handleSongMenuClick(activity, song, item); - } - }); - popupMenu.show(); + public Song getSong() { + return song; + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + if (item.getItemId() == R.id.action_remove_from_playing_queue) { + MusicPlayerRemote.removeFromQueue(position); + notifyDataSetChanged(); + return true; + } + return super.onMenuItemClick(item); + } + + @Override + public int getMenuRes() { + return R.menu.menu_item_playing_queue_song; } }); return convertView; diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java index c86a85ce..522da458 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java @@ -1,5 +1,6 @@ package com.kabouzeid.gramophone.adapter; +import android.os.Build; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.util.Pair; @@ -18,8 +19,8 @@ import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; import com.kabouzeid.gramophone.dialogs.ClearSmartPlaylistDialog; import com.kabouzeid.gramophone.dialogs.DeletePlaylistDialog; -import com.kabouzeid.gramophone.helper.MenuItemClickHelper; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; +import com.kabouzeid.gramophone.helper.menu.PlaylistMenuHelper; import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.loader.PlaylistLoader; import com.kabouzeid.gramophone.loader.PlaylistSongLoader; @@ -31,8 +32,10 @@ import com.kabouzeid.gramophone.model.smartplaylist.LastAddedPlaylist; import com.kabouzeid.gramophone.model.smartplaylist.MyTopTracksPlaylist; import com.kabouzeid.gramophone.model.smartplaylist.RecentlyPlayedPlaylist; import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; +import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.NavigationUtil; +import com.kabouzeid.gramophone.util.Util; import com.squareup.otto.Subscribe; import java.util.ArrayList; @@ -48,8 +51,8 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter dataSet; @@ -79,17 +82,21 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter= Build.VERSION_CODES.LOLLIPOP) { + itemView.setElevation(activity.getResources().getDimensionPixelSize(R.dimen.card_elevation)); + } + } + + int padding = activity.getResources().getDimensionPixelSize(R.dimen.list_item_image_icon_padding); + icon.setPadding(padding, padding, padding, padding); + + itemView.setOnClickListener(this); + itemView.setOnLongClickListener(this); menu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { PopupMenu popupMenu = new PopupMenu(activity, view); - popupMenu.inflate(getItemViewType() == VIEW_TYPE_SMART ? R.menu.menu_item_smart_playlist : R.menu.menu_item_playlist); + popupMenu.inflate(getItemViewType() == SMART_PLAYLIST ? R.menu.menu_item_smart_playlist : R.menu.menu_item_playlist); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(@NonNull MenuItem item) { @@ -183,7 +202,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter= Build.VERSION_CODES.LOLLIPOP) { + image.setTransitionName(activity.getString(R.string.transition_album_art)); + } + break; + case ARTIST: + menu.setVisibility(View.GONE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + image.setTransitionName(activity.getString(R.string.transition_artist_image)); + } break; } } @@ -237,13 +229,13 @@ public class SearchAdapter extends RecyclerView.Adapter { - @NonNull +public abstract class AbsArtistAdapter extends AbsMultiSelectAdapter { protected final AppCompatActivity activity; protected List dataSet; - @NonNull protected final LastFMRestClient lastFMRestClient; - public ArtistAdapter(@NonNull AppCompatActivity activity, @Nullable CabHolder cabHolder) { + public AbsArtistAdapter(@NonNull AppCompatActivity activity, @Nullable CabHolder cabHolder) { super(activity, cabHolder, R.menu.menu_media_selection); this.activity = activity; lastFMRestClient = new LastFMRestClient(activity); @@ -67,23 +67,26 @@ public class ArtistAdapter extends AbsMultiSelectAdapter images) { + int thumbnailIndex = 0; + if (images.size() > 2) { + thumbnailIndex = 2; + } else if (images.size() > 1) { + thumbnailIndex = 1; + } + return images.get(thumbnailIndex); } @Override public void onBindViewHolder(@NonNull final ViewHolder holder, int position) { final Artist artist = dataSet.get(position); - holder.artistName.setText(artist.name); - holder.artistInfo.setText(MusicUtil.getArtistInfoString(activity, artist)); - holder.view.setActivated(isChecked(artist)); + holder.title.setText(artist.name); + holder.text.setText(MusicUtil.getArtistInfoString(activity, artist)); + holder.itemView.setActivated(isChecked(artist)); if (MusicUtil.isArtistNameUnknown(artist.name)) { - holder.artistImage.setImageResource(R.drawable.default_artist_image); + holder.image.setImageResource(R.drawable.default_artist_image); return; } @@ -91,15 +94,9 @@ public class ArtistAdapter extends AbsMultiSelectAdapter images = artistInfo.getArtist().getImage(); - if (images.size() > 2) { - thumbnailIndex = 2; - } else if (images.size() > 1) { - thumbnailIndex = 1; - } - ImageLoader.getInstance().displayImage(images.get(thumbnailIndex).getText(), - holder.artistImage, + ImageLoader.getInstance().displayImage(getArtistImageToUse(images).getText(), + holder.image, new DisplayImageOptions.Builder() .cacheInMemory(true) .cacheOnDisk(true) @@ -109,13 +106,13 @@ public class ArtistAdapter extends AbsMultiSelectAdapter= 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; + } + } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/artist/ArtistGridAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/artist/ArtistGridAdapter.java new file mode 100644 index 00000000..36da08b3 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/artist/ArtistGridAdapter.java @@ -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 images) { + return images.get(images.size() - 1); + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/artist/ArtistListAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/artist/ArtistListAdapter.java new file mode 100644 index 00000000..780456e7 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/artist/ArtistListAdapter.java @@ -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); + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/AbsPlaylistSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/AbsPlaylistSongAdapter.java similarity index 93% rename from app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/AbsPlaylistSongAdapter.java rename to app/src/main/java/com/kabouzeid/gramophone/adapter/song/AbsPlaylistSongAdapter.java index b0bbea48..2bdd9bd4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/AbsPlaylistSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/AbsPlaylistSongAdapter.java @@ -1,4 +1,4 @@ -package com.kabouzeid.gramophone.adapter.songadapter; +package com.kabouzeid.gramophone.adapter.song; import android.content.Context; import android.support.annotation.Nullable; diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/AlbumSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/AlbumSongAdapter.java similarity index 66% rename from app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/AlbumSongAdapter.java rename to app/src/main/java/com/kabouzeid/gramophone/adapter/song/AlbumSongAdapter.java index 58b1ad9a..0bbf5438 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/AlbumSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/AlbumSongAdapter.java @@ -1,4 +1,4 @@ -package com.kabouzeid.gramophone.adapter.songadapter; +package com.kabouzeid.gramophone.adapter.song; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -9,21 +9,23 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; -import android.widget.PopupMenu; import android.widget.TextView; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.AbsMultiSelectAdapter; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog; -import com.kabouzeid.gramophone.helper.MenuItemClickHelper; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; +import com.kabouzeid.gramophone.helper.menu.SongMenuHelper; import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.util.MusicUtil; import java.util.ArrayList; +import butterknife.ButterKnife; +import butterknife.InjectView; + /** * @author Karim Abou Zeid (kabouzeid) */ @@ -45,7 +47,7 @@ public class AlbumSongAdapter extends AbsMultiSelectAdapter objects){ + public void updateDataSet(ArrayList objects) { dataSet = objects; notifyDataSetChanged(); } @@ -53,7 +55,7 @@ public class AlbumSongAdapter extends AbsMultiSelectAdapter 0 ? String.valueOf(trackNumber) : "-"; - holder.trackNumber.setText(trackNumberString); - holder.songTitle.setText(song.title); - holder.artistName.setText(MusicUtil.getReadableDurationString(song.duration)); - holder.view.setActivated(isChecked(song)); + holder.track_number.setText(trackNumberString); + holder.title.setText(song.title); + holder.text.setText(MusicUtil.getReadableDurationString(song.duration)); + holder.itemView.setActivated(isChecked(song)); } @Override @@ -95,38 +97,31 @@ public class AlbumSongAdapter extends AbsMultiSelectAdapter implements MaterialCab private final AppCompatActivity activity; public ArtistSongAdapter(@NonNull AppCompatActivity activity, @NonNull ArrayList songs, @Nullable CabHolder cabHolder) { - super(activity, R.layout.item_list_song, songs); + super(activity, R.layout.item_list, songs); this.activity = activity; this.cabHolder = cabHolder; checked = new ArrayList<>(); @@ -63,12 +63,12 @@ public class ArtistSongAdapter extends ArrayAdapter implements MaterialCab public View getView(final int position, @Nullable View convertView, ViewGroup parent) { final Song song = getItem(position); if (convertView == null) { - convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_list_artist_song, parent, false); + convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_list, parent, false); } - final TextView songTitle = (TextView) convertView.findViewById(R.id.song_title); - final TextView songInfo = (TextView) convertView.findViewById(R.id.song_info); - final ImageView albumArt = (ImageView) convertView.findViewById(R.id.album_art); + final TextView songTitle = (TextView) convertView.findViewById(R.id.title); + final TextView songInfo = (TextView) convertView.findViewById(R.id.text); + final ImageView albumArt = (ImageView) convertView.findViewById(R.id.image); songTitle.setText(song.title); songInfo.setText(song.albumName); @@ -83,29 +83,29 @@ public class ArtistSongAdapter extends ArrayAdapter implements MaterialCab .build() ); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + albumArt.setTransitionName(activity.getString(R.string.transition_album_art)); + } + final ImageView overflowButton = (ImageView) convertView.findViewById(R.id.menu); - overflowButton.setOnClickListener(new View.OnClickListener() { + overflowButton.setOnClickListener(new SongMenuHelper.OnClickSongMenu(activity) { @Override - public void onClick(View v) { - PopupMenu popupMenu = new PopupMenu(activity, v); - popupMenu.inflate(R.menu.menu_item_song); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(@NonNull MenuItem item) { - switch (item.getItemId()) { - case R.id.action_go_to_album: - Pair[] albumPairs = new Pair[]{ - Pair.create(albumArt, activity.getResources().getString(R.string.transition_album_cover)) - }; - if (activity instanceof AbsFabActivity) - albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs); - NavigationUtil.goToAlbum(activity, song.albumId, albumPairs); - return true; - } - return MenuItemClickHelper.handleSongMenuClick(activity, song, item); - } - }); - popupMenu.show(); + public Song getSong() { + return song; + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + if (item.getItemId() == R.id.action_go_to_album) { + Pair[] albumPairs = new Pair[]{ + Pair.create(albumArt, activity.getResources().getString(R.string.transition_album_art)) + }; + if (activity instanceof AbsFabActivity) + albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs); + NavigationUtil.goToAlbum(activity, song.albumId, albumPairs); + return true; + } + return super.onMenuItemClick(item); } }); diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/PlaylistSongAdapter.java similarity index 66% rename from app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java rename to app/src/main/java/com/kabouzeid/gramophone/adapter/song/PlaylistSongAdapter.java index 92d66d5f..d29f6203 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/PlaylistSongAdapter.java @@ -1,5 +1,6 @@ -package com.kabouzeid.gramophone.adapter.songadapter; +package com.kabouzeid.gramophone.adapter.song; +import android.os.Build; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.util.Pair; @@ -10,14 +11,13 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; -import android.widget.PopupMenu; import android.widget.TextView; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; import com.kabouzeid.gramophone.dialogs.RemoveFromPlaylistDialog; -import com.kabouzeid.gramophone.helper.MenuItemClickHelper; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; +import com.kabouzeid.gramophone.helper.menu.SongMenuHelper; import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.loader.PlaylistSongLoader; import com.kabouzeid.gramophone.model.Playlist; @@ -33,6 +33,9 @@ import com.nostra13.universalimageloader.core.ImageLoader; import java.util.ArrayList; import java.util.List; +import butterknife.ButterKnife; +import butterknife.InjectView; + /** * @author Karim Abou Zeid (kabouzeid) @@ -72,8 +75,8 @@ public class PlaylistSongAdapter extends AbsPlaylistSongAdapter selection) { switch (menuItem.getItemId()) { - case R.id.action_delete_from_playlist: + case R.id.action_remove_from_playlist: RemoveFromPlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); break; case R.id.action_add_to_playlist: @@ -132,48 +135,53 @@ public class PlaylistSongAdapter extends AbsPlaylistSongAdapter= Build.VERSION_CODES.LOLLIPOP) { + image.setTransitionName(activity.getString(R.string.transition_album_art)); + } + + menu.setOnClickListener(new SongMenuHelper.OnClickSongMenu(activity) { @Override - public void onClick(View v) { - PopupMenu popupMenu = new PopupMenu(activity, v); - popupMenu.inflate(songMenu); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(@NonNull MenuItem item) { - switch (item.getItemId()) { - case R.id.action_delete_from_playlist: - RemoveFromPlaylistDialog.create(dataSet.get(getAdapterPosition())).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); - return true; - case R.id.action_go_to_album: - Pair[] albumPairs = new Pair[]{ - Pair.create(albumArt, activity.getString(R.string.transition_album_cover)) - }; - if (activity instanceof AbsFabActivity) - albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs); - NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).albumId, albumPairs); - return true; - } - return MenuItemClickHelper.handleSongMenuClick(activity, dataSet.get(getAdapterPosition()), item); - } - }); - popupMenu.show(); + public Song getSong() { + return dataSet.get(getAdapterPosition()); + } + + @Override + public int getMenuRes() { + return R.menu.menu_item_playlist_song; + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_remove_from_playlist: + RemoveFromPlaylistDialog.create((PlaylistSong) getSong()).show(activity.getSupportFragmentManager(), "REMOVE_FROM_PLAYLIST"); + return true; + case R.id.action_go_to_album: + Pair[] albumPairs = new Pair[]{ + Pair.create(image, activity.getString(R.string.transition_album_art)) + }; + if (activity instanceof AbsFabActivity) + albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs); + NavigationUtil.goToAlbum(activity, ((PlaylistSong) getSong()).albumId, albumPairs); + return true; + } + return super.onMenuItemClick(item); } }); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/SongAdapter.java similarity index 63% rename from app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java rename to app/src/main/java/com/kabouzeid/gramophone/adapter/song/SongAdapter.java index 9974d3b5..b8dc20d9 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/SongAdapter.java @@ -1,6 +1,7 @@ -package com.kabouzeid.gramophone.adapter.songadapter; +package com.kabouzeid.gramophone.adapter.song; import android.graphics.Typeface; +import android.os.Build; import android.support.annotation.NonNull; import android.support.v4.util.Pair; import android.support.v7.app.AppCompatActivity; @@ -10,7 +11,6 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; -import android.widget.PopupMenu; import android.widget.TextView; import com.afollestad.materialcab.MaterialCab; @@ -20,8 +20,8 @@ import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.AbsMultiSelectAdapter; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog; -import com.kabouzeid.gramophone.helper.MenuItemClickHelper; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; +import com.kabouzeid.gramophone.helper.menu.SongMenuHelper; import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.loader.SongLoader; import com.kabouzeid.gramophone.model.DataBaseChangedEvent; @@ -35,6 +35,9 @@ import com.squareup.otto.Subscribe; import java.util.ArrayList; +import butterknife.ButterKnife; +import butterknife.InjectView; + /** * @author Karim Abou Zeid (kabouzeid) */ @@ -67,7 +70,7 @@ public class SongAdapter extends AbsMultiSelectAdapter= Build.VERSION_CODES.LOLLIPOP) { + image.setTransitionName(activity.getString(R.string.transition_album_art)); + } + + menu.setOnClickListener(new SongMenuHelper.OnClickSongMenu(activity) { @Override - public void onClick(View view) { - PopupMenu popupMenu = new PopupMenu(activity, view); - popupMenu.inflate(R.menu.menu_item_song); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(@NonNull MenuItem item) { - final int position = getAdapterPosition() - 1; - switch (item.getItemId()) { - case R.id.action_go_to_album: - Pair[] albumPairs = new Pair[]{ - Pair.create(albumArt, activity.getResources().getString(R.string.transition_album_cover)) - }; - if (activity instanceof AbsFabActivity) - albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs); - NavigationUtil.goToAlbum(activity, dataSet.get(position).albumId, albumPairs); - return true; - } - return MenuItemClickHelper.handleSongMenuClick(activity, dataSet.get(position), item); - } - }); - popupMenu.show(); + public Song getSong() { + return dataSet.get(getAdapterPosition() - 1); + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_go_to_album: + Pair[] albumPairs = new Pair[]{ + Pair.create(image, activity.getResources().getString(R.string.transition_album_art)) + }; + if (activity instanceof AbsFabActivity) + albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs); + NavigationUtil.goToAlbum(activity, getSong().albumId, albumPairs); + return true; + } + return super.onMenuItemClick(item); } }); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/smartplaylist/SmartPlaylistSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/smartplaylist/SmartPlaylistSongAdapter.java similarity index 65% rename from app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/smartplaylist/SmartPlaylistSongAdapter.java rename to app/src/main/java/com/kabouzeid/gramophone/adapter/song/smartplaylist/SmartPlaylistSongAdapter.java index 454e7282..a43a1584 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/smartplaylist/SmartPlaylistSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/smartplaylist/SmartPlaylistSongAdapter.java @@ -1,5 +1,6 @@ -package com.kabouzeid.gramophone.adapter.songadapter.smartplaylist; +package com.kabouzeid.gramophone.adapter.song.smartplaylist; +import android.os.Build; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.util.Pair; @@ -10,14 +11,13 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; -import android.widget.PopupMenu; import android.widget.TextView; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.adapter.songadapter.AbsPlaylistSongAdapter; +import com.kabouzeid.gramophone.adapter.song.AbsPlaylistSongAdapter; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; -import com.kabouzeid.gramophone.helper.MenuItemClickHelper; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; +import com.kabouzeid.gramophone.helper.menu.SongMenuHelper; import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist; @@ -30,6 +30,9 @@ import com.nostra13.universalimageloader.core.ImageLoader; import java.util.ArrayList; import java.util.List; +import butterknife.ButterKnife; +import butterknife.InjectView; + /** * @author Karim Abou Zeid (kabouzeid) */ @@ -67,8 +70,8 @@ public class SmartPlaylistSongAdapter extends AbsPlaylistSongAdapter= Build.VERSION_CODES.LOLLIPOP) { + image.setTransitionName(activity.getString(R.string.transition_album_art)); + } + + menu.setOnClickListener(new SongMenuHelper.OnClickSongMenu(activity) { @Override - public void onClick(View v) { - PopupMenu popupMenu = new PopupMenu(activity, v); - popupMenu.inflate(songMenu); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(@NonNull MenuItem item) { - switch (item.getItemId()) { - case R.id.action_go_to_album: - Pair[] albumPairs = new Pair[]{ - Pair.create(albumArt, activity.getString(R.string.transition_album_cover)) - }; - if (activity instanceof AbsFabActivity) - albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs); - NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).albumId, albumPairs); - return true; - } - return MenuItemClickHelper.handleSongMenuClick(activity, dataSet.get(getAdapterPosition()), item); - } - }); - popupMenu.show(); + public Song getSong() { + return dataSet.get(getAdapterPosition()); + } + + @Override + public int getMenuRes() { + return R.menu.menu_item_cannot_delete_single_songs_playlist_song; + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + if (item.getItemId() == R.id.action_go_to_album) { + Pair[] albumPairs = new Pair[]{ + Pair.create(image, activity.getString(R.string.transition_album_art)) + }; + if (activity instanceof AbsFabActivity) + albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs); + NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).albumId, albumPairs); + return true; + } + return super.onMenuItemClick(item); } }); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/appwidget/WidgetMedium.java b/app/src/main/java/com/kabouzeid/gramophone/appwidget/WidgetMedium.java index 567129f6..f9babc65 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appwidget/WidgetMedium.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appwidget/WidgetMedium.java @@ -43,7 +43,7 @@ public class WidgetMedium extends AppWidgetProvider { if (song.id == -1) return; widgetLayout = new RemoteViews(context.getPackageName(), R.layout.widget_medium); linkButtons(context, widgetLayout); - widgetLayout.setTextViewText(R.id.song_title, song.title); + widgetLayout.setTextViewText(R.id.title, song.title); widgetLayout.setTextViewText(R.id.song_secondary_information, song.artistName + " | " + song.albumName); updateWidgetsPlayState(context, isPlaying); loadAlbumArt(context, song); @@ -107,15 +107,15 @@ public class WidgetMedium extends AppWidgetProvider { private static void setAlbumArt(@NonNull final Context context, @Nullable final Bitmap albumArt) { if (albumArt != null) { - widgetLayout.setImageViewBitmap(R.id.album_art, albumArt); + widgetLayout.setImageViewBitmap(R.id.image, albumArt); } else { - widgetLayout.setImageViewResource(R.id.album_art, R.drawable.default_album_art); + widgetLayout.setImageViewResource(R.id.image, R.drawable.default_album_art); } updateWidgets(context); } private static void linkButtons(@NonNull final Context context, @NonNull final RemoteViews views) { - views.setOnClickPendingIntent(R.id.album_art, retrievePlaybackActions(context, 0)); + views.setOnClickPendingIntent(R.id.image, retrievePlaybackActions(context, 0)); views.setOnClickPendingIntent(R.id.media_titles, retrievePlaybackActions(context, 0)); views.setOnClickPendingIntent(R.id.button_toggle_play_pause, retrievePlaybackActions(context, 1)); views.setOnClickPendingIntent(R.id.button_next, retrievePlaybackActions(context, 2)); diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/menu/GenericMenuHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/menu/GenericMenuHelper.java new file mode 100644 index 00000000..b9959d9b --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/menu/GenericMenuHelper.java @@ -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; + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/menu/PlaylistMenuHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/menu/PlaylistMenuHelper.java new file mode 100644 index 00000000..922647cd --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/menu/PlaylistMenuHelper.java @@ -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 getPlaylistSongs(@NonNull Activity activity, Playlist playlist) { + return playlist instanceof AbsSmartPlaylist ? + ((AbsSmartPlaylist) playlist).getSongs(activity) : + PlaylistSongLoader.getPlaylistSongList(activity, playlist.id); + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/MenuItemClickHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/menu/SongMenuHelper.java similarity index 63% rename from app/src/main/java/com/kabouzeid/gramophone/helper/MenuItemClickHelper.java rename to app/src/main/java/com/kabouzeid/gramophone/helper/menu/SongMenuHelper.java index f38d0a48..41db096d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/MenuItemClickHelper.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/menu/SongMenuHelper.java @@ -1,23 +1,20 @@ -package com.kabouzeid.gramophone.helper; +package com.kabouzeid.gramophone.helper.menu; -import android.app.Activity; import android.content.Intent; import android.support.annotation.NonNull; import android.support.v4.util.Pair; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; +import android.view.View; +import android.widget.PopupMenu; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; -import com.kabouzeid.gramophone.dialogs.DeletePlaylistDialog; import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog; -import com.kabouzeid.gramophone.dialogs.RenamePlaylistDialog; import com.kabouzeid.gramophone.dialogs.SongDetailDialog; +import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.interfaces.PaletteColorHolder; -import com.kabouzeid.gramophone.loader.PlaylistSongLoader; -import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist; import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity; import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity; @@ -25,14 +22,14 @@ import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.NavigationUtil; import java.io.File; -import java.util.ArrayList; /** - * @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad) + * @author Karim Abou Zeid (kabouzeid) */ -public class MenuItemClickHelper { +public class SongMenuHelper { + public static int MENU_RES = R.menu.menu_item_song; - public static boolean handleSongMenuClick(@NonNull AppCompatActivity activity, @NonNull Song song, @NonNull MenuItem item) { + public static boolean handleMenuClick(@NonNull AppCompatActivity activity, @NonNull Song song, @NonNull MenuItem item) { switch (item.getItemId()) { case R.id.action_set_as_ringtone: MusicUtil.setRingtone(activity, song.id); @@ -79,28 +76,30 @@ public class MenuItemClickHelper { return false; } - public static boolean handlePlaylistMenuClick(@NonNull AppCompatActivity activity, @NonNull Playlist playlist, @NonNull MenuItem item) { - switch (item.getItemId()) { - case R.id.action_play: - MusicPlayerRemote.openQueue(new ArrayList<>(getPlaylistSongs(activity, playlist)), 0, true); - return true; - case R.id.action_add_to_current_playing: - MusicPlayerRemote.enqueue(new ArrayList<>(getPlaylistSongs(activity, playlist))); - return true; - case R.id.action_rename_playlist: - RenamePlaylistDialog.create(playlist.id).show(activity.getSupportFragmentManager(), "RENAME_PLAYLIST"); - return true; - case R.id.action_delete_playlist: - DeletePlaylistDialog.create(playlist).show(activity.getSupportFragmentManager(), "DELETE_PLAYLIST"); - return true; - } - return false; - } + public static abstract class OnClickSongMenu implements View.OnClickListener, PopupMenu.OnMenuItemClickListener { + private AppCompatActivity activity; - @NonNull - private static ArrayList getPlaylistSongs(@NonNull Activity activity, Playlist playlist) { - return playlist instanceof AbsSmartPlaylist ? - ((AbsSmartPlaylist) playlist).getSongs(activity) : - PlaylistSongLoader.getPlaylistSongList(activity, playlist.id); + public OnClickSongMenu(@NonNull AppCompatActivity activity) { + this.activity = activity; + } + + public int getMenuRes() { + return MENU_RES; + } + + @Override + public void onClick(View v) { + PopupMenu popupMenu = new PopupMenu(activity, v); + popupMenu.inflate(getMenuRes()); + popupMenu.setOnMenuItemClickListener(this); + popupMenu.show(); + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + return handleMenuClick(activity, getSong(), item); + } + + public abstract Song getSong(); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/AbsSmartPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/AbsSmartPlaylist.java index 8cec876d..d3dded37 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/AbsSmartPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/AbsSmartPlaylist.java @@ -7,7 +7,7 @@ import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.adapter.songadapter.smartplaylist.SmartPlaylistSongAdapter; +import com.kabouzeid.gramophone.adapter.song.smartplaylist.SmartPlaylistSongAdapter; import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.model.Song; @@ -24,7 +24,7 @@ public abstract class AbsSmartPlaylist extends Playlist { public final int iconRes; public AbsSmartPlaylist(final String name, final int iconRes) { - super(-1, name); + super(-Math.abs(31 * name.hashCode() + (iconRes * name.hashCode() * 31 * 31)), name); this.iconRes = iconRes; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java index 2d974d0d..4cea6d2c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java @@ -27,7 +27,7 @@ import com.afollestad.materialdialogs.util.DialogUtils; import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.adapter.songadapter.AlbumSongAdapter; +import com.kabouzeid.gramophone.adapter.song.AlbumSongAdapter; import com.kabouzeid.gramophone.dialogs.SleepTimerDialog; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.imageloader.BlurProcessor; @@ -77,13 +77,13 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH @InjectView(R.id.list) ObservableRecyclerView recyclerView; - @InjectView(R.id.album_art) + @InjectView(R.id.image) ImageView albumArtImageView; @InjectView(R.id.album_art_background) ImageView albumArtBackground; @InjectView(R.id.toolbar) Toolbar toolbar; - @InjectView(R.id.album_title) + @InjectView(R.id.title) TextView albumTitleView; @InjectView(R.id.list_background) View songsBackgroundView; @@ -156,6 +156,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH // Translate album cover albumArtImageView.setTranslationY(Math.max(-albumArtViewHeight, -scrollY / 2)); + albumArtBackground.setTranslationY(Math.max(-albumArtViewHeight, -scrollY / 2)); // Translate list background songsBackgroundView.setTranslationY(Math.max(0, -scrollY + albumArtViewHeight)); @@ -254,43 +255,31 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH } private void applyPalette(@Nullable Bitmap bitmap) { + final int defaultBarColor = ColorUtil.resolveColor(this, R.attr.default_bar_color); if (bitmap != null) { Palette.from(bitmap) .resizeBitmapSize(100) .generate(new Palette.PaletteAsyncListener() { @Override public void onGenerated(@NonNull Palette palette) { - final Palette.Swatch vibrantSwatch = palette.getVibrantSwatch(); - if (vibrantSwatch != null) { - toolbarColor = vibrantSwatch.getRgb(); - albumTitleView.setBackgroundColor(toolbarColor); - albumTitleView.setTextColor(ColorUtil.getOpaqueColor(vibrantSwatch.getTitleTextColor())); - if (PreferenceUtil.getInstance(AlbumDetailActivity.this).coloredNavigationBarAlbum()) - setNavigationBarColor(toolbarColor); - notifyTaskColorChange(toolbarColor); - } else { - resetColors(); - } + setColors(palette.getVibrantColor(defaultBarColor)); } }); } else { - resetColors(); + setColors(defaultBarColor); } } - private void resetColors() { - int titleTextColor = DialogUtils.resolveColor(this, R.attr.title_text_color); - int defaultBarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color); - - toolbarColor = defaultBarColor; - albumTitleView.setBackgroundColor(defaultBarColor); - albumTitleView.setTextColor(titleTextColor); + private void setColors(int vibrantColor) { + toolbarColor = vibrantColor; + albumTitleView.setBackgroundColor(vibrantColor); + albumTitleView.setTextColor(ColorUtil.getTextColorForBackground(vibrantColor)); if (PreferenceUtil.getInstance(this).coloredNavigationBarArtist()) - setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color)); + setNavigationBarColor(vibrantColor); - notifyTaskColorChange(toolbarColor); + notifyTaskColorChange(vibrantColor); } @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java index 16c668c1..9d1cd42e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java @@ -34,7 +34,7 @@ import com.github.ksoichiro.android.observablescrollview.ObservableListView; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.ArtistAlbumAdapter; -import com.kabouzeid.gramophone.adapter.songadapter.ArtistSongAdapter; +import com.kabouzeid.gramophone.adapter.song.ArtistSongAdapter; import com.kabouzeid.gramophone.dialogs.SleepTimerDialog; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.bitmapblur.StackBlurManager; @@ -91,13 +91,13 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor @InjectView(R.id.artist_image_background) ImageView artistImageBackground; - @InjectView(R.id.artist_image) + @InjectView(R.id.image) SquareIfPlaceImageView artistImage; @InjectView(R.id.list_background) View songListBackground; @InjectView(R.id.list) ObservableListView songListView; - @InjectView(R.id.artist_name) + @InjectView(R.id.title) TextView artistName; @InjectView(R.id.toolbar) Toolbar toolbar; @@ -191,6 +191,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor // Translate album cover artistImage.setTranslationY(Math.max(-artistImageViewHeight, -scrollY / 2)); + artistImageBackground.setTranslationY(Math.max(-artistImageViewHeight, -scrollY / 2)); // Translate list background songListBackground.setTranslationY(Math.max(0, -scrollY + artistImageViewHeight)); @@ -305,7 +306,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor private MaterialDialog getBiographyDialog() { return new MaterialDialog.Builder(ArtistDetailActivity.this) .title(artist.name) - .content(biography) + .content(biography != null ? biography : "") .positiveText(android.R.string.ok) .build(); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java index d1995e70..c6c26f1c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java @@ -281,18 +281,18 @@ public class MainActivity extends AbsFabActivity public void onClick(View v) { //noinspection ConstantConditions NavigationUtil.openCurrentPlayingIfPossible(MainActivity.this, getSharedViewsWithFab(new Pair[]{ - Pair.create(navigationDrawerHeader.findViewById(R.id.album_art), - getResources().getString(R.string.transition_album_cover) + Pair.create(navigationDrawerHeader.findViewById(R.id.image), + getResources().getString(R.string.transition_album_art) ) })); } }); } - ((TextView) navigationDrawerHeader.findViewById(R.id.song_title)).setText(song.title); - ((TextView) navigationDrawerHeader.findViewById(R.id.song_artist)).setText(song.artistName); + ((TextView) navigationDrawerHeader.findViewById(R.id.title)).setText(song.title); + ((TextView) navigationDrawerHeader.findViewById(R.id.text)).setText(song.artistName); ImageLoader.getInstance().displayImage( MusicUtil.getSongImageLoaderString(song), - ((ImageView) navigationDrawerHeader.findViewById(R.id.album_art)), + ((ImageView) navigationDrawerHeader.findViewById(R.id.image)), new DisplayImageOptions.Builder() .cacheInMemory(true) .showImageOnFail(R.drawable.default_album_art) diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java index 2ced4a11..76c6d847 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java @@ -42,7 +42,6 @@ import com.kabouzeid.gramophone.dialogs.SleepTimerDialog; import com.kabouzeid.gramophone.dialogs.SongDetailDialog; import com.kabouzeid.gramophone.dialogs.SongShareDialog; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; -import com.kabouzeid.gramophone.helper.bitmapblur.StackBlurManager; import com.kabouzeid.gramophone.imageloader.BlurProcessor; import com.kabouzeid.gramophone.misc.SmallTransitionListener; import com.kabouzeid.gramophone.model.Song; @@ -77,9 +76,9 @@ public class MusicControllerActivity extends AbsFabActivity { private static final int CMD_UPDATE_PROGRESS_VIEWS = 1; - @InjectView(R.id.song_title) + @InjectView(R.id.title) TextView songTitle; - @InjectView(R.id.song_artist) + @InjectView(R.id.text) TextView songArtist; @InjectView(R.id.footer) LinearLayout footer; @@ -97,7 +96,7 @@ public class MusicControllerActivity extends AbsFabActivity { RelativeLayout mediaControllerContainer; @InjectView(R.id.album_art_background) ImageView albumArtBackground; - @InjectView(R.id.album_art) + @InjectView(R.id.image) SquareIfPlaceImageView albumArt; @InjectView(R.id.toolbar) Toolbar toolbar; @@ -121,8 +120,6 @@ public class MusicControllerActivity extends AbsFabActivity { private boolean alternativeProgressSlider; private boolean showPlaybackControllerCard; - private StackBlurManager defaultAlbumArtStackBlurManager; - private Song song; @Override @@ -439,6 +436,7 @@ public class MusicControllerActivity extends AbsFabActivity { @Override public void onLoadingFailed(String imageUri, View view, @Nullable FailReason failReason) { applyPalette(null); + ImageLoader.getInstance().displayImage( "drawable://" + R.drawable.default_album_art, albumArtBackground, @@ -453,7 +451,9 @@ public class MusicControllerActivity extends AbsFabActivity { onLoadingFailed(imageUri, view, null); return; } + applyPalette(loadedImage); + ImageLoader.getInstance().displayImage( imageUri, albumArtBackground, @@ -465,36 +465,25 @@ public class MusicControllerActivity extends AbsFabActivity { } private void applyPalette(@Nullable Bitmap bitmap) { + final int defaultBarColor = ColorUtil.resolveColor(this, R.attr.default_bar_color); if (bitmap != null) { Palette.from(bitmap) .resizeBitmapSize(100) .generate(new Palette.PaletteAsyncListener() { @Override public void onGenerated(@NonNull Palette palette) { - final Palette.Swatch vibrantSwatch = palette.getVibrantSwatch(); - if (vibrantSwatch != null) { - final int swatchRgb = vibrantSwatch.getRgb(); - animateColorChange(swatchRgb); - animateTextColorChange(ColorUtil.getOpaqueColor(vibrantSwatch.getTitleTextColor())); - notifyTaskColorChange(swatchRgb); - } else { - resetColors(); - } + setColors(palette.getVibrantColor(defaultBarColor)); } }); } else { - resetColors(); + setColors(defaultBarColor); } } - private void resetColors() { - final int textColor = ColorUtil.getOpaqueColor(DialogUtils.resolveColor(this, R.attr.title_text_color)); - final int defaultBarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color); - - animateColorChange(defaultBarColor); - animateTextColorChange(textColor); - - notifyTaskColorChange(defaultBarColor); + private void setColors(int vibrantColor) { + animateColorChange(vibrantColor); + animateTextColorChange(ColorUtil.getTextColorForBackground(vibrantColor)); + notifyTaskColorChange(vibrantColor); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java index dec12a0d..bbd3bceb 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java @@ -13,8 +13,8 @@ import android.widget.TextView; import com.afollestad.materialcab.MaterialCab; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.adapter.songadapter.AbsPlaylistSongAdapter; -import com.kabouzeid.gramophone.adapter.songadapter.PlaylistSongAdapter; +import com.kabouzeid.gramophone.adapter.song.AbsPlaylistSongAdapter; +import com.kabouzeid.gramophone.adapter.song.PlaylistSongAdapter; import com.kabouzeid.gramophone.dialogs.SleepTimerDialog; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.interfaces.CabHolder; @@ -77,7 +77,7 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder adapter = new PlaylistSongAdapter(this, playlist, this); DragSortRecycler dragSortRecycler = new DragSortRecycler(); - dragSortRecycler.setViewHandleId(R.id.album_art); + dragSortRecycler.setViewHandleId(R.id.image); dragSortRecycler.setOnItemMovedListener(new DragSortRecycler.OnItemMovedListener() { @Override public void onItemMoved(int from, int to) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java index d701be79..8c97a7c4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java @@ -122,7 +122,7 @@ public abstract class AbsFabActivity extends AbsPlaybackControlActivity { } } - @Nullable + @NonNull protected FloatingActionButton getFab() { if (fab == null) { fab = (FloatingActionButton) findViewById(R.id.fab); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java index b3a76e3c..3b77ab10 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java @@ -45,7 +45,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text public static final String TAG = AlbumTagEditorActivity.class.getSimpleName(); - @InjectView(R.id.album_title) + @InjectView(R.id.title) EditText albumTitle; @InjectView(R.id.album_artist) EditText albumArtist; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/SongTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/SongTagEditorActivity.java index da6ff927..94e5b4da 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/SongTagEditorActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/SongTagEditorActivity.java @@ -34,7 +34,7 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW EditText genre; @InjectView(R.id.year) EditText year; - @InjectView(R.id.track_number) + @InjectView(R.id.image_text) EditText trackNumber; @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistViewFragment.java index db68ee98..a079454c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistViewFragment.java @@ -5,7 +5,7 @@ import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.adapter.ArtistAdapter; +import com.kabouzeid.gramophone.adapter.artist.ArtistListAdapter; /** * @author Karim Abou Zeid (kabouzeid) @@ -23,7 +23,7 @@ public class ArtistViewFragment extends AbsMainActivityRecyclerViewFragment { @NonNull @Override protected RecyclerView.Adapter createAdapter() { - return new ArtistAdapter(getMainActivity(), getMainActivity()); + return new ArtistListAdapter(getMainActivity(), getMainActivity()); } @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java index 305b4b1d..36166bca 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java @@ -5,7 +5,7 @@ import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.adapter.songadapter.SongAdapter; +import com.kabouzeid.gramophone.adapter.song.SongAdapter; /** * @author Karim Abou Zeid (kabouzeid) diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/ColorUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/ColorUtil.java index 7ad8918d..8208a4d2 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/ColorUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/ColorUtil.java @@ -52,4 +52,8 @@ public class ColorUtil { public static boolean useDarkTextColorOnBackground(int backgroundColor) { return (Color.red(backgroundColor) * 0.299 + Color.green(backgroundColor) * 0.587 + Color.blue(backgroundColor) * 0.114) > 186; } + + public static int getTextColorForBackground(int backgroundColor) { + return (Color.red(backgroundColor) * 0.299 + Color.green(backgroundColor) * 0.587 + Color.blue(backgroundColor) * 0.114) > 186 ? Color.BLACK : Color.WHITE; + } } diff --git a/app/src/main/res/layout/activity_album_detail.xml b/app/src/main/res/layout/activity_album_detail.xml index 2e572e97..93f396de 100644 --- a/app/src/main/res/layout/activity_album_detail.xml +++ b/app/src/main/res/layout/activity_album_detail.xml @@ -15,13 +15,13 @@ android:scaleType="centerCrop" /> @@ -46,7 +46,7 @@ android:orientation="vertical"> + android:src="@drawable/default_album_art" + tools:ignore="UnusedAttribute" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 991271dc..0cc0c65e 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,8 +1,7 @@ - + android:visibility="invisible" + tools:ignore="ContentDescription" /> + tools:ignore="RelativeOverlap,RtlHardcoded,RtlSymmetry,SmallSp" /> diff --git a/app/src/main/res/layout/activity_song_tag_editor.xml b/app/src/main/res/layout/activity_song_tag_editor.xml index 04e3ea80..4ccbb9a7 100644 --- a/app/src/main/res/layout/activity_song_tag_editor.xml +++ b/app/src/main/res/layout/activity_song_tag_editor.xml @@ -146,7 +146,7 @@ android:layout_height="wrap_content"> + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="2dp"> @@ -19,12 +19,10 @@ tools:ignore="UnusedAttribute,UselessParent"> + android:scaleType="centerCrop" /> + android:paddingRight="16dp"> + android:visibility="gone" /> diff --git a/app/src/main/res/layout/item_grid_artist_album.xml b/app/src/main/res/layout/item_grid_card.xml similarity index 88% rename from app/src/main/res/layout/item_grid_artist_album.xml rename to app/src/main/res/layout/item_grid_card.xml index aee20767..2c60efd8 100644 --- a/app/src/main/res/layout/item_grid_artist_album.xml +++ b/app/src/main/res/layout/item_grid_card.xml @@ -15,11 +15,10 @@ android:orientation="vertical"> - + + + + + + + diff --git a/app/src/main/res/layout/item_list_artist.xml b/app/src/main/res/layout/item_list_artist.xml deleted file mode 100644 index a7cb5488..00000000 --- a/app/src/main/res/layout/item_list_artist.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_list_artist_song.xml b/app/src/main/res/layout/item_list_artist_song.xml deleted file mode 100644 index 2fd59587..00000000 --- a/app/src/main/res/layout/item_list_artist_song.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_list_playlist.xml b/app/src/main/res/layout/item_list_playlist.xml deleted file mode 100644 index ca772300..00000000 --- a/app/src/main/res/layout/item_list_playlist.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_list_playlist_song.xml b/app/src/main/res/layout/item_list_playlist_song.xml deleted file mode 100644 index abe4d0ef..00000000 --- a/app/src/main/res/layout/item_list_playlist_song.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_list_album_song.xml b/app/src/main/res/layout/item_list_single_row.xml similarity index 55% rename from app/src/main/res/layout/item_list_album_song.xml rename to app/src/main/res/layout/item_list_single_row.xml index 1f91dd44..2849e64f 100644 --- a/app/src/main/res/layout/item_list_album_song.xml +++ b/app/src/main/res/layout/item_list_single_row.xml @@ -2,11 +2,11 @@ - + + + + + + + + - - - - - - - + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_list_smart_playlist.xml b/app/src/main/res/layout/item_list_smart_playlist.xml deleted file mode 100644 index d6c74398..00000000 --- a/app/src/main/res/layout/item_list_smart_playlist.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_search_album.xml b/app/src/main/res/layout/item_search_album.xml deleted file mode 100644 index d297c2d1..00000000 --- a/app/src/main/res/layout/item_search_album.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_search_artist.xml b/app/src/main/res/layout/item_search_artist.xml deleted file mode 100644 index 84dc26f2..00000000 --- a/app/src/main/res/layout/item_search_artist.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_search_song.xml b/app/src/main/res/layout/item_search_song.xml deleted file mode 100644 index 7916307b..00000000 --- a/app/src/main/res/layout/item_search_song.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/navigation_drawer_header.xml b/app/src/main/res/layout/navigation_drawer_header.xml index d26baf49..70f06fbb 100644 --- a/app/src/main/res/layout/navigation_drawer_header.xml +++ b/app/src/main/res/layout/navigation_drawer_header.xml @@ -1,19 +1,18 @@ - diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 41d947c8..826cc3de 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -9,7 +9,8 @@ 56dp 72dp - 2dp + 4dp + 2dp 360dp 20dp @@ -63,4 +64,7 @@ http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout 0dp 2dp + + 8dp + diff --git a/app/src/main/res/values/values.xml b/app/src/main/res/values/values.xml index 928d467c..e43e719e 100644 --- a/app/src/main/res/values/values.xml +++ b/app/src/main/res/values/values.xml @@ -1,7 +1,6 @@ - album_cover_transition - fab_transition - album_text_transition + album_art_transition artist_image_transition + fab_transition \ No newline at end of file