From e41c447ae201b410b78868968c189f1944c77db4 Mon Sep 17 00:00:00 2001 From: Kevin Whitaker Date: Sat, 21 Nov 2015 21:03:37 -0500 Subject: [PATCH] Add in fragment that pops up when selected an artist in artists fragment. --- .../companionformagnatune/BrowseActivity.java | 43 ++++++++- .../adapters/ArtistsAdapter.java | 18 +++- .../fragments/ArtistFragment.java | 75 ++++----------- .../fragments/ArtistsFragment.java | 91 +++++++++++++++++++ app/src/main/res/anim/fragment_pop_enter.xml | 8 ++ app/src/main/res/anim/fragment_pop_exit.xml | 8 ++ app/src/main/res/layout/fragment_artist.xml | 25 +++++ 7 files changed, 208 insertions(+), 60 deletions(-) create mode 100644 app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/ArtistsFragment.java create mode 100644 app/src/main/res/anim/fragment_pop_enter.xml create mode 100644 app/src/main/res/anim/fragment_pop_exit.xml create mode 100644 app/src/main/res/layout/fragment_artist.xml diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/BrowseActivity.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/BrowseActivity.java index e1be81c..3470059 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/BrowseActivity.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/BrowseActivity.java @@ -1,22 +1,47 @@ package com.magnatune.eyecreate.companionformagnatune; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.support.v4.app.FragmentTransaction; import android.support.v4.content.ContextCompat; -import android.transition.Slide; -import android.view.Gravity; +import android.support.v4.content.LocalBroadcastManager; import com.heinrichreimersoftware.materialdrawer.DrawerActivity; import com.heinrichreimersoftware.materialdrawer.structure.DrawerItem; import com.heinrichreimersoftware.materialdrawer.structure.DrawerProfile; import com.magnatune.eyecreate.companionformagnatune.fragments.AlbumsFragment; import com.magnatune.eyecreate.companionformagnatune.fragments.ArtistFragment; +import com.magnatune.eyecreate.companionformagnatune.fragments.ArtistsFragment; import com.magnatune.eyecreate.companionformagnatune.login.MagnatuneAccountManager; public class BrowseActivity extends DrawerActivity { + public static final String ACTION_ONCLICK_ACTIVATED = "browseactivityonclick"; + public static final String EXTRA_FRAGMENT = "fragmenttostart"; + public static final String EXTRA_FRAGMENT_ARGS = "fragmentargs"; + + BroadcastReceiver onClickManager = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if(intent.hasExtra(EXTRA_FRAGMENT)) { + if(intent.getStringExtra(EXTRA_FRAGMENT).equals(ArtistFragment.class.getName())) { + ArtistFragment fragment = new ArtistFragment(); + fragment.setArguments(intent.getBundleExtra(EXTRA_FRAGMENT_ARGS)); + getSupportFragmentManager().beginTransaction() + .setCustomAnimations(R.anim.fragment_enter,R.anim.fragment_exit,R.anim.fragment_pop_enter,R.anim.fragment_pop_exit) + .replace(R.id.fragment_holder,fragment,"artist") + .addToBackStack("artist") + .commit(); + } + } + } + }; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -46,7 +71,7 @@ public class BrowseActivity extends DrawerActivity { public void onClick(DrawerItem drawerItem, long l, int i) { getSupportFragmentManager().beginTransaction() .setCustomAnimations(R.anim.fragment_enter, R.anim.fragment_exit) - .replace(R.id.fragment_holder, new ArtistFragment(), "artists") + .replace(R.id.fragment_holder, new ArtistsFragment(), "artists") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .commit(); closeDrawer(); @@ -59,4 +84,16 @@ public class BrowseActivity extends DrawerActivity { .commit(); } } + + @Override + protected void onResume() { + super.onResume(); + LocalBroadcastManager.getInstance(this).registerReceiver(onClickManager,new IntentFilter(ACTION_ONCLICK_ACTIVATED)); + } + + @Override + protected void onPause() { + super.onPause(); + LocalBroadcastManager.getInstance(this).unregisterReceiver(onClickManager); + } } diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/ArtistsAdapter.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/ArtistsAdapter.java index 3997a5a..db7c5ad 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/ArtistsAdapter.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/ArtistsAdapter.java @@ -1,10 +1,15 @@ package com.magnatune.eyecreate.companionformagnatune.adapters; import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.content.LocalBroadcastManager; import android.view.View; import android.view.ViewGroup; +import com.magnatune.eyecreate.companionformagnatune.BrowseActivity; import com.magnatune.eyecreate.companionformagnatune.R; +import com.magnatune.eyecreate.companionformagnatune.fragments.ArtistFragment; import com.magnatune.eyecreate.companionformagnatune.model.Artist; import com.magnatune.eyecreate.companionformagnatune.viewholders.ArtistViewHolder; @@ -25,7 +30,18 @@ public class ArtistsAdapter extends RealmBasedRecyclerViewAdapter() { - @Override - protected Void doInBackground(Void... voids) { - MagnatuneDBManager.updateDB(); - return null; - } - }.execute(); - } @Override - public void onCreate(@Nullable Bundle savedInstanceState) { + public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); db = MagnatuneDBManager.getAlbumDB(); + if(!getArguments().containsKey(ARG_ARTIST_NAME)) { + //No artist argument means can't make fragment + getActivity().onBackPressed(); + } } @Override @@ -71,21 +40,15 @@ public class ArtistFragment extends Fragment { db.close(); } + @Nullable @Override - public void onResume() { - super.onResume(); - recyclerView.post(new Runnable() { - @Override - public void run() { - recyclerView.setRefreshing(!MagnatuneDBManager.isProcessingDone()); - } - }); - LocalBroadcastManager.getInstance(getActivity()).registerReceiver(refreshDone, new IntentFilter(MagnatuneDBManager.ACTION_DB_UPDATE_DONE)); - } - - @Override - public void onPause() { - super.onPause(); - LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(refreshDone); + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.fragment_artist,container,false);; + recyclerView = (RealmRecyclerView) v.findViewById(R.id.artist_albums); + 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)); + return v; } } diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/ArtistsFragment.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/ArtistsFragment.java new file mode 100644 index 0000000..2c13649 --- /dev/null +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/ArtistsFragment.java @@ -0,0 +1,91 @@ +package com.magnatune.eyecreate.companionformagnatune.fragments; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.AsyncTask; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v4.content.LocalBroadcastManager; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.magnatune.eyecreate.companionformagnatune.R; +import com.magnatune.eyecreate.companionformagnatune.adapters.ArtistsAdapter; +import com.magnatune.eyecreate.companionformagnatune.model.Artist; +import com.magnatune.eyecreate.companionformagnatune.model.MagnatuneDBManager; + +import co.moonmonkeylabs.realmrecyclerview.RealmRecyclerView; +import io.realm.Realm; + +public class ArtistsFragment extends Fragment { + + Realm db; + RealmRecyclerView recyclerView; + BroadcastReceiver refreshDone = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + recyclerView.setRefreshing(false); + } + }; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + recyclerView = (RealmRecyclerView) inflater.inflate(R.layout.fragment_artists,container,false); + recyclerView.setOnRefreshListener(new RealmRecyclerView.OnRefreshListener() { + @Override + public void onRefresh() { + triggerDBUpdate(); + } + }); + recyclerView.setAdapter(new ArtistsAdapter(getActivity(), db.where(Artist.class).findAllSorted("artistname"), true, true,true,"artistname")); + if (db.where(Artist.class).findAll().size() < 1) { + triggerDBUpdate(); + } + return recyclerView; + } + + private void triggerDBUpdate() { + new AsyncTask() { + @Override + protected Void doInBackground(Void... voids) { + MagnatuneDBManager.updateDB(); + return null; + } + }.execute(); + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + db = MagnatuneDBManager.getAlbumDB(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + db.close(); + } + + @Override + public void onResume() { + super.onResume(); + recyclerView.post(new Runnable() { + @Override + public void run() { + recyclerView.setRefreshing(!MagnatuneDBManager.isProcessingDone()); + } + }); + LocalBroadcastManager.getInstance(getActivity()).registerReceiver(refreshDone, new IntentFilter(MagnatuneDBManager.ACTION_DB_UPDATE_DONE)); + } + + @Override + public void onPause() { + super.onPause(); + LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(refreshDone); + } +} diff --git a/app/src/main/res/anim/fragment_pop_enter.xml b/app/src/main/res/anim/fragment_pop_enter.xml new file mode 100644 index 0000000..c2daa35 --- /dev/null +++ b/app/src/main/res/anim/fragment_pop_enter.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/fragment_pop_exit.xml b/app/src/main/res/anim/fragment_pop_exit.xml new file mode 100644 index 0000000..3ea1835 --- /dev/null +++ b/app/src/main/res/anim/fragment_pop_exit.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_artist.xml b/app/src/main/res/layout/fragment_artist.xml new file mode 100644 index 0000000..346e55d --- /dev/null +++ b/app/src/main/res/layout/fragment_artist.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file -- GitLab