From 9baf55660b5654a4eeec876aa57268820b533f04 Mon Sep 17 00:00:00 2001 From: Kevin Whitaker Date: Fri, 27 Nov 2015 12:40:16 -0500 Subject: [PATCH] Start of basic track listing. Still needs some work in what is displayed both content and style. Still can't figure out why shared content isn't working like I expect. --- .../adapters/AlbumsAdapter.java | 47 +++++++- .../adapters/TracksAdapter.java | 28 +++++ .../fragments/AlbumFragment.java | 107 ++++++++++++++++++ .../fragments/AlbumsFragment.java | 2 +- .../fragments/ArtistFragment.java | 2 +- app/src/main/res/layout/fragment_album.xml | 34 ++++++ .../main/res/layout/listitem_album_card.xml | 1 + app/src/main/res/layout/listitem_track.xml | 10 ++ 8 files changed, 223 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/TracksAdapter.java create mode 100644 app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumFragment.java create mode 100644 app/src/main/res/layout/fragment_album.xml create mode 100644 app/src/main/res/layout/listitem_track.xml diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/AlbumsAdapter.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/AlbumsAdapter.java index b0ebbd5..2b3e0c2 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/AlbumsAdapter.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/AlbumsAdapter.java @@ -2,12 +2,19 @@ package com.magnatune.eyecreate.companionformagnatune.adapters; import android.content.Context; import android.graphics.drawable.BitmapDrawable; +import android.os.Build; +import android.os.Bundle; +import android.support.v4.app.FragmentManager; import android.support.v7.graphics.Palette; import android.support.v7.widget.CardView; +import android.transition.AutoTransition; +import android.transition.Slide; +import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import com.magnatune.eyecreate.companionformagnatune.R; +import com.magnatune.eyecreate.companionformagnatune.fragments.AlbumFragment; import com.magnatune.eyecreate.companionformagnatune.model.Album; import com.magnatune.eyecreate.companionformagnatune.viewholders.AlbumViewHolder; import com.squareup.picasso.Callback; @@ -18,6 +25,13 @@ import io.realm.RealmResults; public class AlbumsAdapter extends RealmBasedRecyclerViewAdapter { + FragmentManager fragmentManager; + + public AlbumsAdapter(Context context, RealmResults realmResults, boolean automaticUpdate, boolean animateResults, String animateExtraColumnName,FragmentManager fragmentManager) { + super(context, realmResults, automaticUpdate, animateResults, animateExtraColumnName); + this.fragmentManager = fragmentManager; + } + public AlbumsAdapter(Context context, RealmResults realmResults, boolean automaticUpdate, boolean animateResults, String animateExtraColumnName) { super(context, realmResults, automaticUpdate, animateResults, animateExtraColumnName); } @@ -30,23 +44,23 @@ public class AlbumsAdapter extends RealmBasedRecyclerViewAdapter0) { + if (swatch == null && colors.getSwatches().size() > 0) { swatch = colors.getSwatches().get(0); } - if(swatch != null) { - ((CardView)albumViewHolder.itemView).setCardBackgroundColor(swatch.getRgb()); + if (swatch != null) { + ((CardView) albumViewHolder.itemView).setCardBackgroundColor(swatch.getRgb()); albumViewHolder.albumName.setTextColor(swatch.getTitleTextColor()); albumViewHolder.artistName.setTextColor(swatch.getBodyTextColor()); } @@ -57,5 +71,26 @@ public class AlbumsAdapter extends RealmBasedRecyclerViewAdapter= Build.VERSION_CODES.LOLLIPOP) { + fragment.setEnterTransition(new Slide(Gravity.BOTTOM)); + fragment.setExitTransition(new Slide(Gravity.BOTTOM)); + fragment.setSharedElementEnterTransition(new AutoTransition()); + fragment.setSharedElementReturnTransition(new AutoTransition()); + } + fragment.setArguments(args); + fragmentManager.beginTransaction() + .setCustomAnimations(R.anim.fragment_enter,R.anim.fragment_exit,R.anim.fragment_pop_enter,R.anim.fragment_pop_exit) + .addSharedElement(albumViewHolder.albumArt,"albumart") + .replace(R.id.fragment_holder, fragment, "tracks") + .addToBackStack("tracks") + .commit(); + } + }); } } diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/TracksAdapter.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/TracksAdapter.java new file mode 100644 index 0000000..4cb59f1 --- /dev/null +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/TracksAdapter.java @@ -0,0 +1,28 @@ +package com.magnatune.eyecreate.companionformagnatune.adapters; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.magnatune.eyecreate.companionformagnatune.R; +import com.magnatune.eyecreate.companionformagnatune.model.Track; + +import io.realm.RealmBaseAdapter; +import io.realm.RealmResults; + +public class TracksAdapter extends RealmBaseAdapter { + public TracksAdapter(Context context, RealmResults realmResults, boolean automaticUpdate) { + super(context, realmResults, automaticUpdate); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if(convertView == null) { + convertView = inflater.inflate(R.layout.listitem_track,parent,false); + } + TextView trackName = (TextView) convertView.findViewById(R.id.track_name); + trackName.setText(realmResults.get(position).getTrackname()); + return convertView; + } +} diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumFragment.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumFragment.java new file mode 100644 index 0000000..74e6f0d --- /dev/null +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumFragment.java @@ -0,0 +1,107 @@ +package com.magnatune.eyecreate.companionformagnatune.fragments; + +import android.graphics.drawable.BitmapDrawable; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v7.graphics.Palette; +import android.support.v7.widget.CardView; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.GridLayout; +import android.widget.ImageView; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.TextView; + +import com.magnatune.eyecreate.companionformagnatune.R; +import com.magnatune.eyecreate.companionformagnatune.adapters.TracksAdapter; +import com.magnatune.eyecreate.companionformagnatune.model.Album; +import com.magnatune.eyecreate.companionformagnatune.model.MagnatuneDBManager; +import com.magnatune.eyecreate.companionformagnatune.model.Track; +import com.squareup.picasso.Callback; +import com.squareup.picasso.Picasso; + +import io.realm.Realm; + +public class AlbumFragment extends Fragment { + + public static final String ARG_ALBUM_ID = "albumsku"; + + Realm db; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + db = MagnatuneDBManager.getAlbumDB(); + if(!getArguments().containsKey(ARG_ALBUM_ID)) { + //No album argument means can't make fragment + getActivity().onBackPressed(); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + db.close(); + } + + private static void setListViewHeightBasedOnChildren(ListView listView) { + ListAdapter listAdapter = listView.getAdapter(); + if (listAdapter == null) + return; + + int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(), View.MeasureSpec.UNSPECIFIED); + int totalHeight = 0; + View view = null; + for (int i = 0; i < listAdapter.getCount(); i++) { + view = listAdapter.getView(i, view, listView); + if (i == 0) + view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, GridLayout.LayoutParams.WRAP_CONTENT)); + + view.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED); + totalHeight += view.getMeasuredHeight(); + } + ViewGroup.LayoutParams params = listView.getLayoutParams(); + params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); + listView.setLayoutParams(params); + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final View v = inflater.inflate(R.layout.fragment_album, container, false); + ListView listView = (ListView) v.findViewById(R.id.album_tracks); + Album currentAlbum = db.where(Album.class).equalTo("albumsku",getArguments().getString(ARG_ALBUM_ID)).findFirst(); + ((TextView)v.findViewById(R.id.album_name)).setText(currentAlbum.getAlbumname()); + Picasso.with(getActivity()).load(currentAlbum.getCover_large()).into((ImageView) v.findViewById(R.id.album_cover), new Callback() { + @Override + public void onSuccess() { + Palette colors = Palette.from(((BitmapDrawable) ((ImageView) v.findViewById(R.id.album_cover)).getDrawable()).getBitmap()).generate(); + Palette.Swatch swatch = null; + swatch = colors.getVibrantSwatch(); + if (swatch == null) { + swatch = colors.getMutedSwatch(); + } + if (swatch == null && colors.getSwatches().size() > 0) { + swatch = colors.getSwatches().get(0); + } + if (swatch != null) { + ((TextView)v.findViewById(R.id.album_name)).setTextColor(swatch.getTitleTextColor()); + v.findViewById(R.id.album_name).setBackgroundColor(swatch.getRgb()); + } + } + + @Override + public void onError() { + + } + }); + TracksAdapter adapter = new TracksAdapter(getActivity(),db.where(Track.class).equalTo("albumname",currentAlbum.getAlbumname()).equalTo("artist",currentAlbum.getArtist().getArtistname()).findAll(),true); + listView.setAdapter(adapter); + setListViewHeightBasedOnChildren(listView); + return v; + } +} diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumsFragment.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumsFragment.java index 4cbd9ff..8ed4889 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumsFragment.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumsFragment.java @@ -49,7 +49,7 @@ public class AlbumsFragment extends Fragment { triggerDBUpdate(); } }); - recyclerView.setAdapter(new AlbumsAdapter(getActivity(), db.where(Album.class).findAllSorted("albumname"), true, true, null)); + recyclerView.setAdapter(new AlbumsAdapter(getActivity(), db.where(Album.class).findAllSorted("albumname"), true, true, null,getFragmentManager())); if (db.where(Album.class).findAll().size() < 1) { triggerDBUpdate(); } diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/ArtistFragment.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/ArtistFragment.java index 6842a28..a723b8c 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/ArtistFragment.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/ArtistFragment.java @@ -48,7 +48,7 @@ public class ArtistFragment extends Fragment { Artist artist = db.where(Artist.class).equalTo("artistname",getArguments().getString(ARG_ARTIST_NAME)).findFirst(); ((TextView) v.findViewById(R.id.artist_name)).setText(artist.getArtistname()); ((TextView) v.findViewById(R.id.artist_description)).setText(artist.getArtistdesc()); - recyclerView.setAdapter(new AlbumsAdapter(getActivity(),db.where(Album.class).equalTo("artist.artistname",artist.getArtistname()).findAll(),true,true,null)); + recyclerView.setAdapter(new AlbumsAdapter(getActivity(),db.where(Album.class).equalTo("artist.artistname",artist.getArtistname()).findAll(),true,true,null,getFragmentManager())); return v; } } diff --git a/app/src/main/res/layout/fragment_album.xml b/app/src/main/res/layout/fragment_album.xml new file mode 100644 index 0000000..83a6a33 --- /dev/null +++ b/app/src/main/res/layout/fragment_album.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/listitem_album_card.xml b/app/src/main/res/layout/listitem_album_card.xml index 915eab8..c57a8b5 100644 --- a/app/src/main/res/layout/listitem_album_card.xml +++ b/app/src/main/res/layout/listitem_album_card.xml @@ -13,6 +13,7 @@ android:layout_height="180dp" android:layout_gravity="center" android:scaleType="fitCenter" + android:transitionName="albumart" android:id="@+id/album_art"/> + + + \ No newline at end of file -- GitLab