From ef48e9305ba1486e8d4c0fb8c383e0676d6efe3a Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Sat, 14 Mar 2015 21:10:07 +0100 Subject: [PATCH] New artist details activity [biography missing yet] --- app/build.gradle | 11 +- .../gramophone/adapter/AlbumAdapter.java | 2 +- .../gramophone/adapter/ArtistAdapter.java | 98 +++++ .../adapter/ArtistAlbumAdapter.java | 105 +++++ .../adapter/ArtistViewListAdapter.java | 58 --- .../adapter/songadapter/AlbumSongAdapter.java | 2 +- .../songadapter/ArtistSongAdapter.java | 100 +++++ .../adapter/songadapter/SongAdapter.java | 2 +- .../ui/activities/AlbumDetailActivity.java | 9 +- .../ui/activities/ArtistDetailActivity.java | 394 +++++------------- .../AlbumViewFragment.java | 5 +- .../ArtistViewFragment.java | 64 +-- .../SongViewFragment.java | 2 +- .../main/res/layout/activity_album_detail.xml | 2 +- .../res/layout/activity_artist_detail.xml | 57 +-- app/src/main/res/layout/album_tile.xml | 17 +- .../main/res/layout/artist_detail_header.xml | 33 ++ ..._albumview.xml => fragment_album_view.xml} | 2 +- .../main/res/layout/fragment_artist_view.xml | 12 +- app/src/main/res/layout/fragment_songview.xml | 2 +- app/src/main/res/layout/item_artist_album.xml | 61 +++ ...tem_song_view.xml => item_artist_song.xml} | 1 - app/src/main/res/layout/item_artist_view.xml | 1 + app/src/main/res/layout/item_song.xml | 60 +-- app/src/main/res/layout/item_song_album.xml | 52 +++ app/src/main/res/values/dimens.xml | 2 + 26 files changed, 666 insertions(+), 488 deletions(-) create mode 100644 app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAdapter.java create mode 100644 app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAlbumAdapter.java delete mode 100644 app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistViewListAdapter.java create mode 100644 app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/ArtistSongAdapter.java create mode 100644 app/src/main/res/layout/artist_detail_header.xml rename app/src/main/res/layout/{fragment_albumview.xml => fragment_album_view.xml} (92%) create mode 100644 app/src/main/res/layout/item_artist_album.xml rename app/src/main/res/layout/{item_song_view.xml => item_artist_song.xml} (97%) create mode 100644 app/src/main/res/layout/item_song_album.xml diff --git a/app/build.gradle b/app/build.gradle index 24a65d31..6ccc6967 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -42,11 +42,12 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:21.0.+' - compile 'com.android.support:gridlayout-v7:21.0.+' - compile 'com.android.support:recyclerview-v7:21.0.+' - compile 'com.android.support:palette-v7:21.0.+' - compile 'com.android.support:support-v13:21.0.+' + compile 'com.android.support:appcompat-v7:21.0.0' + compile 'com.android.support:gridlayout-v7:21.0.0' + compile 'com.android.support:recyclerview-v7:21.0.0' + compile 'com.android.support:palette-v7:21.0.0' + compile 'com.android.support:support-v13:21.0.0' + compile 'com.android.support:cardview-v7:21.0.0' compile 'com.nhaarman.listviewanimations:lib-core:3.1.0@aar' compile 'com.nhaarman.listviewanimations:lib-manipulation:3.1.0@aar' compile 'com.nhaarman.listviewanimations:lib-core-slh:3.1.0@aar' 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 6a646b61..34cf76fa 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java @@ -85,7 +85,7 @@ public class AlbumAdapter extends RecyclerView.Adapter public ViewHolder(View itemView) { super(itemView); - image = (SquareImageView) itemView.findViewById(R.id.album_art); + image = (ImageView) itemView.findViewById(R.id.album_art); title = (TextView) itemView.findViewById(R.id.album_title); artist = (TextView) itemView.findViewById(R.id.album_interpret); footer = itemView.findViewById(R.id.footer); diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAdapter.java new file mode 100644 index 00000000..eca2fdc2 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAdapter.java @@ -0,0 +1,98 @@ +package com.kabouzeid.gramophone.adapter; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.support.v4.util.Pair; +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.helper.MusicPlayerRemote; +import com.kabouzeid.gramophone.helper.SongDetailDialogHelper; +import com.kabouzeid.gramophone.lastfm.artist.LastFMArtistThumbnailUrlLoader; +import com.kabouzeid.gramophone.loader.SongFilePathLoader; +import com.kabouzeid.gramophone.misc.AppKeys; +import com.kabouzeid.gramophone.model.Artist; +import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; +import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity; +import com.kabouzeid.gramophone.util.MusicUtil; +import com.kabouzeid.gramophone.util.NavigationUtil; +import com.squareup.picasso.Picasso; + +import java.io.File; +import java.util.List; + +/** + * Created by karim on 29.12.14. + */ +public class ArtistAdapter extends RecyclerView.Adapter { + protected Activity activity; + protected List dataSet; + + public ArtistAdapter(Activity activity, List objects) { + this.activity = activity; + dataSet = objects; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(activity).inflate(R.layout.item_artist_view, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(final ViewHolder holder, int position) { + final Artist artist = dataSet.get(position); + + holder.artistName.setText(artist.name); + holder.artistInfo.setText(artist.getSubTitle()); + holder.artistImage.setImageResource(R.drawable.default_artist_image); + + LastFMArtistThumbnailUrlLoader.loadArtistThumbnailUrl(activity, artist.name, false, new LastFMArtistThumbnailUrlLoader.ArtistThumbnailUrlLoaderCallback() { + @Override + public void onArtistThumbnailUrlLoaded(String url) { + Picasso.with(activity) + .load(url) + .placeholder(R.drawable.default_artist_image) + .into(holder.artistImage); + } + }); + } + + @Override + public int getItemCount() { + return dataSet.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + TextView artistName; + TextView artistInfo; + ImageView artistImage; + + public ViewHolder(View itemView) { + super(itemView); + artistName = (TextView) itemView.findViewById(R.id.artist_name); + artistInfo = (TextView) itemView.findViewById(R.id.artist_info); + artistImage = (ImageView) itemView.findViewById(R.id.artist_image); + itemView.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + Pair[] artistPairs = new Pair[]{ + Pair.create(artistImage, + activity.getResources().getString(R.string.transition_artist_image) + )}; + if (activity instanceof AbsFabActivity) + artistPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(artistPairs); + NavigationUtil.goToArtist(activity, dataSet.get(getPosition()).id, artistPairs); + } + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAlbumAdapter.java new file mode 100644 index 00000000..3caa0025 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAlbumAdapter.java @@ -0,0 +1,105 @@ +package com.kabouzeid.gramophone.adapter; + +import android.app.Activity; +import android.support.v4.util.Pair; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.model.Album; +import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; +import com.kabouzeid.gramophone.util.MusicUtil; +import com.kabouzeid.gramophone.util.NavigationUtil; +import com.kabouzeid.gramophone.view.SquareImageView; +import com.squareup.picasso.Picasso; + +import java.util.List; + +/** + * Created by karim on 24.11.14. + */ +public class ArtistAlbumAdapter extends RecyclerView.Adapter { + public static final String TAG = AlbumAdapter.class.getSimpleName(); + + private static final int TYPE_FIRST = 1; + private static final int TYPE_MIDDLE = 2; + private static final int TYPE_LAST = 3; + + private Activity activity; + private List dataSet; + private int listMargin; + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(activity).inflate(R.layout.item_artist_album, parent, false); + ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); + if (viewType == TYPE_FIRST) { + params.leftMargin = listMargin; + } else if (viewType == TYPE_LAST) { + params.rightMargin = listMargin; + } + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(final ViewHolder holder, int position) { + final Album album = dataSet.get(position); + + Picasso.with(activity) + .load(MusicUtil.getAlbumArtUri(album.id)) + .placeholder(R.drawable.default_album_art) + .into(holder.image); + + holder.title.setText(album.title); + holder.year.setText(String.valueOf(album.year)); + } + + @Override + public int getItemCount() { + return dataSet.size(); + } + + @Override + public int getItemViewType(int position) { + if (position == 0) { + return TYPE_FIRST; + } else if (position == getItemCount() - 1) { + return TYPE_LAST; + } else return TYPE_MIDDLE; + } + + public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + ImageView image; + TextView title; + TextView year; + + public ViewHolder(View itemView) { + super(itemView); + image = (ImageView) itemView.findViewById(R.id.album_art); + title = (TextView) itemView.findViewById(R.id.album_title); + year = (TextView) itemView.findViewById(R.id.album_year); + itemView.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + Pair[] albumPairs = new Pair[]{ + Pair.create(image, + activity.getResources().getString(R.string.transition_album_cover) + )}; + if (activity instanceof AbsFabActivity) + albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs); + NavigationUtil.goToAlbum(activity, dataSet.get(getPosition()).id, albumPairs); + } + } + + public ArtistAlbumAdapter(Activity activity, List objects) { + this.activity = activity; + dataSet = objects; + listMargin = activity.getResources().getDimensionPixelSize(R.dimen.default_item_margin); + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistViewListAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistViewListAdapter.java deleted file mode 100644 index b642d1b7..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistViewListAdapter.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.kabouzeid.gramophone.adapter; - -import android.content.Context; -import android.graphics.Bitmap; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.ImageView; -import android.widget.TextView; - -import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.lastfm.artist.LastFMArtistThumbnailUrlLoader; -import com.kabouzeid.gramophone.model.Artist; -import com.squareup.picasso.Picasso; - -import java.util.List; - -/** - * Created by karim on 29.12.14. - */ -public class ArtistViewListAdapter extends ArrayAdapter { - private Context context; - - - public ArtistViewListAdapter(Context context, List objects) { - super(context, R.layout.item_artist_view, objects); - this.context = context; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - Artist artist = getItem(position); - if (convertView == null) { - convertView = LayoutInflater.from(context).inflate(R.layout.item_artist_view, parent, false); - } - final TextView artistName = (TextView) convertView.findViewById(R.id.artist_name); - final TextView artistInfo = (TextView) convertView.findViewById(R.id.artist_info); - final ImageView artistArt = (ImageView) convertView.findViewById(R.id.artist_image); - - artistName.setText(artist.name); - artistInfo.setText(artist.getSubTitle()); - - artistArt.setImageResource(R.drawable.default_artist_image); - - LastFMArtistThumbnailUrlLoader.loadArtistThumbnailUrl(context, artist.name, false, new LastFMArtistThumbnailUrlLoader.ArtistThumbnailUrlLoaderCallback() { - @Override - public void onArtistThumbnailUrlLoaded(String url) { - Picasso.with(getContext()) - .load(url) - .placeholder(R.drawable.default_artist_image) - .into(artistArt); - } - }); - - return convertView; - } -} 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 2e1fede5..2d2b6c15 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 @@ -41,7 +41,7 @@ public class AlbumSongAdapter extends RecyclerView.Adapter { + private Activity activity; + + public ArtistSongAdapter(Activity activity, List songs) { + super(activity, R.layout.item_song, songs); + this.activity = activity; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + final Song song = getItem(position); + if (convertView == null) { + convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_artist_song, 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); + + songTitle.setText(song.title); + songInfo.setText(song.albumName); + + Picasso.with(activity) + .load(MusicUtil.getAlbumArtUri(song.albumId)) + .placeholder(R.drawable.default_album_art) + .into(albumArt); + + final ImageView overflowButton = (ImageView) convertView.findViewById(R.id.menu); + overflowButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PopupMenu popupMenu = new PopupMenu(activity, v); + popupMenu.inflate(R.menu.menu_song); + popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_tag_editor: + Intent intent = new Intent(activity, SongTagEditorActivity.class); + intent.putExtra(AppKeys.E_ID, song.id); + activity.startActivity(intent); + return true; + case R.id.action_details: + String songFilePath = SongFilePathLoader.getSongFilePath(activity, song.id); + File songFile = new File(songFilePath); + SongDetailDialogHelper.getDialog(activity, songFile).show(); + return true; + case R.id.action_go_to_album: + Pair[] albumPairs = null; + if (activity instanceof AbsFabActivity) + albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs); + NavigationUtil.goToAlbum(activity, song.albumId, albumPairs); + return true; + case R.id.action_go_to_artist: + Pair[] artistPairs = null; + if (activity instanceof AbsFabActivity) + artistPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(artistPairs); + NavigationUtil.goToArtist(activity, song.artistId, artistPairs); + return true; + } + return false; + } + }); + popupMenu.show(); + } + }); + return convertView; + } +} 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 b58f19b4..dd195945 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 @@ -42,7 +42,7 @@ public class SongAdapter extends RecyclerView.Adapter { @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = LayoutInflater.from(activity).inflate(R.layout.item_song_view, parent, false); + View view = LayoutInflater.from(activity).inflate(R.layout.item_song, parent, false); return new ViewHolder(view); } 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 3f6a53d0..77b69f98 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 @@ -47,7 +47,7 @@ import java.util.List; * * */ -public class AlbumDetailActivity extends AbsFabActivity implements KabViewsDisableAble { +public class AlbumDetailActivity extends AbsFabActivity { public static final String TAG = AlbumDetailActivity.class.getSimpleName(); private App app; @@ -152,7 +152,12 @@ public class AlbumDetailActivity extends AbsFabActivity implements KabViewsDisab private void setUpViews() { albumTitleView.setText(album.title); - setUpAlbumArtAndApplyPalette(); + ViewUtil.addOnGlobalLayoutListener(albumArtImageView, new Runnable() { + @Override + public void run() { + setUpAlbumArtAndApplyPalette(); + } + }); setUpListView(); setUpSongsAdapter(); } 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 e4ed16db..2a5f1c28 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 @@ -1,50 +1,47 @@ package com.kabouzeid.gramophone.ui.activities; import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.Fragment; -import android.content.Context; import android.graphics.Bitmap; -import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; -import android.support.v13.app.FragmentPagerAdapter; -import android.support.v4.view.ViewPager; import android.support.v7.graphics.Palette; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; -import android.util.SparseArray; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.view.ViewGroup; -import android.view.animation.DecelerateInterpolator; +import android.widget.AdapterView; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; -import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCallbacks; -import com.github.ksoichiro.android.observablescrollview.ScrollState; -import com.google.samples.apps.iosched.ui.widget.SlidingTabLayout; +import com.github.ksoichiro.android.observablescrollview.ObservableListView; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble; +import com.kabouzeid.gramophone.adapter.AlbumAdapter; +import com.kabouzeid.gramophone.adapter.ArtistAlbumAdapter; +import com.kabouzeid.gramophone.adapter.songadapter.ArtistSongAdapter; +import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.lastfm.artist.LastFMArtistImageUrlLoader; +import com.kabouzeid.gramophone.loader.ArtistAlbumLoader; import com.kabouzeid.gramophone.loader.ArtistLoader; +import com.kabouzeid.gramophone.loader.ArtistSongLoader; import com.kabouzeid.gramophone.misc.AppKeys; +import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks; +import com.kabouzeid.gramophone.model.Album; import com.kabouzeid.gramophone.model.Artist; +import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; -import com.kabouzeid.gramophone.ui.fragments.artistviewpager.AbsViewPagerTabArtistListFragment; -import com.kabouzeid.gramophone.ui.fragments.artistviewpager.ViewPagerTabArtistAlbumFragment; -import com.kabouzeid.gramophone.ui.fragments.artistviewpager.ViewPagerTabArtistBioFragment; -import com.kabouzeid.gramophone.ui.fragments.artistviewpager.ViewPagerTabArtistSongListFragment; import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.ViewUtil; -import com.nineoldandroids.animation.Animator; import com.nineoldandroids.view.ViewHelper; -import com.nineoldandroids.view.ViewPropertyAnimator; import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; +import java.util.List; + /* * * A lot of hackery is done in this activity. Changing things may will brake the whole activity. @@ -53,35 +50,59 @@ import com.squareup.picasso.Picasso; * * */ -public class ArtistDetailActivity extends AbsFabActivity implements KabViewsDisableAble, ObservableScrollViewCallbacks { +public class ArtistDetailActivity extends AbsFabActivity { public static final String TAG = ArtistDetailActivity.class.getSimpleName(); public static final String ARG_ARTIST_ID = "com.kabouzeid.gramophone.artist.id"; public static final String ARG_ARTIST_NAME = "com.kabouzeid.gramophone.artist.name"; - private static final boolean TOOLBAR_IS_STICKY = true; - - private boolean isAnimating; - private Artist artist; - private SlidingTabLayout slidingTabs; + private ObservableListView songListView; private View statusBar; - private ImageView artistImageView; - private View artistArtOverlayView; - private View absAlbumListBackgroundView; - private TextView artistTitleText; + private ImageView artistIv; + private View songsBackgroundView; + private TextView artistNameTv; private Toolbar toolbar; - private ViewPager viewPager; - private NavigationAdapter navigationAdapter; private int toolbarHeight; private int headerOffset; private int titleViewHeight; private int artistImageViewHeight; private int toolbarColor; - private int tabHeight; - private Fragment currentFragment; + private View songListHeader; + private RecyclerView albumRecyclerView; + + private SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() { + @Override + public void onScrollChanged(int scrollY, boolean b, boolean b2) { + scrollY += artistImageViewHeight + titleViewHeight; + super.onScrollChanged(scrollY, b, b2); + float flexibleRange = artistImageViewHeight - headerOffset; + + // Translate album cover + ViewHelper.setTranslationY(artistIv, Math.max(-artistImageViewHeight, -scrollY / 2)); + + // Translate list background + ViewHelper.setTranslationY(songsBackgroundView, Math.max(0, -scrollY + artistImageViewHeight)); + + // Change alpha of overlay + float alpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange)); + ViewUtil.setBackgroundAlpha(toolbar, alpha, toolbarColor); + ViewUtil.setBackgroundAlpha(statusBar, alpha, toolbarColor); + + // Translate name text + int maxTitleTranslationY = artistImageViewHeight; + int titleTranslationY = maxTitleTranslationY - scrollY; + titleTranslationY = Math.max(headerOffset, titleTranslationY); + + ViewHelper.setTranslationY(artistNameTv, titleTranslationY); + + // Translate FAB + int fabTranslationY = titleTranslationY + titleViewHeight - (getFab().getHeight() / 2); + ViewHelper.setTranslationY(getFab(), fabTranslationY); + } + }; @SuppressLint("NewApi") @@ -102,19 +123,14 @@ public class ArtistDetailActivity extends AbsFabActivity implements KabViewsDisa if (Util.hasLollipopSDK()) startPostponedEnterTransition(); } - @Override - public String getTag() { - return TAG; - } - private void initViews() { - artistImageView = (ImageView) findViewById(R.id.artist_image); + artistIv = (ImageView) findViewById(R.id.artist_image); toolbar = (Toolbar) findViewById(R.id.toolbar); - artistArtOverlayView = findViewById(R.id.overlay); - artistTitleText = (TextView) findViewById(R.id.artist_name); - absAlbumListBackgroundView = findViewById(R.id.list_background); + songListView = (ObservableListView) findViewById(R.id.list); + artistNameTv = (TextView) findViewById(R.id.artist_name); + songsBackgroundView = findViewById(R.id.list_background); statusBar = findViewById(R.id.statusBar); - slidingTabs = (SlidingTabLayout) findViewById(R.id.sliding_tabs); + songListHeader = LayoutInflater.from(this).inflate(R.layout.artist_detail_header, songListView, false); } private void setUpObservableListViewParams() { @@ -124,162 +140,71 @@ public class ArtistDetailActivity extends AbsFabActivity implements KabViewsDisa titleViewHeight = getResources().getDimensionPixelSize(R.dimen.title_view_height); headerOffset = toolbarHeight; headerOffset += getResources().getDimensionPixelSize(R.dimen.statusMargin); - tabHeight = getResources().getDimensionPixelSize(R.dimen.tab_height); + } + + @Override + public String getTag() { + return TAG; } private void setUpViews() { - artistTitleText.setText(artist.name); - ViewHelper.setAlpha(artistArtOverlayView, 0); + artistNameTv.setText(artist.name); - setUpArtistImageAndApplyPalette(false); - setUpViewPatch(); - setUpSlidingTabs(); + ViewUtil.addOnGlobalLayoutListener(artistIv, new Runnable() { + @Override + public void run() { + setUpArtistImageAndApplyPalette(false); + } + }); + setUpSongListView(); + setUpAlbumRecyclerView(); } - private void setUpSlidingTabs() { - navigationAdapter = new NavigationAdapter(this, artist); - viewPager = (ViewPager) findViewById(R.id.pager); - viewPager.setOffscreenPageLimit(2); - viewPager.setAdapter(navigationAdapter); - viewPager.setCurrentItem(1); + private void setUpSongListView() { + songListView.setScrollViewCallbacks(observableScrollViewCallbacks); - slidingTabs.setViewPager(viewPager); - slidingTabs.setDistributeEvenly(true); - slidingTabs.setCustomTabView(R.layout.tab_indicator, android.R.id.text1); - slidingTabs.setSelectedIndicatorColors(Util.resolveColor(this, R.attr.colorAccent)); - slidingTabs.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { + setListViewPadding(); + songListView.addHeaderView(songListHeader); + + final List songs = ArtistSongLoader.getArtistSongList(this, artist.id); + ArtistSongAdapter songAdapter = new ArtistSongAdapter(this, songs); + songListView.setAdapter(songAdapter); + + final View contentView = getWindow().getDecorView().findViewById(android.R.id.content); + contentView.post(new Runnable() { @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - + public void run() { + songsBackgroundView.getLayoutParams().height = contentView.getHeight(); + observableScrollViewCallbacks.onScrollChanged(-(artistImageViewHeight + titleViewHeight), false, false); } + }); + songListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override - public void onPageSelected(int position) { - currentFragment = navigationAdapter.getItemAt(position); - if (currentFragment instanceof AbsViewPagerTabArtistListFragment) { - restoreY(((AbsViewPagerTabArtistListFragment) currentFragment).getY()); + public void onItemClick(AdapterView parent, View view, int position, long id) { + // header view has position 0 + if(position == 0){ + return; } - } - - @Override - public void onPageScrollStateChanged(int state) { - + MusicPlayerRemote.openQueue(songs, position - 1, true); } }); } - public void restoreY(final int scrollY) { - translateToolBar(scrollY); - int animationTime = 1000; - DecelerateInterpolator interpolator = new DecelerateInterpolator(4); - int titleTranslationY = getTitleTranslation(scrollY); - ViewPropertyAnimator.animate(artistArtOverlayView).y(getOverlayTranslation(scrollY)).setDuration(animationTime).setInterpolator(interpolator).start(); - ViewPropertyAnimator.animate(artistImageView).y(getImageViewTranslation(scrollY)).setDuration(animationTime).setInterpolator(interpolator).start(); - ViewPropertyAnimator.animate(absAlbumListBackgroundView).y(getListBackgroundTranslation(scrollY)).setDuration(animationTime).setInterpolator(interpolator).start(); - ViewPropertyAnimator.animate(artistArtOverlayView).alpha(getOverlayAlpha(scrollY)).setDuration(animationTime).setInterpolator(interpolator).start(); - ViewPropertyAnimator.animate(slidingTabs).y(titleTranslationY + titleViewHeight).setDuration(animationTime).setInterpolator(interpolator).start(); - ViewPropertyAnimator.animate(artistTitleText).y(titleTranslationY).setDuration(animationTime).setInterpolator(interpolator).start(); - ViewPropertyAnimator.animate(getFab()).y(getFabTranslation(scrollY)).setDuration(animationTime).setInterpolator(interpolator).setListener(new Animator.AnimatorListener() { - @Override - public void onAnimationStart(Animator animation) { - isAnimating = true; - } - - @Override - public void onAnimationEnd(Animator animation) { - translateToolBar(scrollY); - isAnimating = false; - if (currentFragment instanceof AbsViewPagerTabArtistListFragment) { - onScrollChanged((((AbsViewPagerTabArtistListFragment) currentFragment).getY()), false, false); - } - } - - @Override - public void onAnimationCancel(Animator animation) { - isAnimating = false; - } - - @Override - public void onAnimationRepeat(Animator animation) { - isAnimating = true; - } - }).start(); + private void setUpAlbumRecyclerView(){ + albumRecyclerView = (RecyclerView) songListHeader.findViewById(R.id.recycler_view); + albumRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); + List albums = ArtistAlbumLoader.getArtistAlbumList(this, artist.id); + ArtistAlbumAdapter albumAdapter = new ArtistAlbumAdapter(this, albums); + albumRecyclerView.setAdapter(albumAdapter); } - @Override - public void onScrollChanged(int scrollY, boolean b, boolean b2) { - if (!isAnimating) { - int titleTranslationY = getTitleTranslation(scrollY); - ViewHelper.setTranslationY(artistArtOverlayView, getOverlayTranslation(scrollY)); - ViewHelper.setTranslationY(artistImageView, getImageViewTranslation(scrollY)); - ViewHelper.setTranslationY(absAlbumListBackgroundView, getListBackgroundTranslation(scrollY)); - ViewHelper.setAlpha(artistArtOverlayView, getOverlayAlpha(scrollY)); - ViewHelper.setTranslationY(artistTitleText, titleTranslationY); - ViewHelper.setTranslationY(slidingTabs, titleTranslationY); - ViewHelper.setTranslationY(getFab(), getFabTranslation(scrollY)); - translateToolBar(scrollY); - } - } - - @Override - public void onDownMotionEvent() { - } - - @Override - public void onUpOrCancelMotionEvent(ScrollState scrollState) { - } - - private int getImageViewTranslation(int scrollY) { - int minOverlayTransitionY = headerOffset - artistArtOverlayView.getHeight(); - return Math.max(minOverlayTransitionY, Math.min(0, -scrollY / 2)); - } - - private int getOverlayTranslation(int scrollY) { - int minOverlayTransitionY = headerOffset - artistArtOverlayView.getHeight(); - return Math.max(minOverlayTransitionY, Math.min(0, -scrollY)); - } - - private int getListBackgroundTranslation(int scrollY) { - return Math.max(0, -scrollY + artistImageViewHeight - 200); - } - - private int getTitleTranslation(int scrollY) { - int maxTitleTranslationY = artistImageViewHeight; - int titleTranslationY = maxTitleTranslationY - scrollY; - if (TOOLBAR_IS_STICKY) { - titleTranslationY = Math.max(headerOffset, titleTranslationY); - } - return titleTranslationY; - } - - private int getFabTranslation(int scrollY) { - return getTitleTranslation(scrollY) + titleViewHeight + tabHeight - (getFab().getHeight() / 2); - } - - private float getOverlayAlpha(int scrollY) { - float flexibleRange = artistImageViewHeight - headerOffset; - return Math.max(0, Math.min(1, (float) scrollY / flexibleRange)); - } - - private void translateToolBar(int scrollY) { - if (TOOLBAR_IS_STICKY) { - // Change alpha of toolbar background - if (-scrollY + artistImageViewHeight <= headerOffset) { - ViewUtil.setBackgroundAlpha(toolbar, 1, toolbarColor); - ViewUtil.setBackgroundAlpha(statusBar, 1, toolbarColor); - - } else { - ViewUtil.setBackgroundAlpha(toolbar, 0, toolbarColor); - ViewUtil.setBackgroundAlpha(statusBar, 0, toolbarColor); - } + private void setListViewPadding() { + if (Util.isInPortraitMode(this) || Util.isTablet(this)) { + songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, Util.getNavigationBarHeight(this)); } else { - // Translate Toolbar - if (scrollY < artistImageViewHeight) { - ViewHelper.setTranslationY(toolbar, 0); - } else { - ViewHelper.setTranslationY(toolbar, -scrollY); - } + songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, 0); } } @@ -290,15 +215,13 @@ public class ArtistDetailActivity extends AbsFabActivity implements KabViewsDisa Picasso.with(ArtistDetailActivity.this) .load(url) .placeholder(R.drawable.default_artist_image) - .into(artistImageView, new Callback.EmptyCallback() { + .into(artistIv, new Callback.EmptyCallback() { @Override public void onSuccess() { super.onSuccess(); - final Bitmap bitmap = ((BitmapDrawable) artistImageView.getDrawable()).getBitmap(); + final Bitmap bitmap = ((BitmapDrawable) artistIv.getDrawable()).getBitmap(); if (bitmap != null) applyPalette(bitmap); - if (forceDownload) { - Toast.makeText(ArtistDetailActivity.this, getResources().getString(R.string.updated_artist_image_for) + " " + artist.name, Toast.LENGTH_SHORT).show(); - } + } }); } @@ -312,10 +235,8 @@ public class ArtistDetailActivity extends AbsFabActivity implements KabViewsDisa Palette.Swatch swatch = palette.getVibrantSwatch(); if (swatch != null) { toolbarColor = swatch.getRgb(); - artistArtOverlayView.setBackgroundColor(swatch.getRgb()); - artistTitleText.setBackgroundColor(swatch.getRgb()); - slidingTabs.setBackgroundColor(swatch.getRgb()); - artistTitleText.setTextColor(swatch.getTitleTextColor()); + artistNameTv.setBackgroundColor(swatch.getRgb()); + artistNameTv.setTextColor(swatch.getTitleTextColor()); } else { setStandardColors(); } @@ -328,29 +249,14 @@ public class ArtistDetailActivity extends AbsFabActivity implements KabViewsDisa int defaultBarColor = getResources().getColor(R.color.materialmusic_default_bar_color); toolbarColor = defaultBarColor; - artistArtOverlayView.setBackgroundColor(defaultBarColor); - artistTitleText.setBackgroundColor(defaultBarColor); - slidingTabs.setBackgroundColor(defaultBarColor); - artistTitleText.setTextColor(titleTextColor); - } - - private void setUpViewPatch() { - final View contentView = getWindow().getDecorView().findViewById(android.R.id.content); - contentView.post(new Runnable() { - @Override - public void run() { - absAlbumListBackgroundView.getLayoutParams().height = contentView.getHeight(); - } - }); + artistNameTv.setBackgroundColor(defaultBarColor); + artistNameTv.setTextColor(titleTextColor); } private void setUpToolBar() { setSupportActionBar(toolbar); getSupportActionBar().setTitle(null); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - if (!TOOLBAR_IS_STICKY) { - toolbar.setBackgroundColor(Color.TRANSPARENT); - } } private void getIntentExtras() { @@ -390,88 +296,14 @@ public class ArtistDetailActivity extends AbsFabActivity implements KabViewsDisa @Override public void enableViews() { super.enableViews(); - viewPager.setEnabled(true); + songListView.setEnabled(true); toolbar.setEnabled(true); } @Override public void disableViews() { super.disableViews(); - viewPager.setEnabled(false); + songListView.setEnabled(false); toolbar.setEnabled(false); } - - @Override - protected void onSaveInstanceState(Bundle outState) { - - } - - private static class NavigationAdapter extends FragmentPagerAdapter { - - private String[] titles; - - private SparseArray pages; - private Artist artist; - private Context context; - - public NavigationAdapter(Activity activity, Artist artist) { - super(activity.getFragmentManager()); - this.artist = artist; - pages = new SparseArray<>(); - context = activity; - titles = new String[]{ - context.getResources().getString(R.string.tab_songs), - context.getResources().getString(R.string.tab_albums), - context.getResources().getString(R.string.tab_biography) - }; - } - - @Override - public Fragment getItem(int position) { - final Bundle args = new Bundle(); - args.putInt(ARG_ARTIST_ID, artist.id); - args.putString(ARG_ARTIST_NAME, artist.name); - - Fragment f = getOrCreateFragmentAt(position); - f.setArguments(args); - - pages.put(position, f); - return f; - } - - @Override - public void destroyItem(ViewGroup container, int position, Object object) { - if (0 <= pages.indexOfKey(position)) { - pages.remove(position); - } - super.destroyItem(container, position, object); - } - - private Fragment getOrCreateFragmentAt(int position) { - switch (position) { - case 1: - return pages.get(position, new ViewPagerTabArtistAlbumFragment()); - case 0: - return pages.get(position, new ViewPagerTabArtistSongListFragment()); - case 2: - return pages.get(position, new ViewPagerTabArtistBioFragment()); - default: - return pages.get(position, new MainActivity.PlaceholderFragmentAbs()); - } - } - - public Fragment getItemAt(int position) { - return pages.get(position, null); - } - - @Override - public int getCount() { - return titles.length; - } - - @Override - public CharSequence getPageTitle(int position) { - return titles[position]; - } - } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java index df029215..66a83b85 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java @@ -7,7 +7,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.AlbumAdapter; import com.kabouzeid.gramophone.loader.AlbumLoader; @@ -25,13 +24,13 @@ public class AlbumViewFragment extends AbsMainActivityFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_albumview, container, false); + return inflater.inflate(R.layout.fragment_album_view, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); + recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view); setUpRecyclerView(); } 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 226e9952..c3fca39d 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 @@ -1,85 +1,55 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments; -import android.app.Fragment; import android.os.Bundle; -import android.support.v4.util.Pair; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.AbsListView; -import android.widget.AdapterView; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.adapter.ArtistViewListAdapter; +import com.kabouzeid.gramophone.adapter.ArtistAdapter; import com.kabouzeid.gramophone.loader.ArtistLoader; import com.kabouzeid.gramophone.model.Artist; -import com.kabouzeid.gramophone.util.NavigationUtil; import java.util.List; -/** - * A simple {@link Fragment} subclass. - */ public class ArtistViewFragment extends AbsMainActivityFragment { public static final String TAG = ArtistViewFragment.class.getSimpleName(); - private AbsListView absListView; - private View fragmentRootView; + private RecyclerView recyclerView; @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_artist_view, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { - fragmentRootView = view; super.onViewCreated(view, savedInstanceState); - initViews(); - setUpViews(); + recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view); + setUpRecyclerView(); } + private void setUpRecyclerView() { + List artists = ArtistLoader.getAllArtists(getActivity()); + ArtistAdapter artistAdapter = new ArtistAdapter(getActivity(), artists); + + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 1)); + recyclerView.setAdapter(artistAdapter); + recyclerView.setPadding(0, getTopPadding(), 0, getBottomPadding()); + } @Override public void enableViews() { super.enableViews(); - absListView.setEnabled(true); + recyclerView.setEnabled(true); } @Override public void disableViews() { super.disableViews(); - absListView.setEnabled(false); - } - - private void initViews() { - absListView = (AbsListView) fragmentRootView.findViewById(R.id.recyclerView); - } - - private void setUpViews() { - setUpAbsListView(); - } - - private void setUpAbsListView() { - List artists = ArtistLoader.getAllArtists(getActivity()); - fillAbsListView(artists); - } - - private void fillAbsListView(List artists) { - ArtistViewListAdapter artistAdapter = new ArtistViewListAdapter(getActivity(), artists); - absListView.setAdapter(artistAdapter); - absListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - final Artist artist = (Artist) parent.getItemAtPosition(position); - final View artistImageView = view.findViewById(R.id.artist_image); - - Pair[] sharedElements = {Pair.create(artistImageView, getString(R.string.transition_artist_image))}; - NavigationUtil.goToArtist(getActivity(), artist.id, sharedElements); - } - }); - absListView.setPadding(0, getTopPadding(), 0, getBottomPadding()); + recyclerView.setEnabled(false); } } 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 ec329029..ad9d4c00 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 @@ -30,7 +30,7 @@ public class SongViewFragment extends AbsMainActivityFragment { @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); + recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view); setUpRecyclerView(); } diff --git a/app/src/main/res/layout/activity_album_detail.xml b/app/src/main/res/layout/activity_album_detail.xml index e59e44b7..00cfe4c1 100644 --- a/app/src/main/res/layout/activity_album_detail.xml +++ b/app/src/main/res/layout/activity_album_detail.xml @@ -29,7 +29,7 @@ android:clipToPadding="false" android:divider="@null" android:dividerHeight="0dp" - android:scrollbarStyle="outsideOverlay"/> + android:scrollbars="none"/> + + - - - - - - - - - + android:layout_height="match_parent" + android:clipToPadding="false" + android:divider="@null" + android:dividerHeight="0dp" + android:scrollbars="none"/> @@ -60,22 +51,13 @@ android:textAppearance="@style/TextAppearance.AppCompat.Title" android:textColor="?attr/title_text_color"/> - - + android:background="@android:color/transparent"/> - + android:background="@android:color/transparent"/> - + android:layout_marginRight="16dp" + /> diff --git a/app/src/main/res/layout/album_tile.xml b/app/src/main/res/layout/album_tile.xml index 31fb73bc..4be1d63c 100644 --- a/app/src/main/res/layout/album_tile.xml +++ b/app/src/main/res/layout/album_tile.xml @@ -1,17 +1,18 @@ + android:elevation="3dp" + android:foreground="?rect_selector"> + android:orientation="vertical"> - - diff --git a/app/src/main/res/layout/artist_detail_header.xml b/app/src/main/res/layout/artist_detail_header.xml new file mode 100644 index 00000000..9f16819a --- /dev/null +++ b/app/src/main/res/layout/artist_detail_header.xml @@ -0,0 +1,33 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_albumview.xml b/app/src/main/res/layout/fragment_album_view.xml similarity index 92% rename from app/src/main/res/layout/fragment_albumview.xml rename to app/src/main/res/layout/fragment_album_view.xml index f6013f5c..0789e62b 100644 --- a/app/src/main/res/layout/fragment_albumview.xml +++ b/app/src/main/res/layout/fragment_album_view.xml @@ -7,7 +7,7 @@ android:padding="2dp"> + android:layout_height="match_parent" + android:padding="2dp"> - diff --git a/app/src/main/res/layout/fragment_songview.xml b/app/src/main/res/layout/fragment_songview.xml index 41ffaee5..e4a51263 100644 --- a/app/src/main/res/layout/fragment_songview.xml +++ b/app/src/main/res/layout/fragment_songview.xml @@ -7,7 +7,7 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_song_view.xml b/app/src/main/res/layout/item_artist_song.xml similarity index 97% rename from app/src/main/res/layout/item_song_view.xml rename to app/src/main/res/layout/item_artist_song.xml index 13d2821b..dcedb1b8 100644 --- a/app/src/main/res/layout/item_song_view.xml +++ b/app/src/main/res/layout/item_artist_song.xml @@ -3,7 +3,6 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="64dp" - android:background="?rect_selector" android:descendantFocusability="blocksDescendants" android:orientation="horizontal" android:paddingLeft="16dp"> diff --git a/app/src/main/res/layout/item_artist_view.xml b/app/src/main/res/layout/item_artist_view.xml index a05d011e..90f21c55 100644 --- a/app/src/main/res/layout/item_artist_view.xml +++ b/app/src/main/res/layout/item_artist_view.xml @@ -1,5 +1,6 @@ - - + + android:scaleType="centerCrop" + /> - + android:orientation="vertical"> - - android:layout_gravity="center" - android:fontFamily="sans-serif" - android:gravity="center" - android:singleLine="true" - android:textAppearance="@style/TextAppearance.AppCompat.Body1"/> + + + android:layout_gravity="center_vertical" + android:layout_marginRight="2dp"/> \ No newline at end of file diff --git a/app/src/main/res/layout/item_song_album.xml b/app/src/main/res/layout/item_song_album.xml new file mode 100644 index 00000000..80182e83 --- /dev/null +++ b/app/src/main/res/layout/item_song_album.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 84f53f28..774bbe19 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -3,6 +3,8 @@ 16dp 16dp + 16dp + 14sp