diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java index 73b8af88..0d01a798 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java @@ -29,10 +29,6 @@ public abstract class AbsMultiSelectAdapter objects) { 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 63f9752b..0e151b4e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java @@ -25,10 +25,10 @@ import com.kabouzeid.gramophone.loader.PlaylistSongLoader; import com.kabouzeid.gramophone.model.DataBaseChangedEvent; import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.model.Song; +import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist; 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.model.smartplaylist.SmartPlaylist; import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; import com.kabouzeid.gramophone.util.NavigationUtil; import com.squareup.otto.Subscribe; @@ -56,6 +56,12 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter getSongList(List playlists) { final ArrayList songs = new ArrayList<>(); for (Playlist playlist : playlists) { - if (playlist instanceof SmartPlaylist) { - songs.addAll(((SmartPlaylist) playlist).getSongs(activity)); + if (playlist instanceof AbsSmartPlaylist) { + songs.addAll(((AbsSmartPlaylist) playlist).getSongs(activity)); } else { songs.addAll(PlaylistSongLoader.getPlaylistSongList(activity, playlist.id)); } @@ -166,8 +172,8 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter extends AbsMultiSelectAdapter implements PlaylistSongViewHolder.onViewHolderClickListener, PlaylistSongViewHolder.onViewHolderLongClickListener, PlaylistSongViewHolder.onViewHolderMenuItemClickListener { +public abstract class AbsPlaylistSongAdapter extends AbsMultiSelectAdapter { + public static final String TAG = AbsPlaylistSongAdapter.class.getSimpleName(); - public static final String TAG = AlbumSongAdapter.class.getSimpleName(); - protected final AppCompatActivity activity; - protected ArrayList dataSet; - - public AbsPlaylistSongAdapter(AppCompatActivity activity, ArrayList objects, @Nullable CabHolder cabHolder) { - super(activity, cabHolder, R.menu.menu_playlists_songs_selection); - setMultiSelectMenuRes(getMultiSelectMenuRes()); - this.activity = activity; - dataSet = objects; + public AbsPlaylistSongAdapter(Context context, @Nullable CabHolder cabHolder, int menuRes) { + super(context, cabHolder, menuRes); } - public void updateDataSet(ArrayList objects) { - dataSet = objects; - notifyDataSetChanged(); - } + public abstract ArrayList getDataSet(); - public ArrayList getDataSet(){ - return dataSet; - } - - protected int getMultiSelectMenuRes() { - return R.menu.menu_playlists_songs_selection; - } - - protected int getSongMenuRes() { - return R.menu.menu_item_playlist_song; - } - - @Override - public PlaylistSongViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = LayoutInflater.from(activity).inflate(R.layout.item_list_song, parent, false); - return new PlaylistSongViewHolder(this, view, getSongMenuRes()); - } - - @Override - public void onBindViewHolder(final PlaylistSongViewHolder holder, int position) { - final S song = dataSet.get(position); - - holder.view.setActivated(isChecked(song)); - holder.songTitle.setText(song.title); - holder.songInfo.setText(song.artistName); - ImageLoader.getInstance().displayImage( - MusicUtil.getAlbumArtUri(song.albumId).toString(), - holder.albumArt, - new DisplayImageOptions.Builder() - .cacheInMemory(true) - .showImageOnFail(R.drawable.default_album_art) - .resetViewBeforeLoading(true) - .build() - ); - } - - @Override - public int getItemCount() { - return dataSet.size(); - } - - @Override - protected S getIdentifier(int position) { - return dataSet.get(position); - } - - @Override - protected void onMultipleItemAction(MenuItem menuItem, ArrayList selection) { - switch (menuItem.getItemId()) { - case R.id.action_delete_from_playlist: - onDeleteFromPlaylist(selection); - break; - case R.id.action_add_to_playlist: - onAddToPlaylist(selection); - break; - case R.id.action_add_to_current_playing: - onAddToCurrentPlaying(selection); - break; - } - } - - @Override - public void onClick(View v, int adapterPosition) { - if (isInQuickSelectMode()) { - toggleChecked(adapterPosition); - } else { - //noinspection unchecked - MusicPlayerRemote.openQueue((ArrayList) (List) dataSet, adapterPosition, true); - } - } - - @Override - public boolean onLongClick(View v, int adapterPosition) { - toggleChecked(adapterPosition); - return true; - } - - @Override - public boolean onMenuItemClick(MenuItem item, PlaylistSongViewHolder viewHolder, int adapterPosition) { - switch (item.getItemId()) { - case R.id.action_delete_from_playlist: - onDeleteFromPlaylist(dataSet.get(adapterPosition)); - return true; - case R.id.action_go_to_album: - Pair[] albumPairs = new Pair[]{ - Pair.create(viewHolder.albumArt, activity.getString(R.string.transition_album_cover)) - }; - if (activity instanceof AbsFabActivity) - albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs); - NavigationUtil.goToAlbum(activity, dataSet.get(adapterPosition).albumId, albumPairs); - return true; - } - return MenuItemClickHelper.handleSongMenuClick(activity, dataSet.get(adapterPosition), item); - } - - protected abstract void onDeleteFromPlaylist(S song); - - protected abstract void onDeleteFromPlaylist(ArrayList songs); - - protected void onAddToPlaylist(ArrayList songs) { - //noinspection unchecked - AddToPlaylistDialog.create((ArrayList) (List) songs).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); - } - - protected void onAddToCurrentPlaying(ArrayList songs) { - //noinspection unchecked - MusicPlayerRemote.enqueue((ArrayList) (List) songs); - } + public abstract void updateDataSet(); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/AlbumSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/AlbumSongAdapter.java index 97b094f6..b10ac7d9 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/AlbumSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/AlbumSongAdapter.java @@ -36,6 +36,12 @@ public class AlbumSongAdapter extends AbsMultiSelectAdapter objects){ diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java index 3a447e58..5ebd0ef8 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java @@ -1,30 +1,190 @@ package com.kabouzeid.gramophone.adapter.songadapter; import android.support.annotation.Nullable; +import android.support.v4.util.Pair; import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.PopupMenu; +import android.widget.TextView; +import com.kabouzeid.gramophone.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.interfaces.CabHolder; +import com.kabouzeid.gramophone.loader.PlaylistSongLoader; +import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.model.PlaylistSong; +import com.kabouzeid.gramophone.model.Song; +import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; +import com.kabouzeid.gramophone.util.MusicUtil; +import com.kabouzeid.gramophone.util.NavigationUtil; +import com.kabouzeid.gramophone.util.PlaylistsUtil; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; import java.util.ArrayList; +import java.util.List; + /** * @author Karim Abou Zeid (kabouzeid) */ -public class PlaylistSongAdapter extends AbsPlaylistSongAdapter { +public class PlaylistSongAdapter extends AbsPlaylistSongAdapter { - public PlaylistSongAdapter(AppCompatActivity activity, ArrayList objects, @Nullable CabHolder cabHolder) { - super(activity, objects, cabHolder); + public static final String TAG = PlaylistSongAdapter.class.getSimpleName(); + protected final AppCompatActivity activity; + protected ArrayList dataSet; + private Playlist playlist; + + public PlaylistSongAdapter(AppCompatActivity activity, Playlist playlist, @Nullable CabHolder cabHolder) { + super(activity, cabHolder, R.menu.menu_playlists_songs_selection); + this.activity = activity; + this.playlist = playlist; + dataSet = PlaylistSongLoader.getPlaylistSongList(activity, playlist.id); + setHasStableIds(true); } @Override - protected void onDeleteFromPlaylist(ArrayList songs) { - RemoveFromPlaylistDialog.create(songs).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); + public long getItemId(int position) { + return dataSet.get(position).id; } @Override - protected void onDeleteFromPlaylist(PlaylistSong song) { - RemoveFromPlaylistDialog.create(song).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); + public void updateDataSet() { + dataSet = PlaylistSongLoader.getPlaylistSongList(activity, playlist.id); + notifyDataSetChanged(); + } + + @Override + public ArrayList getDataSet() { + return dataSet; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(activity).inflate(R.layout.item_list_song, parent, false); + return new ViewHolder(view, R.menu.menu_item_playlist_song); + } + + @Override + public void onBindViewHolder(final ViewHolder holder, int position) { + final PlaylistSong song = dataSet.get(position); + + holder.itemView.setActivated(isChecked(song)); + holder.songTitle.setText(song.title); + holder.songInfo.setText(song.artistName); + ImageLoader.getInstance().displayImage( + MusicUtil.getAlbumArtUri(song.albumId).toString(), + holder.albumArt, + new DisplayImageOptions.Builder() + .cacheInMemory(true) + .showImageOnFail(R.drawable.default_album_art) + .resetViewBeforeLoading(true) + .build() + ); + } + + @Override + public int getItemCount() { + return dataSet.size(); + } + + @Override + protected PlaylistSong getIdentifier(int position) { + return dataSet.get(position); + } + + @Override + protected void onMultipleItemAction(MenuItem menuItem, ArrayList selection) { + switch (menuItem.getItemId()) { + case R.id.action_delete_from_playlist: + RemoveFromPlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); + break; + case R.id.action_add_to_playlist: + //noinspection unchecked + AddToPlaylistDialog.create((ArrayList) (List) selection).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); + break; + case R.id.action_add_to_current_playing: + //noinspection unchecked + MusicPlayerRemote.enqueue((ArrayList) (List) selection); + break; + } + } + + public void moveItem(int from, int to) { + if (from == to) return; + + if (PlaylistsUtil.moveItem(activity, playlist.id, from, to)) { + PlaylistSong song = dataSet.remove(from); + dataSet.add(to, song); + notifyItemMoved(from, to); + } + } + + public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { + final TextView songTitle; + final TextView songInfo; + final ImageView overflowButton; + final ImageView albumArt; + + public ViewHolder(View itemView, final int songMenu) { + super(itemView); + songTitle = (TextView) itemView.findViewById(R.id.song_title); + songInfo = (TextView) itemView.findViewById(R.id.song_info); + albumArt = (ImageView) itemView.findViewById(R.id.album_art); + itemView.setOnClickListener(this); + itemView.setOnLongClickListener(this); + overflowButton = (ImageView) itemView.findViewById(R.id.menu); + overflowButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PopupMenu popupMenu = new PopupMenu(activity, v); + popupMenu.inflate(songMenu); + popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(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(); + } + }); + } + + @Override + public void onClick(View v) { + if (isInQuickSelectMode()) { + toggleChecked(getAdapterPosition()); + } else { + //noinspection unchecked + MusicPlayerRemote.openQueue((ArrayList) (List) dataSet, getAdapterPosition(), true); + } + } + + @Override + public boolean onLongClick(View v) { + toggleChecked(getAdapterPosition()); + return true; + } } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongViewHolder.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongViewHolder.java deleted file mode 100644 index eaa8e82b..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongViewHolder.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.kabouzeid.gramophone.adapter.songadapter; - -import android.support.v7.widget.RecyclerView; -import android.view.MenuItem; -import android.view.View; -import android.widget.ImageView; -import android.widget.PopupMenu; -import android.widget.TextView; - -import com.kabouzeid.gramophone.R; - -/** - * @author Karim Abou Zeid (kabouzeid) - */ -public class PlaylistSongViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { - final TextView songTitle; - final TextView songInfo; - final ImageView overflowButton; - final ImageView albumArt; - final View view; - - final AbsPlaylistSongAdapter adapter; - - public PlaylistSongViewHolder(final AbsPlaylistSongAdapter adapter, View itemView, final int songMenu) { - super(itemView); - this.adapter = adapter; - view = itemView; - songTitle = (TextView) itemView.findViewById(R.id.song_title); - songInfo = (TextView) itemView.findViewById(R.id.song_info); - albumArt = (ImageView) itemView.findViewById(R.id.album_art); - view.setOnClickListener(this); - view.setOnLongClickListener(this); - overflowButton = (ImageView) itemView.findViewById(R.id.menu); - overflowButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - PopupMenu popupMenu = new PopupMenu(adapter.activity, v); - popupMenu.inflate(songMenu); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - return adapter.onMenuItemClick(item, PlaylistSongViewHolder.this, getAdapterPosition()); - } - }); - popupMenu.show(); - } - }); - } - - @Override - public void onClick(View v) { - adapter.onClick(v, getAdapterPosition()); - } - - @Override - public boolean onLongClick(View v) { - return adapter.onLongClick(v, getAdapterPosition()); - } - - protected interface onViewHolderMenuItemClickListener { - boolean onMenuItemClick(MenuItem item, PlaylistSongViewHolder viewHolder, int adapterPosition); - } - - protected interface onViewHolderClickListener { - void onClick(View v, int adapterPosition); - } - - protected interface onViewHolderLongClickListener { - boolean onLongClick(View v, int adapterPosition); - } -} diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java index 63cb018a..13909b18 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java @@ -50,6 +50,12 @@ public class SongAdapter extends AbsMultiSelectAdapter songs) { - // you cannot delete single songs from this playlist - } -} diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/smartplaylist/SmartPlaylistSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/smartplaylist/SmartPlaylistSongAdapter.java index 93b22ef7..5658188e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/smartplaylist/SmartPlaylistSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/smartplaylist/SmartPlaylistSongAdapter.java @@ -1,26 +1,176 @@ package com.kabouzeid.gramophone.adapter.songadapter.smartplaylist; import android.support.annotation.Nullable; +import android.support.v4.util.Pair; import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.PopupMenu; +import android.widget.TextView; +import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.songadapter.AbsPlaylistSongAdapter; +import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; +import com.kabouzeid.gramophone.helper.MenuItemClickHelper; +import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.model.smartplaylist.SmartPlaylist; +import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist; +import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; +import com.kabouzeid.gramophone.util.MusicUtil; +import com.kabouzeid.gramophone.util.NavigationUtil; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.List; /** * @author Karim Abou Zeid (kabouzeid) */ -public abstract class SmartPlaylistSongAdapter extends AbsPlaylistSongAdapter { - private SmartPlaylist playlist; +public class SmartPlaylistSongAdapter extends AbsPlaylistSongAdapter { - public SmartPlaylistSongAdapter(AppCompatActivity activity, SmartPlaylist playlist, @Nullable CabHolder cabHolder) { - super(activity, playlist.getSongs(activity), cabHolder); - this.playlist = playlist; - } + public static final String TAG = SmartPlaylistSongAdapter.class.getSimpleName(); + protected final AppCompatActivity activity; + private AbsSmartPlaylist playlist; + protected ArrayList dataSet; + @Override public void updateDataSet() { - updateDataSet(playlist.getSongs(activity)); + dataSet = playlist.getSongs(activity); + notifyDataSetChanged(); + setHasStableIds(true); } -} + @Override + public long getItemId(int position) { + return dataSet.get(position).id; + } + + public SmartPlaylistSongAdapter(AppCompatActivity activity, AbsSmartPlaylist playlist, @Nullable CabHolder cabHolder) { + super(activity, cabHolder, R.menu.menu_cannot_delete_single_songs_playlist_songs_selection); + this.activity = activity; + this.playlist = playlist; + dataSet = playlist.getSongs(activity); + } + + @Override + public ArrayList getDataSet() { + return dataSet; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(activity).inflate(R.layout.item_list_song, parent, false); + return new ViewHolder(view, R.menu.menu_item_cannot_delete_single_songs_playlist_song); + } + + @Override + public void onBindViewHolder(final ViewHolder holder, int position) { + final Song song = dataSet.get(position); + + holder.itemView.setActivated(isChecked(song)); + holder.songTitle.setText(song.title); + holder.songInfo.setText(song.artistName); + ImageLoader.getInstance().displayImage( + MusicUtil.getAlbumArtUri(song.albumId).toString(), + holder.albumArt, + new DisplayImageOptions.Builder() + .cacheInMemory(true) + .showImageOnFail(R.drawable.default_album_art) + .resetViewBeforeLoading(true) + .build() + ); + } + + @Override + public int getItemCount() { + return dataSet.size(); + } + + @Override + protected Song getIdentifier(int position) { + return dataSet.get(position); + } + + @Override + protected void onMultipleItemAction(MenuItem menuItem, ArrayList selection) { + switch (menuItem.getItemId()) { + case R.id.action_add_to_playlist: + onAddToPlaylist(selection); + break; + case R.id.action_add_to_current_playing: + onAddToCurrentPlaying(selection); + break; + } + } + + protected void onAddToPlaylist(ArrayList songs) { + AddToPlaylistDialog.create(songs).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); + } + + protected void onAddToCurrentPlaying(ArrayList songs) { + MusicPlayerRemote.enqueue(songs); + } + + public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { + final TextView songTitle; + final TextView songInfo; + final ImageView overflowButton; + final ImageView albumArt; + + public ViewHolder(View itemView, final int songMenu) { + super(itemView); + songTitle = (TextView) itemView.findViewById(R.id.song_title); + songInfo = (TextView) itemView.findViewById(R.id.song_info); + albumArt = (ImageView) itemView.findViewById(R.id.album_art); + itemView.setOnClickListener(this); + itemView.setOnLongClickListener(this); + overflowButton = (ImageView) itemView.findViewById(R.id.menu); + overflowButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PopupMenu popupMenu = new PopupMenu(activity, v); + popupMenu.inflate(songMenu); + popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(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(); + } + }); + } + + @Override + public void onClick(View v) { + if (isInQuickSelectMode()) { + toggleChecked(getAdapterPosition()); + } else { + //noinspection unchecked + MusicPlayerRemote.openQueue((ArrayList) (List) dataSet, getAdapterPosition(), true); + } + } + + @Override + public boolean onLongClick(View v) { + toggleChecked(getAdapterPosition()); + return true; + } + } +} \ No newline at end of file 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 30902545..8eb625bb 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appwidget/WidgetMedium.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appwidget/WidgetMedium.java @@ -105,6 +105,7 @@ public class WidgetMedium extends AppWidgetProvider { private static void linkButtons(final Context context, final RemoteViews views) { views.setOnClickPendingIntent(R.id.album_art, 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)); views.setOnClickPendingIntent(R.id.button_prev, retrievePlaybackActions(context, 3)); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java index 0a5adfc1..c6615dac 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java @@ -8,14 +8,14 @@ import android.text.Html; import com.afollestad.materialdialogs.MaterialDialog; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.model.smartplaylist.SmartPlaylist; +import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist; /** * @author Karim Abou Zeid (kabouzeid) */ public class ClearSmartPlaylistDialog extends DialogFragment { - public static ClearSmartPlaylistDialog create(SmartPlaylist playlist) { + public static ClearSmartPlaylistDialog create(AbsSmartPlaylist playlist) { ClearSmartPlaylistDialog dialog = new ClearSmartPlaylistDialog(); Bundle args = new Bundle(); args.putSerializable("playlist", playlist); @@ -27,7 +27,7 @@ public class ClearSmartPlaylistDialog extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { //noinspection unchecked - final SmartPlaylist playlist = (SmartPlaylist) getArguments().getSerializable("playlist"); + final AbsSmartPlaylist playlist = (AbsSmartPlaylist) getArguments().getSerializable("playlist"); int title = R.string.clear_playlist_title; //noinspection ConstantConditions CharSequence content = Html.fromHtml(getString(R.string.clear_playlist_x, playlist.name)); diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/MenuItemClickHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/MenuItemClickHelper.java index b1b75e78..a93eb0c0 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/MenuItemClickHelper.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/MenuItemClickHelper.java @@ -17,7 +17,7 @@ import com.kabouzeid.gramophone.loader.PlaylistSongLoader; import com.kabouzeid.gramophone.loader.SongFilePathLoader; import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.model.smartplaylist.SmartPlaylist; +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; @@ -99,8 +99,8 @@ public class MenuItemClickHelper { } private static ArrayList getPlaylistSongs(Activity activity, Playlist playlist) { - return playlist instanceof SmartPlaylist ? - ((SmartPlaylist) playlist).getSongs(activity) : + return playlist instanceof AbsSmartPlaylist ? + ((AbsSmartPlaylist) playlist).getSongs(activity) : PlaylistSongLoader.getPlaylistSongList(activity, playlist.id); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/SmartPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/AbsSmartPlaylist.java similarity index 77% rename from app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/SmartPlaylist.java rename to app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/AbsSmartPlaylist.java index a1cce483..6984fd88 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/SmartPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/AbsSmartPlaylist.java @@ -16,25 +16,27 @@ import java.util.ArrayList; /** * @author Karim Abou Zeid (kabouzeid) */ -public abstract class SmartPlaylist extends Playlist { +public abstract class AbsSmartPlaylist extends Playlist { private static final long serialVersionUID = 3013701295356403681L; @DrawableRes public final int iconRes; - public SmartPlaylist(final String name, final int iconRes) { + public AbsSmartPlaylist(final String name, final int iconRes) { super(-1, name); this.iconRes = iconRes; } - public SmartPlaylist() { + public AbsSmartPlaylist() { super(); this.iconRes = R.drawable.ic_queue_music_white_24dp; } - public abstract ArrayList getSongs(Context context); + public SmartPlaylistSongAdapter createAdapter(AppCompatActivity activity, @Nullable CabHolder cabHolder) { + return new SmartPlaylistSongAdapter(activity, this, cabHolder); + } - public abstract SmartPlaylistSongAdapter createAdapter(AppCompatActivity activity, @Nullable CabHolder cabHolder); + public abstract ArrayList getSongs(Context context); public abstract void clear(Context context); @@ -52,7 +54,7 @@ public abstract class SmartPlaylist extends Playlist { if (getClass() != obj.getClass()) { return false; } - final SmartPlaylist other = (SmartPlaylist) obj; + final AbsSmartPlaylist other = (AbsSmartPlaylist) obj; return iconRes == other.iconRes; } return false; diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java index cf51ed53..6cadfe2a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java @@ -1,14 +1,9 @@ package com.kabouzeid.gramophone.model.smartplaylist; import android.content.Context; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.adapter.songadapter.smartplaylist.CannotDeleteSingleSongsSongAdapter; -import com.kabouzeid.gramophone.adapter.songadapter.smartplaylist.SmartPlaylistSongAdapter; -import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.loader.LastAddedLoader; import com.kabouzeid.gramophone.model.DataBaseChangedEvent; import com.kabouzeid.gramophone.model.Song; @@ -19,7 +14,7 @@ import java.util.ArrayList; /** * @author Karim Abou Zeid (kabouzeid) */ -public class LastAddedPlaylist extends SmartPlaylist { +public class LastAddedPlaylist extends AbsSmartPlaylist { public LastAddedPlaylist(Context context) { super(context.getString(R.string.last_added), R.drawable.ic_queue_white_24dp); @@ -30,11 +25,6 @@ public class LastAddedPlaylist extends SmartPlaylist { return LastAddedLoader.getLastAddedSongs(context); } - @Override - public SmartPlaylistSongAdapter createAdapter(AppCompatActivity activity, @Nullable CabHolder cabHolder) { - return new CannotDeleteSingleSongsSongAdapter(activity, this, cabHolder); - } - @Override public void clear(Context context) { PreferenceUtils.getInstance(context).setLastAddedCutoffTimestamp(System.currentTimeMillis()); diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/MyTopTracksPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/MyTopTracksPlaylist.java index 86a770b9..11433fc6 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/MyTopTracksPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/MyTopTracksPlaylist.java @@ -1,14 +1,9 @@ package com.kabouzeid.gramophone.model.smartplaylist; import android.content.Context; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.adapter.songadapter.smartplaylist.CannotDeleteSingleSongsSongAdapter; -import com.kabouzeid.gramophone.adapter.songadapter.smartplaylist.SmartPlaylistSongAdapter; -import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.loader.TopAndRecentlyPlayedTracksLoader; import com.kabouzeid.gramophone.model.DataBaseChangedEvent; import com.kabouzeid.gramophone.model.Song; @@ -19,7 +14,7 @@ import java.util.ArrayList; /** * @author Karim Abou Zeid (kabouzeid) */ -public class MyTopTracksPlaylist extends SmartPlaylist { +public class MyTopTracksPlaylist extends AbsSmartPlaylist { public MyTopTracksPlaylist(Context context) { super(context.getString(R.string.my_top_tracks), R.drawable.ic_trending_up_white_24dp); @@ -30,14 +25,9 @@ public class MyTopTracksPlaylist extends SmartPlaylist { return TopAndRecentlyPlayedTracksLoader.getTopTracks(context); } - @Override - public SmartPlaylistSongAdapter createAdapter(AppCompatActivity activity, @Nullable CabHolder cabHolder) { - return new CannotDeleteSingleSongsSongAdapter(activity, this, cabHolder); - } - @Override public void clear(Context context) { SongPlayCountStore.getInstance(context).clear(); App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED)); } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/RecentlyPlayedPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/RecentlyPlayedPlaylist.java index 1b59cdb1..46a48d21 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/RecentlyPlayedPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/RecentlyPlayedPlaylist.java @@ -1,14 +1,9 @@ package com.kabouzeid.gramophone.model.smartplaylist; import android.content.Context; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.adapter.songadapter.smartplaylist.CannotDeleteSingleSongsSongAdapter; -import com.kabouzeid.gramophone.adapter.songadapter.smartplaylist.SmartPlaylistSongAdapter; -import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.loader.TopAndRecentlyPlayedTracksLoader; import com.kabouzeid.gramophone.model.DataBaseChangedEvent; import com.kabouzeid.gramophone.model.Song; @@ -19,7 +14,7 @@ import java.util.ArrayList; /** * @author Karim Abou Zeid (kabouzeid) */ -public class RecentlyPlayedPlaylist extends SmartPlaylist { +public class RecentlyPlayedPlaylist extends AbsSmartPlaylist { public RecentlyPlayedPlaylist(Context context) { super(context.getString(R.string.recently_played), R.drawable.ic_access_time_white_24dp); @@ -30,11 +25,6 @@ public class RecentlyPlayedPlaylist extends SmartPlaylist { return TopAndRecentlyPlayedTracksLoader.getRecentlyPlayedTracks(context); } - @Override - public SmartPlaylistSongAdapter createAdapter(AppCompatActivity activity, @Nullable CabHolder cabHolder) { - return new CannotDeleteSingleSongsSongAdapter(activity, this, cabHolder); - } - @Override public void clear(Context context) { RecentlyPlayedStore.getInstance(context).clear(); 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 d83d0191..15d71f22 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 @@ -68,7 +68,6 @@ import butterknife.InjectView; public class MusicControllerActivity extends AbsFabActivity { public static final String TAG = MusicControllerActivity.class.getSimpleName(); - private static final int COLOR_TRANSITION_TIME = 400; private static final int FAB_CIRCULAR_REVEAL_ANIMATION_TIME = 1000; private static final int PROGRESS_VIEW_UPDATE_INTERVAL = 100; @@ -488,10 +487,10 @@ public class MusicControllerActivity extends AbsFabActivity { private void animateColorChange(final int newColor) { if (lastFooterColor != -1 && lastFooterColor != newColor) { - ViewUtil.animateViewColor(footer, lastFooterColor, newColor, COLOR_TRANSITION_TIME); + ViewUtil.animateViewColor(footer, lastFooterColor, newColor); if (opaqueToolBar) - ViewUtil.animateViewColor(toolbar, lastFooterColor, newColor, COLOR_TRANSITION_TIME); + ViewUtil.animateViewColor(toolbar, lastFooterColor, newColor); else toolbar.setBackgroundColor(Color.TRANSPARENT); } else { footer.setBackgroundColor(newColor); @@ -511,8 +510,8 @@ public class MusicControllerActivity extends AbsFabActivity { private void animateTextColorChange(final int newColor) { if (lastTextColor != -2 && lastTextColor != newColor) { - ViewUtil.animateTextColor(songTitle, lastTextColor, newColor, COLOR_TRANSITION_TIME); - ViewUtil.animateTextColor(songArtist, lastTextColor, newColor, COLOR_TRANSITION_TIME); + ViewUtil.animateTextColor(songTitle, lastTextColor, newColor); + ViewUtil.animateTextColor(songArtist, lastTextColor, newColor); } else { songTitle.setTextColor(newColor); songArtist.setTextColor(newColor); 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 d0e01932..b99371f1 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 @@ -14,23 +14,17 @@ 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.songadapter.smartplaylist.SmartPlaylistSongAdapter; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.interfaces.CabHolder; -import com.kabouzeid.gramophone.loader.PlaylistSongLoader; import com.kabouzeid.gramophone.misc.DragSortRecycler; import com.kabouzeid.gramophone.model.DataBaseChangedEvent; import com.kabouzeid.gramophone.model.Playlist; -import com.kabouzeid.gramophone.model.PlaylistSong; -import com.kabouzeid.gramophone.model.smartplaylist.SmartPlaylist; +import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist; import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; import com.kabouzeid.gramophone.util.NavigationUtil; -import com.kabouzeid.gramophone.util.PlaylistsUtil; import com.kabouzeid.gramophone.util.PreferenceUtils; import com.squareup.otto.Subscribe; -import java.util.ArrayList; - import butterknife.ButterKnife; import butterknife.InjectView; @@ -50,7 +44,6 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder private Playlist playlist; private MaterialCab cab; private AbsPlaylistSongAdapter adapter; - private ArrayList songs; @Override protected void onCreate(Bundle savedInstanceState) { @@ -75,27 +68,24 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder private void setUpRecyclerView() { recyclerView.setLayoutManager(new GridLayoutManager(this, 1)); - if (playlist instanceof SmartPlaylist) { - adapter = ((SmartPlaylist) playlist).createAdapter(this, this); + if (playlist instanceof AbsSmartPlaylist) { + adapter = ((AbsSmartPlaylist) playlist).createAdapter(this, this); } else { - songs = PlaylistSongLoader.getPlaylistSongList(this, playlist.id); - adapter = new PlaylistSongAdapter(this, songs, this); + adapter = new PlaylistSongAdapter(this, playlist, this); DragSortRecycler dragSortRecycler = new DragSortRecycler(); dragSortRecycler.setViewHandleId(R.id.album_art); dragSortRecycler.setOnItemMovedListener(new DragSortRecycler.OnItemMovedListener() { @Override public void onItemMoved(int from, int to) { - PlaylistSong song = songs.remove(from); - songs.add(to, song); - adapter.notifyDataSetChanged(); - PlaylistsUtil.moveItem(PlaylistDetailActivity.this, playlist.id, from, to); + ((PlaylistSongAdapter) adapter).moveItem(from, to); } }); recyclerView.addItemDecoration(dragSortRecycler); recyclerView.addOnItemTouchListener(dragSortRecycler); recyclerView.addOnScrollListener(dragSortRecycler.getScrollListener()); + recyclerView.setItemAnimator(null); } recyclerView.setAdapter(adapter); } @@ -175,13 +165,7 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder switch (event.getAction()) { case DataBaseChangedEvent.PLAYLISTS_CHANGED: case DataBaseChangedEvent.DATABASE_CHANGED: - if (adapter instanceof SmartPlaylistSongAdapter) { - ((SmartPlaylistSongAdapter) adapter).updateDataSet(); - } else { - songs = PlaylistSongLoader.getPlaylistSongList(this, playlist.id); - //noinspection unchecked - adapter.updateDataSet(songs); - } + adapter.updateDataSet(); checkIsEmpty(); break; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java index 49f07bab..ef91ec11 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java @@ -195,8 +195,8 @@ public class PlaylistsUtil { // return 0; // } - public static void moveItem(final Context context, int playlistId, int from, int to) { - MediaStore.Audio.Playlists.Members.moveItem(context.getContentResolver(), + public static boolean moveItem(final Context context, int playlistId, int from, int to) { + return MediaStore.Audio.Playlists.Members.moveItem(context.getContentResolver(), playlistId, from, to); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java index fc7cd40c..8ecc296f 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java @@ -20,13 +20,11 @@ import com.afollestad.materialdialogs.internal.MDTintHelper; import java.lang.reflect.Field; -import hugo.weaving.DebugLog; - /** * @author Karim Abou Zeid (kabouzeid) */ public class ViewUtil { - public final static int DEFAULT_COLOR_ANIMATION_DURATION = 1000; + public final static int DEFAULT_COLOR_ANIMATION_DURATION = 500; public static void disableViews(ViewGroup layout) { for (int i = 0; i < layout.getChildCount(); i++) { @@ -87,7 +85,6 @@ public class ViewUtil { animator.start(); } - @DebugLog public static void animateTextColor(final TextView v, final int startColor, final int endColor) { animateTextColor(v, startColor, endColor, DEFAULT_COLOR_ANIMATION_DURATION); } diff --git a/app/src/main/res/drawable-hdpi/default_album_art.png b/app/src/main/res/drawable-hdpi/default_album_art.png deleted file mode 100644 index 5b82f3d7..00000000 Binary files a/app/src/main/res/drawable-hdpi/default_album_art.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/default_album_art.png b/app/src/main/res/drawable-mdpi/default_album_art.png deleted file mode 100644 index 577a955c..00000000 Binary files a/app/src/main/res/drawable-mdpi/default_album_art.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/default_album_art.png b/app/src/main/res/drawable-xhdpi/default_album_art.png deleted file mode 100644 index 60f3f12f..00000000 Binary files a/app/src/main/res/drawable-xhdpi/default_album_art.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/default_album_art.png b/app/src/main/res/drawable-xxhdpi/default_album_art.png deleted file mode 100644 index 00241b71..00000000 Binary files a/app/src/main/res/drawable-xxhdpi/default_album_art.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/default_album_art.png b/app/src/main/res/drawable-xxxhdpi/default_album_art.png index 442f9133..9f6c170c 100644 Binary files a/app/src/main/res/drawable-xxxhdpi/default_album_art.png and b/app/src/main/res/drawable-xxxhdpi/default_album_art.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/default_album_art_dark.png b/app/src/main/res/drawable-xxxhdpi/default_album_art_dark.png new file mode 100644 index 00000000..1119de70 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/default_album_art_dark.png differ diff --git a/app/src/main/res/xml/widget_medium_info.xml b/app/src/main/res/xml/widget_medium_info.xml index b587b60e..b260851e 100644 --- a/app/src/main/res/xml/widget_medium_info.xml +++ b/app/src/main/res/xml/widget_medium_info.xml @@ -4,7 +4,7 @@ android:initialLayout="@layout/widget_medium" android:minHeight="40dp" android:minWidth="250dp" - android:resizeMode="none" + android:resizeMode="horizontal" android:updatePeriodMillis="0" android:widgetCategory="home_screen|keyguard" tools:ignore="UnusedAttribute" /> \ No newline at end of file