/* * Copyright (C) 2015 Naman Dwivedi * * Licensed under the GNU General Public License v3 * * This is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. */ package com.naman14.timber.fragments; import android.graphics.Rect; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import com.naman14.timber.R; import com.naman14.timber.adapters.AlbumAdapter; import com.naman14.timber.dataloaders.AlbumLoader; import com.naman14.timber.models.Album; import com.naman14.timber.utils.PreferencesUtility; import com.naman14.timber.utils.SortOrder; import com.naman14.timber.widgets.DividerItemDecoration; import com.naman14.timber.widgets.FastScroller; import java.util.List; public class AlbumFragment extends Fragment { private AlbumAdapter mAdapter; private RecyclerView recyclerView; private FastScroller fastScroller; private GridLayoutManager layoutManager; private RecyclerView.ItemDecoration itemDecoration; private PreferencesUtility mPreferences; private boolean isGrid; @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPreferences = PreferencesUtility.getInstance(getActivity()); isGrid = mPreferences.isAlbumsInGrid(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate( R.layout.fragment_recyclerview, container, false); recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview); fastScroller = (FastScroller) rootView.findViewById(R.id.fastscroller); setLayoutManager(); if (getActivity() != null) new loadAlbums().execute(""); return rootView; } private void setLayoutManager() { if (isGrid) { layoutManager = new GridLayoutManager(getActivity(), 2); fastScroller.setVisibility(View.GONE); } else { layoutManager = new GridLayoutManager(getActivity(), 1); fastScroller.setVisibility(View.VISIBLE); fastScroller.setRecyclerView(recyclerView); } recyclerView.setLayoutManager(layoutManager); } private void setItemDecoration() { if (isGrid) { int spacingInPixels = getActivity().getResources().getDimensionPixelSize(R.dimen.spacing_card_album_grid); itemDecoration = new SpacesItemDecoration(spacingInPixels); } else { itemDecoration = new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST); } recyclerView.addItemDecoration(itemDecoration); } private void updateLayoutManager(int column) { recyclerView.removeItemDecoration(itemDecoration); recyclerView.setAdapter(new AlbumAdapter(getActivity(), AlbumLoader.getAllAlbums(getActivity()))); layoutManager.setSpanCount(column); layoutManager.requestLayout(); setItemDecoration(); } private void reloadAdapter() { new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(final Void... unused) { List<Album> albumList = AlbumLoader.getAllAlbums(getActivity()); mAdapter.updateDataSet(albumList); return null; } @Override protected void onPostExecute(Void aVoid) { mAdapter.notifyDataSetChanged(); } }.execute(); } @Override public void onActivityCreated(final Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.album_sort_by, menu); inflater.inflate(R.menu.menu_show_as, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_sort_by_az: mPreferences.setAlbumSortOrder(SortOrder.AlbumSortOrder.ALBUM_A_Z); reloadAdapter(); return true; case R.id.menu_sort_by_za: mPreferences.setAlbumSortOrder(SortOrder.AlbumSortOrder.ALBUM_Z_A); reloadAdapter(); return true; case R.id.menu_sort_by_year: mPreferences.setAlbumSortOrder(SortOrder.AlbumSortOrder.ALBUM_YEAR); reloadAdapter(); return true; case R.id.menu_sort_by_artist: mPreferences.setAlbumSortOrder(SortOrder.AlbumSortOrder.ALBUM_ARTIST); reloadAdapter(); return true; case R.id.menu_sort_by_number_of_songs: mPreferences.setAlbumSortOrder(SortOrder.AlbumSortOrder.ALBUM_NUMBER_OF_SONGS); reloadAdapter(); return true; case R.id.menu_show_as_list: mPreferences.setAlbumsInGrid(false); isGrid = false; updateLayoutManager(1); return true; case R.id.menu_show_as_grid: mPreferences.setAlbumsInGrid(true); isGrid = true; updateLayoutManager(2); return true; } return super.onOptionsItemSelected(item); } public class SpacesItemDecoration extends RecyclerView.ItemDecoration { private int space; public SpacesItemDecoration(int space) { this.space = space; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { outRect.left = space; outRect.top = space; outRect.right = space; outRect.bottom = space; } } private class loadAlbums extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { if (getActivity() != null) mAdapter = new AlbumAdapter(getActivity(), AlbumLoader.getAllAlbums(getActivity())); return "Executed"; } @Override protected void onPostExecute(String result) { recyclerView.setAdapter(mAdapter); //to add spacing between cards if (getActivity() != null) { setItemDecoration(); } } @Override protected void onPreExecute() { } } }