diff --git a/app/src/main/java/com/simplecity/amp_library/ui/fragments/AlbumArtistFragment.java b/app/src/main/java/com/simplecity/amp_library/ui/fragments/AlbumArtistFragment.java index 9a3171be5..e8bae3243 100644 --- a/app/src/main/java/com/simplecity/amp_library/ui/fragments/AlbumArtistFragment.java +++ b/app/src/main/java/com/simplecity/amp_library/ui/fragments/AlbumArtistFragment.java @@ -37,6 +37,7 @@ import com.simplecity.amp_library.utils.SortManager; import com.simplecityapps.recycler_adapter.model.ViewModel; import com.simplecityapps.recycler_adapter.recyclerview.RecyclerListener; +import com.simplecityapps.recycler_adapter.recyclerview.SpanSizeLookup; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; import java.util.Collections; @@ -70,7 +71,9 @@ interface AlbumArtistClickListener { private GridLayoutManager layoutManager; - SectionedAdapter adapter; + private SectionedAdapter adapter; + + private SpanSizeLookup spanSizeLookup; private boolean sortOrderChanged = false; @@ -120,15 +123,8 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, if (recyclerView == null) { int spanCount = SettingsManager.getInstance().getArtistColumnCount(getResources()); layoutManager = new GridLayoutManager(getContext(), spanCount); - layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { - @Override - public int getSpanSize(int position) { - if (adapter.items.get(position) instanceof EmptyView) { - return spanCount; - } - return 1; - } - }); + spanSizeLookup = new SpanSizeLookup(adapter, spanCount); + layoutManager.setSpanSizeLookup(spanSizeLookup); recyclerView = (FastScrollRecyclerView) inflater.inflate(R.layout.fragment_recycler, container, false); recyclerView.setLayoutManager(layoutManager); @@ -322,25 +318,25 @@ public boolean onOptionsItemSelected(MenuItem item) { case R.id.view_as_list: int viewType = ViewType.ARTIST_LIST; SettingsManager.getInstance().setArtistDisplayType(viewType); - layoutManager.setSpanCount(getResources().getInteger(R.integer.list_num_columns)); + setupListSpan(); updateViewType(viewType); break; case R.id.view_as_grid: viewType = ViewType.ARTIST_GRID; SettingsManager.getInstance().setArtistDisplayType(viewType); - layoutManager.setSpanCount(SettingsManager.getInstance().getArtistColumnCount(getResources())); + setupGridSpan(); updateViewType(viewType); break; case R.id.view_as_grid_card: viewType = ViewType.ARTIST_CARD; SettingsManager.getInstance().setArtistDisplayType(viewType); - layoutManager.setSpanCount(SettingsManager.getInstance().getArtistColumnCount(getResources())); + setupGridSpan(); updateViewType(viewType); break; case R.id.view_as_grid_palette: viewType = ViewType.ARTIST_PALETTE; SettingsManager.getInstance().setArtistDisplayType(viewType); - layoutManager.setSpanCount(SettingsManager.getInstance().getArtistColumnCount(getResources())); + setupGridSpan(); updateViewType(viewType); break; } @@ -359,6 +355,18 @@ public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } + private void setupGridSpan() { + int spanCount = SettingsManager.getInstance().getArtistColumnCount(getResources()); + spanSizeLookup.setSpanCount(spanCount); + layoutManager.setSpanCount(spanCount); + } + + private void setupListSpan() { + int spanCount = getResources().getInteger(R.integer.list_num_columns); + spanSizeLookup.setSpanCount(spanCount); + layoutManager.setSpanCount(spanCount); + } + void updateViewType(@ViewType int viewType) { Stream.of(adapter.items) .filter(viewModel -> viewModel instanceof AlbumArtistView) diff --git a/app/src/main/java/com/simplecity/amp_library/ui/fragments/AlbumFragment.java b/app/src/main/java/com/simplecity/amp_library/ui/fragments/AlbumFragment.java index cc03b57d3..7886d0cc3 100644 --- a/app/src/main/java/com/simplecity/amp_library/ui/fragments/AlbumFragment.java +++ b/app/src/main/java/com/simplecity/amp_library/ui/fragments/AlbumFragment.java @@ -43,6 +43,7 @@ import com.simplecity.amp_library.utils.SortManager; import com.simplecityapps.recycler_adapter.model.ViewModel; import com.simplecityapps.recycler_adapter.recyclerview.RecyclerListener; +import com.simplecityapps.recycler_adapter.recyclerview.SpanSizeLookup; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; import java.util.Collections; @@ -79,6 +80,8 @@ interface AlbumClickListener { private SectionedAdapter adapter; + private SpanSizeLookup spanSizeLookup; + private boolean sortOrderChanged = false; private ShuffleAlbumsView shuffleView; @@ -132,16 +135,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa if (recyclerView == null) { int spanCount = SettingsManager.getInstance().getAlbumColumnCount(getResources()); layoutManager = new GridLayoutManager(getContext(), spanCount); - layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { - @Override - public int getSpanSize(int position) { - if (adapter.items.get(position) instanceof EmptyView - || adapter.items.get(position) instanceof ShuffleAlbumsView) { - return spanCount; - } - return 1; - } - }); + spanSizeLookup = new SpanSizeLookup(adapter, spanCount); + layoutManager.setSpanSizeLookup(spanSizeLookup); recyclerView = (FastScrollRecyclerView) inflater.inflate(R.layout.fragment_recycler, container, false); recyclerView.setLayoutManager(layoutManager); @@ -333,25 +328,25 @@ public boolean onOptionsItemSelected(MenuItem item) { case R.id.view_as_list: int viewType = ViewType.ALBUM_LIST; SettingsManager.getInstance().setAlbumDisplayType(viewType); - layoutManager.setSpanCount(getResources().getInteger(R.integer.list_num_columns)); + setupListSpan(); updateViewType(viewType); break; case R.id.view_as_grid: viewType = ViewType.ALBUM_GRID; SettingsManager.getInstance().setAlbumDisplayType(viewType); - layoutManager.setSpanCount(SettingsManager.getInstance().getAlbumColumnCount(getResources())); + setupGridSpan(); updateViewType(viewType); break; case R.id.view_as_grid_card: viewType = ViewType.ALBUM_CARD; SettingsManager.getInstance().setAlbumDisplayType(viewType); - layoutManager.setSpanCount(SettingsManager.getInstance().getAlbumColumnCount(getResources())); + setupGridSpan(); updateViewType(viewType); break; case R.id.view_as_grid_palette: viewType = ViewType.ALBUM_PALETTE; SettingsManager.getInstance().setAlbumDisplayType(viewType); - layoutManager.setSpanCount(SettingsManager.getInstance().getAlbumColumnCount(getResources())); + setupGridSpan(); updateViewType(viewType); break; } @@ -371,6 +366,18 @@ public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } + private void setupGridSpan() { + int spanCount = SettingsManager.getInstance().getAlbumColumnCount(getResources()); + spanSizeLookup.setSpanCount(spanCount); + layoutManager.setSpanCount(spanCount); + } + + private void setupListSpan() { + int spanCount = getResources().getInteger(R.integer.list_num_columns); + spanSizeLookup.setSpanCount(spanCount); + layoutManager.setSpanCount(spanCount); + } + void updateViewType(@ViewType int viewType) { Stream.of(adapter.items) .filter(viewModel -> viewModel instanceof AlbumView) diff --git a/app/src/main/java/com/simplecity/amp_library/ui/modelviews/AlbumArtistView.java b/app/src/main/java/com/simplecity/amp_library/ui/modelviews/AlbumArtistView.java index cfd6d3b2a..5bdf696d5 100644 --- a/app/src/main/java/com/simplecity/amp_library/ui/modelviews/AlbumArtistView.java +++ b/app/src/main/java/com/simplecity/amp_library/ui/modelviews/AlbumArtistView.java @@ -153,6 +153,11 @@ public ViewHolder createViewHolder(ViewGroup parent) { return new ViewHolder(createView(parent)); } + @Override + public int getSpanSize(int spanCount) { + return 1; + } + @Override public String getSectionName() { int sortOrder = SortManager.getInstance().getArtistsSortOrder(); diff --git a/app/src/main/java/com/simplecity/amp_library/ui/modelviews/AlbumView.java b/app/src/main/java/com/simplecity/amp_library/ui/modelviews/AlbumView.java index 7054f0675..f8f93ff40 100644 --- a/app/src/main/java/com/simplecity/amp_library/ui/modelviews/AlbumView.java +++ b/app/src/main/java/com/simplecity/amp_library/ui/modelviews/AlbumView.java @@ -173,6 +173,11 @@ public ViewHolder createViewHolder(ViewGroup parent) { return new ViewHolder(createView(parent)); } + @Override + public int getSpanSize(int spanCount) { + return 1; + } + @Override public String getSectionName() { diff --git a/libraries/recycler-adapter/src/main/java/com/simplecityapps/recycler_adapter/recyclerview/SpanSizeLookup.java b/libraries/recycler-adapter/src/main/java/com/simplecityapps/recycler_adapter/recyclerview/SpanSizeLookup.java index da352ed33..3de5e4ed3 100644 --- a/libraries/recycler-adapter/src/main/java/com/simplecityapps/recycler_adapter/recyclerview/SpanSizeLookup.java +++ b/libraries/recycler-adapter/src/main/java/com/simplecityapps/recycler_adapter/recyclerview/SpanSizeLookup.java @@ -10,6 +10,7 @@ public class SpanSizeLookup extends GridLayoutManager.SpanSizeLookup { private ViewModelAdapter viewModelAdapter; + private int spanCount; public SpanSizeLookup(ViewModelAdapter viewModelAdapter, int spanCount) { @@ -17,6 +18,10 @@ public SpanSizeLookup(ViewModelAdapter viewModelAdapter, int spanCount) { this.spanCount = spanCount; } + public void setSpanCount(int spanCount) { + this.spanCount = spanCount; + } + @Override public int getSpanSize(int position) { @@ -27,4 +32,4 @@ public int getSpanSize(int position) { return 1; } -} +} \ No newline at end of file