diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java index 11cb7726..b2876f0b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java @@ -52,11 +52,12 @@ public class AlbumAdapter extends AbsMultiSelectAdapter dataSet, @LayoutRes int itemLayoutRes, @Nullable CabHolder cabHolder) { + public AlbumAdapter(@NonNull AppCompatActivity activity, ArrayList dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) { super(activity, cabHolder, R.menu.menu_media_selection); this.activity = activity; this.dataSet = dataSet; this.itemLayoutRes = itemLayoutRes; + this.usePalette = usePalette; setHasStableIds(true); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/album/HorizontalAlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/album/HorizontalAlbumAdapter.java index 7ca8a328..d35c0c47 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/album/HorizontalAlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/album/HorizontalAlbumAdapter.java @@ -19,7 +19,7 @@ public class HorizontalAlbumAdapter extends AlbumAdapter { public static final String TAG = AlbumAdapter.class.getSimpleName(); public HorizontalAlbumAdapter(@NonNull AppCompatActivity activity, ArrayList dataSet, @Nullable CabHolder cabHolder) { - super(activity, dataSet, HorizontalAdapterHelper.LAYOUT_RES, cabHolder); + super(activity, dataSet, HorizontalAdapterHelper.LAYOUT_RES, false, cabHolder); usePalette = false; } 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 afeed734..1a23f326 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 @@ -16,6 +16,7 @@ import android.support.design.widget.AppBarLayout; import android.support.design.widget.AppBarLayout.OnOffsetChangedListener; import android.support.design.widget.NavigationView; import android.support.design.widget.TabLayout; +import android.support.v4.app.Fragment; import android.support.v4.util.Pair; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; @@ -49,11 +50,14 @@ import com.kabouzeid.gramophone.loader.SongLoader; import com.kabouzeid.gramophone.model.Song; 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.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.util.MusicUtil; import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.PreferenceUtil; -import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.ViewUtil; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; @@ -300,7 +304,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity try { super.enableViews(); toolbar.setEnabled(true); - ((AbsMainActivityFragment) pagerAdapter.getFragment(pager.getCurrentItem())).enableViews(); + ((AbsMainActivityFragment) getCurrentFragment()).enableViews(); } catch (NullPointerException ignored) { } } @@ -309,7 +313,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity public void disableViews() { try { super.disableViews(); - ((AbsMainActivityFragment) pagerAdapter.getFragment(pager.getCurrentItem())).disableViews(); + ((AbsMainActivityFragment) getCurrentFragment()).disableViews(); } catch (NullPointerException ignored) { } } @@ -336,11 +340,15 @@ public class MainActivity extends AbsSlidingMusicPanelActivity @Override public boolean onCreateOptionsMenu(@NonNull Menu menu) { + getMenuInflater().inflate(R.menu.menu_main, menu); if (isPlaylistPage()) { - getMenuInflater().inflate(R.menu.menu_playlists, menu); + 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); } else { - getMenuInflater().inflate(R.menu.menu_main, menu); - setUpGridMenu(menu); + menu.removeItem(R.id.action_view_as); } restoreActionBar(); return true; @@ -360,7 +368,11 @@ public class MainActivity extends AbsSlidingMusicPanelActivity ViewUtil.invalidateToolbarPopupMenuTint(toolbar); - if (handleGridSize(item)) return true; + Fragment currentFragment = getCurrentFragment(); + if (currentFragment instanceof AbsMainActivityRecyclerViewLayoutModeFragment) { + if (handleLayoutModeMenuItem((AbsMainActivityRecyclerViewLayoutModeFragment) currentFragment, item)) + return true; + } int id = item.getItemId(); switch (id) { @@ -389,63 +401,45 @@ public class MainActivity extends AbsSlidingMusicPanelActivity return super.onOptionsItemSelected(item); } - private void setUpGridMenu(@NonNull Menu menu) { - boolean isPortrait = Util.isInPortraitMode(this); - int columns = isPortrait ? PreferenceUtil.getInstance(this).getAlbumGridColumns() : PreferenceUtil.getInstance(this).getAlbumGridColumnsLand(); - String title = isPortrait ? getResources().getString(R.string.action_view_as) : getResources().getString(R.string.action_view_as_land); + private void setUpLayoutModeMenu(@NonNull AbsMainActivityRecyclerViewLayoutModeFragment fragment, @NonNull Menu menu) { + SubMenu layoutModeMenu = menu.findItem(R.id.action_view_as).getSubMenu(); - MenuItem gridSizeItem = menu.findItem(R.id.action_view_as); - gridSizeItem.setTitle(title); + 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); + 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); + break; + } - SubMenu gridSizeMenu = gridSizeItem.getSubMenu(); - gridSizeMenu.getItem(columns - 1).setChecked(true); + layoutModeMenu.findItem(R.id.action_colored_footers).setChecked(fragment.loadUsePalette()); } - private boolean handleGridSize(@NonNull MenuItem item) { - int size = getGridSize(item); - - if (size > 0) { - item.setChecked(true); - if (isAlbumPage()) { - getAlbumFragment().setColumns(size); - if (Util.isInPortraitMode(this)) { - PreferenceUtil.getInstance(this).setAlbumGridColumns(size); - } else { - PreferenceUtil.getInstance(this).setAlbumGridColumnsLand(size); - } - } + private boolean handleLayoutModeMenuItem(AbsMainActivityRecyclerViewLayoutModeFragment fragment, @NonNull MenuItem item) { + if (item.getItemId() == R.id.action_colored_footers) { + item.setChecked(!item.isChecked()); + fragment.setUsePaletteAndSaveValue(item.isChecked()); 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; } - private int getGridSize(MenuItem item) { - int size = -1; - - switch (item.getItemId()) { - case R.id.gridSizeOne: - size = 1; - break; - case R.id.gridSizeTwo: - size = 2; - break; - case R.id.gridSizeThree: - size = 3; - break; - case R.id.gridSizeFour: - size = 4; - break; - case R.id.gridSizeFive: - size = 5; - break; - case R.id.gridSizeSix: - size = 6; - break; - } - - return size; - } - @Override public void onConfigurationChanged(Configuration newConfig) { drawerToggle.onConfigurationChanged(newConfig); @@ -526,13 +520,17 @@ public class MainActivity extends AbsSlidingMusicPanelActivity return id; } -// private boolean isArtistPage() { -// return pager.getCurrentItem() == PagerAdapter.MusicFragments.ARTIST.ordinal(); -// } -// -// public ArtistViewFragment getArtistFragment() { -// return (ArtistViewFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.ARTIST.ordinal()); -// } + public Fragment getCurrentFragment() { + return pagerAdapter.getFragment(pager.getCurrentItem()); + } + + private boolean isArtistPage() { + return pager.getCurrentItem() == PagerAdapter.MusicFragments.ARTIST.ordinal(); + } + + public ArtistViewFragment getArtistFragment() { + return (ArtistViewFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.ARTIST.ordinal()); + } private boolean isAlbumPage() { return pager.getCurrentItem() == PagerAdapter.MusicFragments.ALBUM.ordinal(); @@ -543,21 +541,21 @@ public class MainActivity extends AbsSlidingMusicPanelActivity return (AlbumViewFragment) 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()); -// } + private boolean isSongPage() { + return pager.getCurrentItem() == PagerAdapter.MusicFragments.SONG.ordinal(); + } + + public SongViewFragment getSongFragment() { + return (SongViewFragment) 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 PlaylistViewFragment getPlaylistFragment() { + return (PlaylistViewFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.PLAYLIST.ordinal()); + } @Override public boolean dispatchKeyEvent(@NonNull KeyEvent event) { 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 def303cf..90d82eec 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 @@ -66,6 +66,11 @@ 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; + } + + protected int getItemLayout() { + 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 getColumnNumber() { + switch (getLayoutMode()) { + case PreferenceUtil.LAYOUT_MODE_LIST: + return getDefaultListColumnNumber(); + case PreferenceUtil.LAYOUT_MODE_GRID: + return getDefaultGridColumnNumber(); + default: + return R.layout.item_list; + } + } + + 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/AlbumViewFragment.java index e87708cd..dd95162c 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/AlbumViewFragment.java @@ -7,18 +7,16 @@ import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.album.AlbumAdapter; import com.kabouzeid.gramophone.loader.AlbumLoader; import com.kabouzeid.gramophone.util.PreferenceUtil; -import com.kabouzeid.gramophone.util.Util; /** * @author Karim Abou Zeid (kabouzeid) */ -public class AlbumViewFragment extends AbsMainActivityRecyclerViewFragment { +public class AlbumViewFragment extends AbsMainActivityRecyclerViewLayoutModeFragment { public static final String TAG = AlbumViewFragment.class.getSimpleName(); @Override protected GridLayoutManager createLayoutManager() { - int columns = Util.isInPortraitMode(getActivity()) ? PreferenceUtil.getInstance(getActivity()).getAlbumGridColumns() : PreferenceUtil.getInstance(getActivity()).getAlbumGridColumnsLand(); - return new GridLayoutManager(getActivity(), columns); + return new GridLayoutManager(getActivity(), getColumnNumber()); } @NonNull @@ -27,7 +25,8 @@ public class AlbumViewFragment extends AbsMainActivityRecyclerViewFragment - - + android:id="@+id/action_layout_mode_list" + android:title="@string/list" /> - - - - + android:id="@+id/action_layout_mode_grid" + android:title="@string/grid" /> diff --git a/app/src/main/res/menu/menu_playlists.xml b/app/src/main/res/menu/menu_playlists.xml deleted file mode 100644 index 2d56f8ea..00000000 --- a/app/src/main/res/menu/menu_playlists.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-land/integers.xml b/app/src/main/res/values-land/integers.xml new file mode 100644 index 00000000..4a3e2e0f --- /dev/null +++ b/app/src/main/res/values-land/integers.xml @@ -0,0 +1,5 @@ + + + 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 new file mode 100644 index 00000000..53329a50 --- /dev/null +++ b/app/src/main/res/values-sw600dp-land/integers.xml @@ -0,0 +1,5 @@ + + + 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 new file mode 100644 index 00000000..4a3e2e0f --- /dev/null +++ b/app/src/main/res/values-sw600dp/integers.xml @@ -0,0 +1,5 @@ + + + 4 + 2 + \ No newline at end of file diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml new file mode 100644 index 00000000..e6ce922e --- /dev/null +++ b/app/src/main/res/values/ids.xml @@ -0,0 +1,4 @@ + + + + \ 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 cf629fc2..3454c447 100644 --- a/app/src/main/res/values/integers.xml +++ b/app/src/main/res/values/integers.xml @@ -1,6 +1,7 @@ + 2 + 1 1 - \ No newline at end of file