diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/PagerAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/PagerAdapter.java
index 6007a2a0..e93439ca 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PagerAdapter.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PagerAdapter.java
@@ -10,10 +10,10 @@ import android.util.SparseArray;
import android.view.ViewGroup;
import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AlbumViewFragment;
-import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.ArtistViewFragment;
-import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.PlaylistViewFragment;
-import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.SongViewFragment;
+import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AlbumsFragment;
+import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.ArtistsFragment;
+import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.PlaylistsFragment;
+import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.SongsFragment;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@@ -107,10 +107,10 @@ public class PagerAdapter extends FragmentPagerAdapter {
}
public enum MusicFragments {
- SONG(SongViewFragment.class),
- ALBUM(AlbumViewFragment.class),
- ARTIST(ArtistViewFragment.class),
- PLAYLIST(PlaylistViewFragment.class);
+ SONG(SongsFragment.class),
+ ALBUM(AlbumsFragment.class),
+ ARTIST(ArtistsFragment.class),
+ PLAYLIST(PlaylistsFragment.class);
private final Class extends Fragment> mFragmentClass;
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java
index af156b1a..11d93b82 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java
@@ -53,7 +53,7 @@ import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.service.MusicService;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment;
-import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityRecyclerViewLayoutModeFragment;
+import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityRecyclerViewCustomGridSizeFragment;
import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
@@ -324,10 +324,20 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
menu.add(0, R.id.action_new_playlist, 0, R.string.new_playlist_title);
}
Fragment currentFragment = getCurrentFragment();
- if (currentFragment instanceof AbsMainActivityRecyclerViewLayoutModeFragment) {
- setUpLayoutModeMenu((AbsMainActivityRecyclerViewLayoutModeFragment) currentFragment, menu);
+ if (currentFragment instanceof AbsMainActivityRecyclerViewCustomGridSizeFragment) {
+ AbsMainActivityRecyclerViewCustomGridSizeFragment absMainActivityRecyclerViewCustomGridSizeFragment = (AbsMainActivityRecyclerViewCustomGridSizeFragment) currentFragment;
+
+ MenuItem gridSizeItem = menu.findItem(R.id.action_grid_size);
+ if (Util.isLandscape(this)) {
+ gridSizeItem.setTitle(R.string.action_grid_size_land);
+ }
+ setUpGridSizeMenu(absMainActivityRecyclerViewCustomGridSizeFragment, gridSizeItem.getSubMenu());
+
+ menu.findItem(R.id.action_colored_footers).setChecked(absMainActivityRecyclerViewCustomGridSizeFragment.usePalette());
+ menu.findItem(R.id.action_colored_footers).setEnabled(absMainActivityRecyclerViewCustomGridSizeFragment.canUsePalette());
} else {
- menu.removeItem(R.id.action_view_as);
+ menu.removeItem(R.id.action_grid_size);
+ menu.removeItem(R.id.action_colored_footers);
}
ViewUtil.setToolbarContentColorForBackground(this, toolbar, getThemeColorPrimary());
return true;
@@ -353,9 +363,16 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
ViewUtil.invalidateToolbarPopupMenuTint(toolbar);
Fragment currentFragment = getCurrentFragment();
- if (currentFragment instanceof AbsMainActivityRecyclerViewLayoutModeFragment) {
- if (handleLayoutModeMenuItem((AbsMainActivityRecyclerViewLayoutModeFragment) currentFragment, item))
+ if (currentFragment instanceof AbsMainActivityRecyclerViewCustomGridSizeFragment) {
+ AbsMainActivityRecyclerViewCustomGridSizeFragment absMainActivityRecyclerViewCustomGridSizeFragment = (AbsMainActivityRecyclerViewCustomGridSizeFragment) currentFragment;
+ if (item.getItemId() == R.id.action_colored_footers) {
+ item.setChecked(!item.isChecked());
+ absMainActivityRecyclerViewCustomGridSizeFragment.setAndSaveUsePalette(item.isChecked());
return true;
+ }
+ if (handleGridSizeMenuItem(absMainActivityRecyclerViewCustomGridSizeFragment, item)) {
+ return true;
+ }
}
int id = item.getItemId();
@@ -379,41 +396,68 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
return super.onOptionsItemSelected(item);
}
- private void setUpLayoutModeMenu(@NonNull AbsMainActivityRecyclerViewLayoutModeFragment fragment, @NonNull Menu menu) {
- SubMenu layoutModeMenu = menu.findItem(R.id.action_view_as).getSubMenu();
-
- switch (fragment.getLayoutMode()) {
- case PreferenceUtil.LAYOUT_MODE_LIST:
- layoutModeMenu.findItem(R.id.action_layout_mode_list).setChecked(true);
- layoutModeMenu.findItem(R.id.action_colored_footers).setEnabled(false);
+ private void setUpGridSizeMenu(@NonNull AbsMainActivityRecyclerViewCustomGridSizeFragment fragment, @NonNull SubMenu gridSizeMenu) {
+ switch (fragment.getGridSize()) {
+ case 1:
+ gridSizeMenu.findItem(R.id.action_grid_size_1).setChecked(true);
break;
- case PreferenceUtil.LAYOUT_MODE_GRID:
- layoutModeMenu.findItem(R.id.action_layout_mode_grid).setChecked(true);
- layoutModeMenu.findItem(R.id.action_colored_footers).setEnabled(true);
+ case 2:
+ gridSizeMenu.findItem(R.id.action_grid_size_2).setChecked(true);
+ break;
+ case 3:
+ gridSizeMenu.findItem(R.id.action_grid_size_3).setChecked(true);
+ break;
+ case 4:
+ gridSizeMenu.findItem(R.id.action_grid_size_4).setChecked(true);
+ break;
+ case 5:
+ gridSizeMenu.findItem(R.id.action_grid_size_5).setChecked(true);
+ break;
+ case 6:
+ gridSizeMenu.findItem(R.id.action_grid_size_6).setChecked(true);
+ break;
+ case 7:
+ gridSizeMenu.findItem(R.id.action_grid_size_7).setChecked(true);
+ break;
+ case 8:
+ gridSizeMenu.findItem(R.id.action_grid_size_8).setChecked(true);
break;
}
-
- layoutModeMenu.findItem(R.id.action_colored_footers).setChecked(fragment.loadUsePalette());
}
- private boolean handleLayoutModeMenuItem(AbsMainActivityRecyclerViewLayoutModeFragment fragment, @NonNull MenuItem item) {
- if (item.getItemId() == R.id.action_colored_footers) {
- item.setChecked(!item.isChecked());
- fragment.setUsePaletteAndSaveValue(item.isChecked());
+ private boolean handleGridSizeMenuItem(@NonNull AbsMainActivityRecyclerViewCustomGridSizeFragment fragment, @NonNull MenuItem item) {
+ int gridSize = 0;
+ switch (item.getItemId()) {
+ case R.id.action_grid_size_1:
+ gridSize = 1;
+ break;
+ case R.id.action_grid_size_2:
+ gridSize = 2;
+ break;
+ case R.id.action_grid_size_3:
+ gridSize = 3;
+ break;
+ case R.id.action_grid_size_4:
+ gridSize = 4;
+ break;
+ case R.id.action_grid_size_5:
+ gridSize = 5;
+ break;
+ case R.id.action_grid_size_6:
+ gridSize = 6;
+ break;
+ case R.id.action_grid_size_7:
+ gridSize = 7;
+ break;
+ case R.id.action_grid_size_8:
+ gridSize = 8;
+ break;
+ }
+ if (gridSize > 0) {
+ item.setChecked(true);
+ fragment.setAndSaveGridSize(gridSize);
+ toolbar.getMenu().findItem(R.id.action_colored_footers).setEnabled(fragment.canUsePalette());
return true;
- } else {
- switch (item.getItemId()) {
- case R.id.action_layout_mode_list:
- item.setChecked(true);
- fragment.setLayoutModeAndSaveValue(PreferenceUtil.LAYOUT_MODE_LIST);
- toolbar.getMenu().findItem(R.id.action_colored_footers).setEnabled(false);
- return true;
- case R.id.action_layout_mode_grid:
- item.setChecked(true);
- fragment.setLayoutModeAndSaveValue(PreferenceUtil.LAYOUT_MODE_GRID);
- toolbar.getMenu().findItem(R.id.action_colored_footers).setEnabled(true);
- return true;
- }
}
return false;
}
@@ -505,32 +549,32 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
// return pager.getCurrentItem() == PagerAdapter.MusicFragments.ARTIST.ordinal();
// }
//
-// public ArtistViewFragment getArtistFragment() {
-// return (ArtistViewFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.ARTIST.ordinal());
+// public ArtistsFragment getArtistFragment() {
+// return (ArtistsFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.ARTIST.ordinal());
// }
//
// private boolean isAlbumPage() {
// return pager.getCurrentItem() == PagerAdapter.MusicFragments.ALBUM.ordinal();
// }
//
-// public AlbumViewFragment getAlbumFragment() {
-// return (AlbumViewFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.ALBUM.ordinal());
+// public AlbumsFragment getAlbumFragment() {
+// return (AlbumsFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.ALBUM.ordinal());
// }
//
// private boolean isSongPage() {
// return pager.getCurrentItem() == PagerAdapter.MusicFragments.SONG.ordinal();
// }
//
-// public SongViewFragment getSongFragment() {
-// return (SongViewFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.SONG.ordinal());
+// public SongsFragment getSongFragment() {
+// return (SongsFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.SONG.ordinal());
// }
private boolean isPlaylistPage() {
return pager.getCurrentItem() == PagerAdapter.MusicFragments.PLAYLIST.ordinal();
}
-// public PlaylistViewFragment getPlaylistFragment() {
-// return (PlaylistViewFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.PLAYLIST.ordinal());
+// public PlaylistsFragment getPlaylistFragment() {
+// return (PlaylistsFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.PLAYLIST.ordinal());
// }
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewCustomGridSizeFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewCustomGridSizeFragment.java
new file mode 100644
index 00000000..2881f351
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewCustomGridSizeFragment.java
@@ -0,0 +1,109 @@
+package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments;
+
+import android.support.annotation.LayoutRes;
+import android.support.v7.widget.RecyclerView;
+
+import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.util.Util;
+
+/**
+ * @author Karim Abou Zeid (kabouzeid)
+ */
+public abstract class AbsMainActivityRecyclerViewCustomGridSizeFragment extends AbsMainActivityRecyclerViewFragment {
+ private int gridSize;
+
+ private boolean usePaletteInitialized;
+ private boolean usePalette;
+
+ public final int getGridSize() {
+ if (gridSize == 0) {
+ if (isLandscape()) {
+ gridSize = loadGridSizeLand();
+ } else {
+ gridSize = loadGridSize();
+ }
+ }
+ return gridSize;
+ }
+
+ /**
+ * @return whether the palette should be used at all or not
+ */
+ public final boolean usePalette() {
+ if (!usePaletteInitialized) {
+ usePalette = loadUsePalette();
+ usePaletteInitialized = true;
+ }
+ return usePalette;
+ }
+
+ public void setAndSaveGridSize(final int gridSize) {
+ int oldLayoutRes = getItemLayoutRes();
+ this.gridSize = gridSize;
+ if (isLandscape()) {
+ saveGridSizeLand(gridSize);
+ } else {
+ saveGridSize(gridSize);
+ }
+ // only recreate the adapter and layout manager if the layout res has changed
+ if (oldLayoutRes != getItemLayoutRes()) {
+ invalidateLayoutManager();
+ invalidateAdapter();
+ } else {
+ setGridSize(gridSize);
+ }
+ }
+
+ public void setAndSaveUsePalette(final boolean usePalette) {
+ this.usePalette = usePalette;
+ saveUsePalette(usePalette);
+ setUsePalette(usePalette);
+ }
+
+ /**
+ * @return whether the palette option should be available for the current item layout or not
+ */
+ public boolean canUsePalette() {
+ return getItemLayoutRes() == R.layout.item_grid;
+ }
+
+ /**
+ * Override to customize which item layout res should be used. You might also want to override {@link #canUsePalette()} then.
+ *
+ * @see #getGridSize()
+ */
+ @LayoutRes
+ protected int getItemLayoutRes() {
+ if (getGridSize() > getMaxGridSizeForList()) {
+ return R.layout.item_grid;
+ }
+ return R.layout.item_list;
+ }
+
+ protected abstract int loadGridSize();
+
+ protected abstract void saveGridSize(int gridColumns);
+
+ protected abstract int loadGridSizeLand();
+
+ protected abstract void saveGridSizeLand(int gridColumns);
+
+ protected abstract void saveUsePalette(boolean usePalette);
+
+ protected abstract boolean loadUsePalette();
+
+ protected abstract void setUsePalette(boolean usePalette);
+
+ protected abstract void setGridSize(int gridSize);
+
+ protected int getMaxGridSizeForList() {
+ if (isLandscape()) {
+ return getActivity().getResources().getInteger(R.integer.default_list_columns_land);
+ }
+ return getActivity().getResources().getInteger(R.integer.default_list_columns);
+ }
+
+ protected final boolean isLandscape() {
+ return Util.isLandscape(getActivity());
+ }
+}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java
index 37443dff..92a51c9c 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java
@@ -177,12 +177,4 @@ public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivityRecyclerViewFragment {
- public static final int NO_LAYOUT_MODE = -1;
-
- private int layoutMode = NO_LAYOUT_MODE;
-
- public int getLayoutMode() {
- if (layoutMode == NO_LAYOUT_MODE) {
- layoutMode = loadLayoutMode();
- }
- return layoutMode;
- }
-
- @LayoutRes
- protected int getItemLayoutRes() {
- switch (getLayoutMode()) {
- case PreferenceUtil.LAYOUT_MODE_LIST:
- return R.layout.item_list;
- case PreferenceUtil.LAYOUT_MODE_GRID:
- return R.layout.item_grid;
- default:
- return R.layout.item_list;
- }
- }
-
- protected int getColumnCount() {
- switch (getLayoutMode()) {
- case PreferenceUtil.LAYOUT_MODE_LIST:
- return getDefaultListColumnCount();
- case PreferenceUtil.LAYOUT_MODE_GRID:
- return getDefaultGridColumnCount();
- default:
- return getDefaultListColumnCount();
- }
- }
-
- public void setLayoutModeAndSaveValue(int layoutMode) {
- this.layoutMode = layoutMode;
- saveLayoutMode(layoutMode);
- invalidateLayoutManager();
- invalidateAdapter();
- }
-
- protected abstract int loadLayoutMode();
-
- protected abstract void saveLayoutMode(int layoutMode);
-
- public abstract void setUsePaletteAndSaveValue(boolean usePalette);
-
- public abstract boolean loadUsePalette();
-}
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/AlbumsFragment.java
similarity index 57%
rename from app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java
rename to app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumsFragment.java
index 182a61f5..407cf32e 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/AlbumsFragment.java
@@ -11,12 +11,12 @@ import com.kabouzeid.gramophone.util.PreferenceUtil;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
-public class AlbumViewFragment extends AbsMainActivityRecyclerViewLayoutModeFragment {
- public static final String TAG = AlbumViewFragment.class.getSimpleName();
+public class AlbumsFragment extends AbsMainActivityRecyclerViewCustomGridSizeFragment {
+ public static final String TAG = AlbumsFragment.class.getSimpleName();
@Override
protected GridLayoutManager createLayoutManager() {
- return new GridLayoutManager(getActivity(), getColumnCount());
+ return new GridLayoutManager(getActivity(), getGridSize());
}
@NonNull
@@ -35,25 +35,45 @@ public class AlbumViewFragment extends AbsMainActivityRecyclerViewLayoutModeFrag
return R.string.no_albums;
}
- @Override
- public void setUsePaletteAndSaveValue(boolean usePalette) {
- getAdapter().usePalette(usePalette);
- PreferenceUtil.getInstance(getActivity()).setAlbumColoredFooters(usePalette);
- }
-
@Override
public boolean loadUsePalette() {
return PreferenceUtil.getInstance(getActivity()).albumColoredFooters();
}
@Override
- protected int loadLayoutMode() {
- return PreferenceUtil.getInstance(getActivity()).getAlbumLayoutMode();
+ protected void setUsePalette(boolean usePalette) {
+ getAdapter().usePalette(usePalette);
}
@Override
- protected void saveLayoutMode(int layoutMode) {
- PreferenceUtil.getInstance(getActivity()).setAlbumLayoutMode(layoutMode);
+ protected void setGridSize(int gridSize) {
+ getLayoutManager().setSpanCount(gridSize);
+ getLayoutManager().requestLayout();
+ }
+
+ @Override
+ protected int loadGridSize() {
+ return PreferenceUtil.getInstance(getActivity()).getAlbumGridSize(getActivity());
+ }
+
+ @Override
+ protected void saveGridSize(int gridSize) {
+ PreferenceUtil.getInstance(getActivity()).setAlbumGridSize(gridSize);
+ }
+
+ @Override
+ protected int loadGridSizeLand() {
+ return PreferenceUtil.getInstance(getActivity()).getAlbumGridSizeLand(getActivity());
+ }
+
+ @Override
+ protected void saveGridSizeLand(int gridSize) {
+ PreferenceUtil.getInstance(getActivity()).setAlbumGridSizeLand(gridSize);
+ }
+
+ @Override
+ protected void saveUsePalette(boolean usePalette) {
+ PreferenceUtil.getInstance(getActivity()).setAlbumColoredFooters(usePalette);
}
@Override
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/ArtistsFragment.java
similarity index 57%
rename from app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistViewFragment.java
rename to app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistsFragment.java
index 25ac6890..5b57f336 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/ArtistsFragment.java
@@ -11,14 +11,14 @@ import com.kabouzeid.gramophone.util.PreferenceUtil;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
-public class ArtistViewFragment extends AbsMainActivityRecyclerViewLayoutModeFragment {
+public class ArtistsFragment extends AbsMainActivityRecyclerViewCustomGridSizeFragment {
- public static final String TAG = ArtistViewFragment.class.getSimpleName();
+ public static final String TAG = ArtistsFragment.class.getSimpleName();
@NonNull
@Override
protected GridLayoutManager createLayoutManager() {
- return new GridLayoutManager(getActivity(), getColumnCount());
+ return new GridLayoutManager(getActivity(), getGridSize());
}
@NonNull
@@ -43,18 +43,27 @@ public class ArtistViewFragment extends AbsMainActivityRecyclerViewLayoutModeFra
}
@Override
- protected int loadLayoutMode() {
- return PreferenceUtil.getInstance(getActivity()).getArtistLayoutMode();
+ protected int loadGridSize() {
+ return PreferenceUtil.getInstance(getActivity()).getArtistGridSize(getActivity());
}
@Override
- protected void saveLayoutMode(int layoutMode) {
- PreferenceUtil.getInstance(getActivity()).setArtistLayoutMode(layoutMode);
+ protected void saveGridSize(int gridSize) {
+ PreferenceUtil.getInstance(getActivity()).setArtistGridSize(gridSize);
}
@Override
- public void setUsePaletteAndSaveValue(boolean usePalette) {
- getAdapter().usePalette(usePalette);
+ protected int loadGridSizeLand() {
+ return PreferenceUtil.getInstance(getActivity()).getArtistGridSizeLand(getActivity());
+ }
+
+ @Override
+ protected void saveGridSizeLand(int gridSize) {
+ PreferenceUtil.getInstance(getActivity()).setArtistGridSizeLand(gridSize);
+ }
+
+ @Override
+ protected void saveUsePalette(boolean usePalette) {
PreferenceUtil.getInstance(getActivity()).setArtistColoredFooters(usePalette);
}
@@ -62,4 +71,15 @@ public class ArtistViewFragment extends AbsMainActivityRecyclerViewLayoutModeFra
public boolean loadUsePalette() {
return PreferenceUtil.getInstance(getActivity()).artistColoredFooters();
}
+
+ @Override
+ protected void setUsePalette(boolean usePalette) {
+ getAdapter().usePalette(usePalette);
+ }
+
+ @Override
+ protected void setGridSize(int gridSize) {
+ getLayoutManager().setSpanCount(gridSize);
+ getLayoutManager().requestLayout();
+ }
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistsFragment.java
similarity index 89%
rename from app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistViewFragment.java
rename to app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistsFragment.java
index 014c1600..e3898c49 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistViewFragment.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistsFragment.java
@@ -16,9 +16,9 @@ import java.util.ArrayList;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
-public class PlaylistViewFragment extends AbsMainActivityRecyclerViewFragment {
+public class PlaylistsFragment extends AbsMainActivityRecyclerViewFragment {
- public static final String TAG = PlaylistViewFragment.class.getSimpleName();
+ public static final String TAG = PlaylistsFragment.class.getSimpleName();
@NonNull
@Override
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/SongsFragment.java
similarity index 64%
rename from app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java
rename to app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongsFragment.java
index 820371a1..8bf9b386 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/SongsFragment.java
@@ -16,14 +16,14 @@ import java.util.ArrayList;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
-public class SongViewFragment extends AbsMainActivityRecyclerViewLayoutModeFragment {
+public class SongsFragment extends AbsMainActivityRecyclerViewCustomGridSizeFragment {
- public static final String TAG = SongViewFragment.class.getSimpleName();
+ public static final String TAG = SongsFragment.class.getSimpleName();
@NonNull
@Override
protected GridLayoutManager createLayoutManager() {
- return new GridLayoutManager(getActivity(), getColumnCount());
+ return new GridLayoutManager(getActivity(), getGridSize());
}
@NonNull
@@ -34,7 +34,7 @@ public class SongViewFragment extends AbsMainActivityRecyclerViewLayoutModeFragm
int itemLayoutRes = getItemLayoutRes();
boolean usePalette = loadUsePalette();
- if (getLayoutMode() == PreferenceUtil.LAYOUT_MODE_LIST) {
+ if (getGridSize() <= getMaxGridSizeForList()) {
return new ShuffleButtonSongAdapter(
mainActivity,
songs,
@@ -61,18 +61,27 @@ public class SongViewFragment extends AbsMainActivityRecyclerViewLayoutModeFragm
}
@Override
- protected int loadLayoutMode() {
- return PreferenceUtil.getInstance(getActivity()).getSongLayoutMode();
+ protected int loadGridSize() {
+ return PreferenceUtil.getInstance(getActivity()).getSongGridSize(getActivity());
}
@Override
- protected void saveLayoutMode(int layoutMode) {
- PreferenceUtil.getInstance(getActivity()).setSongLayoutMode(layoutMode);
+ protected void saveGridSize(int gridSize) {
+ PreferenceUtil.getInstance(getActivity()).setSongGridSize(gridSize);
}
@Override
- public void setUsePaletteAndSaveValue(boolean usePalette) {
- getAdapter().usePalette(usePalette);
+ protected int loadGridSizeLand() {
+ return PreferenceUtil.getInstance(getActivity()).getSongGridSizeLand(getActivity());
+ }
+
+ @Override
+ protected void saveGridSizeLand(int gridSize) {
+ PreferenceUtil.getInstance(getActivity()).setSongGridSizeLand(gridSize);
+ }
+
+ @Override
+ public void saveUsePalette(boolean usePalette) {
PreferenceUtil.getInstance(getActivity()).setSongColoredFooters(usePalette);
}
@@ -80,4 +89,15 @@ public class SongViewFragment extends AbsMainActivityRecyclerViewLayoutModeFragm
public boolean loadUsePalette() {
return PreferenceUtil.getInstance(getActivity()).songColoredFooters();
}
+
+ @Override
+ public void setUsePalette(boolean usePalette) {
+ getAdapter().usePalette(usePalette);
+ }
+
+ @Override
+ protected void setGridSize(int gridSize) {
+ getLayoutManager().setSpanCount(gridSize);
+ getLayoutManager().requestLayout();
+ }
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java
index c086e6b5..765abe4e 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java
@@ -25,11 +25,17 @@ public final class PreferenceUtil {
// don't use "colored_navigation_bar" key here as this causes a class cast exception for users upgrading from older versions
public static final String COLORED_NAVIGATION_BAR = "should_color_navigation_bar";
- public static final String ALBUM_LAYOUT_MODE = "album_layout_mode";
+ public static final String ALBUM_GRID_SIZE = "album_grid_size";
+ public static final String ALBUM_GRID_SIZE_LAND = "album_grid_size_land";
+
+ public static final String SONG_GRID_SIZE = "song_grid_size";
+ public static final String SONG_GRID_SIZE_LAND = "song_grid_size_land";
+
+ public static final String ARTIST_GRID_SIZE = "artist_grid_size";
+ public static final String ARTIST_GRID_SIZE_LAND = "artist_grid_size_land";
+
public static final String ALBUM_COLORED_FOOTERS = "album_colored_footers";
- public static final String SONG_LAYOUT_MODE = "song_layout_mode";
public static final String SONG_COLORED_FOOTERS = "song_colored_footers";
- public static final String ARTIST_LAYOUT_MODE = "artist_layout_mode";
public static final String ARTIST_COLORED_FOOTERS = "artist_colored_footers";
public static final String OPAQUE_TOOLBAR_NOW_PLAYING = "opaque_toolbar_now_playing";
@@ -257,37 +263,64 @@ public final class PreferenceUtil {
editor.apply();
}
- public static final int LAYOUT_MODE_LIST = 0;
- public static final int LAYOUT_MODE_GRID = 1;
-
- public void setAlbumLayoutMode(final int value) {
+ public void setAlbumGridSize(final int gridSize) {
final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putInt(ALBUM_LAYOUT_MODE, value);
+ editor.putInt(ALBUM_GRID_SIZE, gridSize);
editor.apply();
}
- public final int getAlbumLayoutMode() {
- return mPreferences.getInt(ALBUM_LAYOUT_MODE, LAYOUT_MODE_GRID);
+ public final int getAlbumGridSize(Context context) {
+ return mPreferences.getInt(ALBUM_GRID_SIZE, context.getResources().getInteger(R.integer.default_grid_columns));
}
- public void setSongLayoutMode(final int value) {
+ public void setSongGridSize(final int gridSize) {
final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putInt(SONG_LAYOUT_MODE, value);
+ editor.putInt(SONG_GRID_SIZE, gridSize);
editor.apply();
}
- public final int getSongLayoutMode() {
- return mPreferences.getInt(SONG_LAYOUT_MODE, LAYOUT_MODE_LIST);
+ public final int getSongGridSize(Context context) {
+ return mPreferences.getInt(SONG_GRID_SIZE, context.getResources().getInteger(R.integer.default_list_columns));
}
- public void setArtistLayoutMode(final int value) {
+ public void setArtistGridSize(final int gridSize) {
final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putInt(ARTIST_LAYOUT_MODE, value);
+ editor.putInt(ARTIST_GRID_SIZE, gridSize);
editor.apply();
}
- public final int getArtistLayoutMode() {
- return mPreferences.getInt(ARTIST_LAYOUT_MODE, LAYOUT_MODE_GRID);
+ public final int getArtistGridSize(Context context) {
+ return mPreferences.getInt(ARTIST_GRID_SIZE, context.getResources().getInteger(R.integer.default_grid_columns));
+ }
+
+ public void setAlbumGridSizeLand(final int gridSize) {
+ final SharedPreferences.Editor editor = mPreferences.edit();
+ editor.putInt(ALBUM_GRID_SIZE_LAND, gridSize);
+ editor.apply();
+ }
+
+ public final int getAlbumGridSizeLand(Context context) {
+ return mPreferences.getInt(ALBUM_GRID_SIZE_LAND, context.getResources().getInteger(R.integer.default_grid_columns_land));
+ }
+
+ public void setSongGridSizeLand(final int gridSize) {
+ final SharedPreferences.Editor editor = mPreferences.edit();
+ editor.putInt(SONG_GRID_SIZE_LAND, gridSize);
+ editor.apply();
+ }
+
+ public final int getSongGridSizeLand(Context context) {
+ return mPreferences.getInt(SONG_GRID_SIZE_LAND, context.getResources().getInteger(R.integer.default_list_columns_land));
+ }
+
+ public void setArtistGridSizeLand(final int gridSize) {
+ final SharedPreferences.Editor editor = mPreferences.edit();
+ editor.putInt(ARTIST_GRID_SIZE_LAND, gridSize);
+ editor.apply();
+ }
+
+ public final int getArtistGridSizeLand(Context context) {
+ return mPreferences.getInt(ARTIST_GRID_SIZE_LAND, context.getResources().getInteger(R.integer.default_grid_columns_land));
}
public void setAlbumColoredFooters(final boolean value) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java
index abbd99b3..8b93927d 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java
@@ -77,8 +77,8 @@ public class Util {
return context.getResources().getConfiguration().smallestScreenWidthDp >= 600;
}
- public static boolean isInPortraitMode(@NonNull final Context context) {
- return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
+ public static boolean isLandscape(@NonNull final Context context) {
+ return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
}
public static Drawable resolveDrawable(@NonNull Context context, @AttrRes int drawableAttr) {
diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml
index 17fb45f9..87a8ecdd 100644
--- a/app/src/main/res/menu/menu_main.xml
+++ b/app/src/main/res/menu/menu_main.xml
@@ -15,30 +15,49 @@
app:showAsAction="never" />
-
+ android:id="@+id/action_grid_size"
+ android:title="@string/action_grid_size">
+
+
diff --git a/app/src/main/res/values-land/integers.xml b/app/src/main/res/values-land/integers.xml
deleted file mode 100644
index 4a3e2e0f..00000000
--- a/app/src/main/res/values-land/integers.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- 4
- 2
-
\ No newline at end of file
diff --git a/app/src/main/res/values-sw600dp-land/integers.xml b/app/src/main/res/values-sw600dp-land/integers.xml
deleted file mode 100644
index 53329a50..00000000
--- a/app/src/main/res/values-sw600dp-land/integers.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- 6
- 3
-
\ No newline at end of file
diff --git a/app/src/main/res/values-sw600dp/integers.xml b/app/src/main/res/values-sw600dp/integers.xml
index 4a3e2e0f..a438ee0d 100644
--- a/app/src/main/res/values-sw600dp/integers.xml
+++ b/app/src/main/res/values-sw600dp/integers.xml
@@ -1,5 +1,7 @@
- 4
- 2
+ 4
+ 2
+ 6
+ 3
\ No newline at end of file
diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml
index 3454c447..c6a61746 100644
--- a/app/src/main/res/values/integers.xml
+++ b/app/src/main/res/values/integers.xml
@@ -1,7 +1,10 @@
- 2
- 1
+ 2
+ 4
+
+ 1
+ 2
1
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ecd395ea..5acd47de 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -60,7 +60,8 @@
"Added 1 title to the playing queue."
Added %1$d titles to the playing queue.
Remove from playlist
- View as
+ Grid size
+ Grid size (land)
Inserted %1$d songs into the playlist %2$s.
Created playlist %1$s.
Deleted playlist %1$s.
@@ -166,8 +167,14 @@
Sleep timer set for %d minutes from now.
New playlist…
New playlist
- Grid
- List
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
Colored footers
Special thanks to
Changelog