diff --git a/app/build.gradle b/app/build.gradle index 7693e4f5..730bb97c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -120,6 +120,7 @@ dependencies { transitive = true } + //noinspection GradleDynamicVersion compile 'com.android.support:support-v4:23.2.1' compile 'com.android.support:support-v13:23.2.1' compile 'com.android.support:appcompat-v7:23.2.1' @@ -137,7 +138,6 @@ dependencies { compile 'com.squareup.retrofit2:retrofit:2.0.0' compile 'com.squareup.retrofit2:converter-gson:2.0.0' compile 'com.jakewharton:butterknife:7.0.1' - //noinspection GradleDynamicVersion compile 'com.anjlab.android.iab.v3:library:1.0.+' compile 'de.psdev.licensesdialog:licensesdialog:1.8.0' compile 'com.github.bumptech.glide:glide:3.7.0' diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/MusicLibraryPagerAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/MusicLibraryPagerAdapter.java index 9f3f95ce..d5bce2c5 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/MusicLibraryPagerAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/MusicLibraryPagerAdapter.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.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 com.kabouzeid.gramophone.ui.fragments.libraryfragments.AlbumsPagerFragment; +import com.kabouzeid.gramophone.ui.fragments.libraryfragments.ArtistsPagerFragment; +import com.kabouzeid.gramophone.ui.fragments.libraryfragments.PlaylistsPagerFragment; +import com.kabouzeid.gramophone.ui.fragments.libraryfragments.SongsPagerFragment; import java.lang.ref.WeakReference; import java.util.ArrayList; @@ -107,10 +107,10 @@ public class MusicLibraryPagerAdapter extends FragmentPagerAdapter { } public enum MusicFragments { - SONG(SongsFragment.class), - ALBUM(AlbumsFragment.class), - ARTIST(ArtistsFragment.class), - PLAYLIST(PlaylistsFragment.class); + SONG(SongsPagerFragment.class), + ALBUM(AlbumsPagerFragment.class), + ARTIST(ArtistsPagerFragment.class), + PLAYLIST(PlaylistsPagerFragment.class); private final Class mFragmentClass; diff --git a/app/src/main/java/com/kabouzeid/gramophone/interfaces/KabViewsDisableAble.java b/app/src/main/java/com/kabouzeid/gramophone/interfaces/KabViewsDisableAble.java deleted file mode 100644 index ef585ac2..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/interfaces/KabViewsDisableAble.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.kabouzeid.gramophone.interfaces; - -/** - * @author Karim Abou Zeid (kabouzeid) - */ -public interface KabViewsDisableAble { - - void enableViews(); - - void disableViews(); - - boolean areViewsEnabled(); -} diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java index 4894d265..162e3c51 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java @@ -234,20 +234,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements adapter.swapDataSet(album.songs); } - @Override - public void enableViews() { - super.enableViews(); - recyclerView.setEnabled(true); - toolbar.setEnabled(true); - } - - @Override - public void disableViews() { - super.disableViews(); - recyclerView.setEnabled(false); - toolbar.setEnabled(false); - } - @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_album_detail, menu); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java index 58ec3e2e..3440fe7e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java @@ -361,22 +361,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement return super.onOptionsItemSelected(item); } - @Override - public void enableViews() { - super.enableViews(); - songListView.setEnabled(true); - toolbar.setEnabled(true); - albumRecyclerView.setEnabled(true); - } - - @Override - public void disableViews() { - super.disableViews(); - songListView.setEnabled(false); - toolbar.setEnabled(false); - albumRecyclerView.setEnabled(false); - } - @Override public MaterialCab openCab(int menuRes, @NonNull final MaterialCab.Callback callback) { if (cab != null && cab.isActive()) cab.finish(); 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 71194dc8..8d0f3b31 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 @@ -13,53 +13,35 @@ import android.os.IBinder; import android.provider.MediaStore; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -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.view.ViewPager; import android.support.v4.widget.DrawerLayout; -import android.support.v7.widget.Toolbar; import android.util.Log; -import android.view.Menu; import android.view.MenuItem; -import android.view.SubMenu; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import com.afollestad.materialcab.MaterialCab; import com.bumptech.glide.Glide; import com.kabouzeid.appthemehelper.ThemeStore; import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.appthemehelper.util.NavigationViewUtil; -import com.kabouzeid.appthemehelper.util.TabLayoutUtil; -import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.adapter.MusicLibraryPagerAdapter; import com.kabouzeid.gramophone.dialogs.ChangelogDialog; -import com.kabouzeid.gramophone.dialogs.CreatePlaylistDialog; import com.kabouzeid.gramophone.dialogs.DonationDialog; -import com.kabouzeid.gramophone.dialogs.SleepTimerDialog; import com.kabouzeid.gramophone.glide.SongGlideRequest; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.SearchQueryHelper; -import com.kabouzeid.gramophone.interfaces.CabHolder; -import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble; import com.kabouzeid.gramophone.loader.AlbumLoader; import com.kabouzeid.gramophone.loader.ArtistSongLoader; import com.kabouzeid.gramophone.loader.PlaylistSongLoader; -import com.kabouzeid.gramophone.loader.SongLoader; 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.activities.intro.AppIntroActivity; -import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment; -import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityRecyclerViewCustomGridSizeFragment; -import com.kabouzeid.gramophone.util.NavigationUtil; -import com.kabouzeid.gramophone.util.PhonographColorUtil; +import com.kabouzeid.gramophone.ui.fragments.FolderFragment; +import com.kabouzeid.gramophone.ui.fragments.LibraryFragment; import com.kabouzeid.gramophone.util.PreferenceUtil; import com.kabouzeid.gramophone.util.Util; import com.sothree.slidinguppanel.SlidingUpPanelLayout; @@ -71,28 +53,23 @@ import butterknife.Bind; import butterknife.ButterKnife; public class MainActivity extends AbsSlidingMusicPanelActivity - implements KabViewsDisableAble, CabHolder, DrawerLayout.DrawerListener { + implements DrawerLayout.DrawerListener { public static final String TAG = MainActivity.class.getSimpleName(); public static final int APP_INTRO_REQUEST = 100; - @Bind(R.id.toolbar) - Toolbar toolbar; - @Bind(R.id.tabs) - TabLayout tabs; - @Bind(R.id.appbar) - AppBarLayout appbar; - @Bind(R.id.pager) - ViewPager pager; + private static final int LIBRARY = 0; + private static final int FOLDERS = 1; + @Bind(R.id.navigation_view) NavigationView navigationView; @Bind(R.id.drawer_layout) DrawerLayout drawerLayout; + MainActivityFragmentCallbacks currentFragment; + @Nullable private View navigationDrawerHeader; - private MusicLibraryPagerAdapter pagerAdapter; - private MaterialCab cab; private boolean blockRequestPermissions; @@ -105,32 +82,38 @@ public class MainActivity extends AbsSlidingMusicPanelActivity Util.setStatusBarTranslucent(getWindow()); drawerLayout.setFitsSystemWindows(false); navigationView.setFitsSystemWindows(false); + //noinspection ConstantConditions findViewById(R.id.drawer_content_container).setFitsSystemWindows(false); } - setStatusbarColorAuto(); - setNavigationbarColorAuto(); - setTaskDescriptionColorAuto(); - setUpDrawerLayout(); - setUpToolbar(); - setUpViewPager(); - if (!PreferenceUtil.getInstance(this).introShown()) { - PreferenceUtil.getInstance(this).setIntroShown(); - ChangelogDialog.setChangelogRead(this); - blockRequestPermissions = true; - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - startActivityForResult(new Intent(MainActivity.this, AppIntroActivity.class), APP_INTRO_REQUEST); - } - }, 200); - } else { + setMusicChooser(PreferenceUtil.getInstance(this).getLastMusicChooser()); + + if (!checkShowIntro()) { checkShowChangelog(); } } + private void setMusicChooser(int key) { + PreferenceUtil.getInstance(this).setLastMusicChooser(key); + switch (key) { + case LIBRARY: + navigationView.setCheckedItem(R.id.nav_library); + setCurrentFragment(new LibraryFragment()); + break; + case FOLDERS: + navigationView.setCheckedItem(R.id.nav_folders); + setCurrentFragment(new FolderFragment()); + break; + } + } + + private void setCurrentFragment(Fragment fragment) { + getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment, LibraryFragment.TAG).commit(); + currentFragment = (MainActivityFragmentCallbacks) fragment; + } + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); @@ -156,37 +139,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity return contentView; } - private void setUpViewPager() { - pagerAdapter = new MusicLibraryPagerAdapter(this, getSupportFragmentManager()); - pager.setAdapter(pagerAdapter); - pager.setOffscreenPageLimit(pagerAdapter.getCount() - 1); // => all - - tabs.setupWithViewPager(pager); - - int primaryColor = ThemeStore.primaryColor(this); - int normalColor = ToolbarContentTintHelper.toolbarSubtitleColor(this, primaryColor); - int selectedColor = ToolbarContentTintHelper.toolbarTitleColor(this, primaryColor); - TabLayoutUtil.setTabIconColors(tabs, normalColor, selectedColor); - tabs.setTabTextColors(normalColor, selectedColor); - tabs.setSelectedTabIndicatorColor(ThemeStore.accentColor(this)); - - int startPosition = PreferenceUtil.getInstance(this).getDefaultStartPage(); - startPosition = startPosition == -1 ? PreferenceUtil.getInstance(this).getLastStartPage() : startPosition; - pager.setCurrentItem(startPosition); - } - - private void setUpToolbar() { - int primaryColor = ThemeStore.primaryColor(this); - appbar.setBackgroundColor(primaryColor); - toolbar.setBackgroundColor(primaryColor); - toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp); - setTitle(getResources().getString(R.string.app_name)); - setSupportActionBar(toolbar); - } - private void setUpNavigationView() { - navigationView.setCheckedItem(R.id.nav_library); - int accentColor = ThemeStore.accentColor(this); NavigationViewUtil.setItemIconColors(navigationView, ATHUtil.resolveColor(this, R.attr.iconColor, ThemeStore.textColorSecondary(this)), accentColor); NavigationViewUtil.setItemTextColors(navigationView, ThemeStore.textColorPrimary(this), accentColor); @@ -197,10 +150,20 @@ public class MainActivity extends AbsSlidingMusicPanelActivity drawerLayout.closeDrawers(); switch (menuItem.getItemId()) { case R.id.nav_library: - // TODO + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + setMusicChooser(LIBRARY); + } + }, 300); break; case R.id.nav_folders: - // TODO + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + setMusicChooser(FOLDERS); + } + }, 300); break; case R.id.support_development: new Handler().postDelayed(new Runnable() { @@ -234,7 +197,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity private void setUpDrawerLayout() { setUpNavigationView(); - drawerLayout.setDrawerListener(this); + drawerLayout.addDrawerListener(this); } private void updateNavigationDrawerHeader() { @@ -266,25 +229,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity } } - @Override - public void enableViews() { - try { - super.enableViews(); - toolbar.setEnabled(true); - ((AbsMainActivityFragment) getCurrentFragment()).enableViews(); - } catch (NullPointerException ignored) { - } - } - - @Override - public void disableViews() { - try { - super.disableViews(); - ((AbsMainActivityFragment) getCurrentFragment()).disableViews(); - } catch (NullPointerException ignored) { - } - } - @Override public void onPlayingMetaChanged() { super.onPlayingMetaChanged(); @@ -297,31 +241,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity handlePlaybackIntent(getIntent()); } - @Override - public boolean onCreateOptionsMenu(@NonNull Menu menu) { - getMenuInflater().inflate(R.menu.menu_main, menu); - if (isPlaylistPage()) { - menu.add(0, R.id.action_new_playlist, 0, R.string.new_playlist_title); - } - Fragment currentFragment = getCurrentFragment(); - if (currentFragment instanceof AbsMainActivityRecyclerViewCustomGridSizeFragment && currentFragment.isAdded()) { - AbsMainActivityRecyclerViewCustomGridSizeFragment absMainActivityRecyclerViewCustomGridSizeFragment = (AbsMainActivityRecyclerViewCustomGridSizeFragment) currentFragment; - - MenuItem gridSizeItem = menu.findItem(R.id.action_grid_size); - if (Util.isLandscape(getResources())) { - 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_grid_size); - menu.removeItem(R.id.action_colored_footers); - } - return super.onCreateOptionsMenu(menu); - } - @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { if (item.getItemId() == android.R.id.home) { @@ -332,137 +251,15 @@ public class MainActivity extends AbsSlidingMusicPanelActivity } return true; } - - Fragment currentFragment = getCurrentFragment(); - 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(); - switch (id) { - case R.id.action_sleep_timer: - new SleepTimerDialog().show(getSupportFragmentManager(), "SET_SLEEP_TIMER"); - return true; - case R.id.action_equalizer: - NavigationUtil.openEqualizer(this); - return true; - case R.id.action_shuffle_all: - MusicPlayerRemote.openAndShuffleQueue(SongLoader.getAllSongs(this), true); - return true; - case R.id.action_new_playlist: - CreatePlaylistDialog.create().show(getSupportFragmentManager(), "CREATE_PLAYLIST"); - return true; - case R.id.action_search: - startActivity(new Intent(MainActivity.this, SearchActivity.class)); - return true; - } return super.onOptionsItemSelected(item); } - 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 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; - } - int maxGridSize = fragment.getMaxGridSize(); - if (maxGridSize < 8) { - gridSizeMenu.findItem(R.id.action_grid_size_8).setVisible(false); - } - if (maxGridSize < 7) { - gridSizeMenu.findItem(R.id.action_grid_size_7).setVisible(false); - } - if (maxGridSize < 6) { - gridSizeMenu.findItem(R.id.action_grid_size_6).setVisible(false); - } - if (maxGridSize < 5) { - gridSizeMenu.findItem(R.id.action_grid_size_5).setVisible(false); - } - if (maxGridSize < 4) { - gridSizeMenu.findItem(R.id.action_grid_size_4).setVisible(false); - } - if (maxGridSize < 3) { - gridSizeMenu.findItem(R.id.action_grid_size_3).setVisible(false); - } - } - - 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; - } - return false; - } @Override public void onBackPressed() { if (drawerLayout.isDrawerOpen(navigationView)) drawerLayout.closeDrawers(); - else if (cab != null && cab.isActive()) cab.finish(); - else super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - PreferenceUtil.getInstance(MainActivity.this).setLastStartPage(pager.getCurrentItem()); + else if (currentFragment == null || !currentFragment.onBackPressed()) + super.onBackPressed(); } private void handlePlaybackIntent(@Nullable Intent intent) { @@ -531,37 +328,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity return id; } - public Fragment getCurrentFragment() { - return pagerAdapter.getFragment(pager.getCurrentItem()); - } - - private boolean isPlaylistPage() { - return pager.getCurrentItem() == MusicLibraryPagerAdapter.MusicFragments.PLAYLIST.ordinal(); - } - - @Override - public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) { - if (cab != null && cab.isActive()) cab.finish(); - cab = new MaterialCab(this, R.id.cab_stub) - .setMenu(menu) - .setCloseDrawableRes(R.drawable.ic_close_white_24dp) - .setBackgroundColor(PhonographColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this))) - .start(callback); - return cab; - } - - public void addOnAppBarOffsetChangedListener(OnOffsetChangedListener onOffsetChangedListener) { - appbar.addOnOffsetChangedListener(onOffsetChangedListener); - } - - public void removeOnAppBarOffsetChangedListener(OnOffsetChangedListener onOffsetChangedListener) { - appbar.removeOnOffsetChangedListener(onOffsetChangedListener); - } - - public int getTotalAppBarScrollingRange() { - return appbar.getTotalScrollRange(); - } - @Override public void onPanelExpanded(View view) { super.onPanelExpanded(view); @@ -574,16 +340,34 @@ public class MainActivity extends AbsSlidingMusicPanelActivity drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); } - private void checkShowChangelog() { + private boolean checkShowIntro() { + if (!PreferenceUtil.getInstance(this).introShown()) { + PreferenceUtil.getInstance(this).setIntroShown(); + ChangelogDialog.setChangelogRead(this); + blockRequestPermissions = true; + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + startActivityForResult(new Intent(MainActivity.this, AppIntroActivity.class), APP_INTRO_REQUEST); + } + }, 50); + return true; + } + return false; + } + + private boolean checkShowChangelog() { try { PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); int currentVersion = pInfo.versionCode; if (currentVersion != PreferenceUtil.getInstance(this).getLastChangelogVersion()) { ChangelogDialog.create().show(getSupportFragmentManager(), "CHANGE_LOG_DIALOG"); + return true; } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } + return false; } @Override @@ -605,4 +389,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity public void onDrawerStateChanged(int newState) { } + + public interface MainActivityFragmentCallbacks { + boolean onBackPressed(); + } } \ No newline at end of file diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java index 9cc8a149..d2b146d5 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java @@ -71,18 +71,6 @@ public class SearchActivity extends AbsMusicServiceActivity implements SearchVie getSupportActionBar().setDisplayHomeAsUpEnabled(true); } - @Override - public void enableViews() { - super.enableViews(); - recyclerView.setEnabled(true); - } - - @Override - public void disableViews() { - super.disableViews(); - recyclerView.setEnabled(false); - } - @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_search, menu); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java index edbf8be9..31ca3a85 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java @@ -17,12 +17,11 @@ import android.view.View; import com.kabouzeid.appthemehelper.ThemeStore; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble; /** * @author Karim Abou Zeid (kabouzeid) */ -public abstract class AbsBaseActivity extends AbsThemeActivity implements KabViewsDisableAble { +public abstract class AbsBaseActivity extends AbsThemeActivity { public static final int PERMISSION_REQUEST = 100; private boolean areViewsEnabled; @@ -54,7 +53,6 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie @Override protected void onResume() { super.onResume(); - enableViews(); if (hasPermissions() != createdWithPermissionsGranted) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { @@ -88,31 +86,6 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie } - /** - * Should be overwritten and re enable all {@link android.view.View} to ensure they are accessible again - *

- * This is necessary because of a bug with the shared element transition - */ - @Override - public void enableViews() { - areViewsEnabled = true; - } - - /** - * Should be overwritten and disable all views that start a new activity on click to prevent opening an activity multiple times - *

- * This is necessary because of a bug with the shared element transition - */ - @Override - public void disableViews() { - areViewsEnabled = false; - } - - @Override - public boolean areViewsEnabled() { - return areViewsEnabled; - } - @Nullable protected String[] getPermissionsToRequest() { return null; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/AbsMainActivityFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/AbsMainActivityFragment.java new file mode 100644 index 00000000..5b5fe08d --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/AbsMainActivityFragment.java @@ -0,0 +1,22 @@ +package com.kabouzeid.gramophone.ui.fragments; + +import android.os.Bundle; +import android.support.v4.app.Fragment; + +import com.kabouzeid.gramophone.ui.activities.MainActivity; + +/** + * @author Karim Abou Zeid (kabouzeid) + */ +public abstract class AbsMainActivityFragment extends Fragment { + + public MainActivity getMainActivity() { + return (MainActivity) getActivity(); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + setHasOptionsMenu(true); + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/FolderFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/FolderFragment.java new file mode 100644 index 00000000..e85b5bf4 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/FolderFragment.java @@ -0,0 +1,45 @@ +package com.kabouzeid.gramophone.ui.fragments; + + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.ui.activities.MainActivity; +import com.kabouzeid.gramophone.util.PreferenceUtil; + +import butterknife.ButterKnife; + +public class FolderFragment extends AbsMainActivityFragment implements MainActivity.MainActivityFragmentCallbacks { + public static final String TAG = FolderFragment.class.getSimpleName(); + + public FolderFragment() { + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_folder, container, false); + ButterKnife.bind(this, view); + return view; + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + PreferenceUtil.getInstance(getActivity()).setLastPage(-2); + } + + @Override + public void onDestroyView() { + ButterKnife.unbind(this); + super.onDestroyView(); + } + + @Override + public boolean onBackPressed() { + return false; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/LibraryFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/LibraryFragment.java new file mode 100644 index 00000000..4d0e5208 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/LibraryFragment.java @@ -0,0 +1,313 @@ +package com.kabouzeid.gramophone.ui.fragments; + + +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.design.widget.AppBarLayout; +import android.support.design.widget.TabLayout; +import android.support.v4.app.Fragment; +import android.support.v4.view.ViewPager; +import android.support.v7.widget.Toolbar; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.SubMenu; +import android.view.View; +import android.view.ViewGroup; + +import com.afollestad.materialcab.MaterialCab; +import com.kabouzeid.appthemehelper.ThemeStore; +import com.kabouzeid.appthemehelper.util.TabLayoutUtil; +import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper; +import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.adapter.MusicLibraryPagerAdapter; +import com.kabouzeid.gramophone.dialogs.CreatePlaylistDialog; +import com.kabouzeid.gramophone.dialogs.SleepTimerDialog; +import com.kabouzeid.gramophone.helper.MusicPlayerRemote; +import com.kabouzeid.gramophone.interfaces.CabHolder; +import com.kabouzeid.gramophone.loader.SongLoader; +import com.kabouzeid.gramophone.ui.activities.MainActivity; +import com.kabouzeid.gramophone.ui.activities.SearchActivity; +import com.kabouzeid.gramophone.ui.fragments.libraryfragments.AbsLibraryRecyclerViewCustomGridSizePagerFragment; +import com.kabouzeid.gramophone.util.NavigationUtil; +import com.kabouzeid.gramophone.util.PhonographColorUtil; +import com.kabouzeid.gramophone.util.PreferenceUtil; +import com.kabouzeid.gramophone.util.Util; + +import butterknife.Bind; +import butterknife.ButterKnife; + +public class LibraryFragment extends AbsMainActivityFragment implements CabHolder, MainActivity.MainActivityFragmentCallbacks, ViewPager.OnPageChangeListener { + public static final String TAG = LibraryFragment.class.getSimpleName(); + + @Bind(R.id.toolbar) + Toolbar toolbar; + @Bind(R.id.tabs) + TabLayout tabs; + @Bind(R.id.appbar) + AppBarLayout appbar; + @Bind(R.id.pager) + ViewPager pager; + + private MusicLibraryPagerAdapter pagerAdapter; + private MaterialCab cab; + + public LibraryFragment() { + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_library, container, false); + ButterKnife.bind(this, view); + return view; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + pager.removeOnPageChangeListener(this); + ButterKnife.unbind(this); + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + getMainActivity().setStatusbarColorAuto(); + getMainActivity().setNavigationbarColorAuto(); + getMainActivity().setTaskDescriptionColorAuto(); + + setUpToolbar(); + setUpViewPager(); + } + + private void setUpToolbar() { + int primaryColor = ThemeStore.primaryColor(getActivity()); + appbar.setBackgroundColor(primaryColor); + toolbar.setBackgroundColor(primaryColor); + toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp); + getActivity().setTitle(getResources().getString(R.string.app_name)); + getMainActivity().setSupportActionBar(toolbar); + } + + private void setUpViewPager() { + pagerAdapter = new MusicLibraryPagerAdapter(getActivity(), getChildFragmentManager()); + pager.setAdapter(pagerAdapter); + pager.setOffscreenPageLimit(pagerAdapter.getCount() - 1); + + tabs.setupWithViewPager(pager); + + int primaryColor = ThemeStore.primaryColor(getActivity()); + int normalColor = ToolbarContentTintHelper.toolbarSubtitleColor(getActivity(), primaryColor); + int selectedColor = ToolbarContentTintHelper.toolbarTitleColor(getActivity(), primaryColor); + TabLayoutUtil.setTabIconColors(tabs, normalColor, selectedColor); + tabs.setTabTextColors(normalColor, selectedColor); + tabs.setSelectedTabIndicatorColor(ThemeStore.accentColor(getActivity())); + + int startPosition = PreferenceUtil.getInstance(getActivity()).getDefaultStartPage(); + startPosition = startPosition == -1 ? PreferenceUtil.getInstance(getActivity()).getLastPage() : startPosition; + pager.setCurrentItem(startPosition); + PreferenceUtil.getInstance(getActivity()).setLastPage(startPosition); // just in case + pager.addOnPageChangeListener(this); + } + + public Fragment getCurrentFragment() { + return pagerAdapter.getFragment(pager.getCurrentItem()); + } + + private boolean isPlaylistPage() { + return pager.getCurrentItem() == MusicLibraryPagerAdapter.MusicFragments.PLAYLIST.ordinal(); + } + + @Override + public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) { + if (cab != null && cab.isActive()) cab.finish(); + cab = new MaterialCab(getMainActivity(), R.id.cab_stub) + .setMenu(menu) + .setCloseDrawableRes(R.drawable.ic_close_white_24dp) + .setBackgroundColor(PhonographColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(getActivity()))) + .start(callback); + return cab; + } + + public void addOnAppBarOffsetChangedListener(AppBarLayout.OnOffsetChangedListener onOffsetChangedListener) { + appbar.addOnOffsetChangedListener(onOffsetChangedListener); + } + + public void removeOnAppBarOffsetChangedListener(AppBarLayout.OnOffsetChangedListener onOffsetChangedListener) { + appbar.removeOnOffsetChangedListener(onOffsetChangedListener); + } + + public int getTotalAppBarScrollingRange() { + return appbar.getTotalScrollRange(); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + inflater.inflate(R.menu.menu_main, menu); + if (isPlaylistPage()) { + menu.add(0, R.id.action_new_playlist, 0, R.string.new_playlist_title); + } + Fragment currentFragment = getCurrentFragment(); + if (currentFragment instanceof AbsLibraryRecyclerViewCustomGridSizePagerFragment && currentFragment.isAdded()) { + AbsLibraryRecyclerViewCustomGridSizePagerFragment absLibraryRecyclerViewCustomGridSizeFragment = (AbsLibraryRecyclerViewCustomGridSizePagerFragment) currentFragment; + + MenuItem gridSizeItem = menu.findItem(R.id.action_grid_size); + if (Util.isLandscape(getResources())) { + gridSizeItem.setTitle(R.string.action_grid_size_land); + } + setUpGridSizeMenu(absLibraryRecyclerViewCustomGridSizeFragment, gridSizeItem.getSubMenu()); + + menu.findItem(R.id.action_colored_footers).setChecked(absLibraryRecyclerViewCustomGridSizeFragment.usePalette()); + menu.findItem(R.id.action_colored_footers).setEnabled(absLibraryRecyclerViewCustomGridSizeFragment.canUsePalette()); + } else { + menu.removeItem(R.id.action_grid_size); + menu.removeItem(R.id.action_colored_footers); + } + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + Fragment currentFragment = getCurrentFragment(); + if (currentFragment instanceof AbsLibraryRecyclerViewCustomGridSizePagerFragment) { + AbsLibraryRecyclerViewCustomGridSizePagerFragment absLibraryRecyclerViewCustomGridSizeFragment = (AbsLibraryRecyclerViewCustomGridSizePagerFragment) currentFragment; + if (item.getItemId() == R.id.action_colored_footers) { + item.setChecked(!item.isChecked()); + absLibraryRecyclerViewCustomGridSizeFragment.setAndSaveUsePalette(item.isChecked()); + return true; + } + if (handleGridSizeMenuItem(absLibraryRecyclerViewCustomGridSizeFragment, item)) { + return true; + } + } + + int id = item.getItemId(); + switch (id) { + case R.id.action_sleep_timer: + new SleepTimerDialog().show(getChildFragmentManager(), "SET_SLEEP_TIMER"); + return true; + case R.id.action_equalizer: + NavigationUtil.openEqualizer(getActivity()); + return true; + case R.id.action_shuffle_all: + MusicPlayerRemote.openAndShuffleQueue(SongLoader.getAllSongs(getActivity()), true); + return true; + case R.id.action_new_playlist: + CreatePlaylistDialog.create().show(getChildFragmentManager(), "CREATE_PLAYLIST"); + return true; + case R.id.action_search: + startActivity(new Intent(getActivity(), SearchActivity.class)); + return true; + } + return super.onOptionsItemSelected(item); + } + + private void setUpGridSizeMenu(@NonNull AbsLibraryRecyclerViewCustomGridSizePagerFragment fragment, @NonNull SubMenu gridSizeMenu) { + switch (fragment.getGridSize()) { + case 1: + gridSizeMenu.findItem(R.id.action_grid_size_1).setChecked(true); + break; + 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; + } + int maxGridSize = fragment.getMaxGridSize(); + if (maxGridSize < 8) { + gridSizeMenu.findItem(R.id.action_grid_size_8).setVisible(false); + } + if (maxGridSize < 7) { + gridSizeMenu.findItem(R.id.action_grid_size_7).setVisible(false); + } + if (maxGridSize < 6) { + gridSizeMenu.findItem(R.id.action_grid_size_6).setVisible(false); + } + if (maxGridSize < 5) { + gridSizeMenu.findItem(R.id.action_grid_size_5).setVisible(false); + } + if (maxGridSize < 4) { + gridSizeMenu.findItem(R.id.action_grid_size_4).setVisible(false); + } + if (maxGridSize < 3) { + gridSizeMenu.findItem(R.id.action_grid_size_3).setVisible(false); + } + } + + private boolean handleGridSizeMenuItem(@NonNull AbsLibraryRecyclerViewCustomGridSizePagerFragment 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; + } + return false; + } + + @Override + public boolean onBackPressed() { + if (cab != null && cab.isActive()) { + cab.finish(); + return true; + } + return false; + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + } + + @Override + public void onPageSelected(int position) { + PreferenceUtil.getInstance(getActivity()).setLastPage(position); + } + + @Override + public void onPageScrollStateChanged(int state) { + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/libraryfragments/AbsLibraryPagerFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/libraryfragments/AbsLibraryPagerFragment.java new file mode 100644 index 00000000..565d4c76 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/libraryfragments/AbsLibraryPagerFragment.java @@ -0,0 +1,22 @@ +package com.kabouzeid.gramophone.ui.fragments.libraryfragments; + +import android.os.Bundle; +import android.support.v4.app.Fragment; + +import com.kabouzeid.gramophone.ui.fragments.LibraryFragment; + +/** + * @author Karim Abou Zeid (kabouzeid) + */ +public class AbsLibraryPagerFragment extends Fragment { + + public LibraryFragment getLibraryFragment() { + return (LibraryFragment) getParentFragment(); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + setHasOptionsMenu(true); + } +} 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/libraryfragments/AbsLibraryRecyclerViewCustomGridSizePagerFragment.java similarity index 94% rename from app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewCustomGridSizeFragment.java rename to app/src/main/java/com/kabouzeid/gramophone/ui/fragments/libraryfragments/AbsLibraryRecyclerViewCustomGridSizePagerFragment.java index ba25f13d..200e5d6e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewCustomGridSizeFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/libraryfragments/AbsLibraryRecyclerViewCustomGridSizePagerFragment.java @@ -1,4 +1,4 @@ -package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments; +package com.kabouzeid.gramophone.ui.fragments.libraryfragments; import android.support.annotation.LayoutRes; import android.support.v7.widget.RecyclerView; @@ -9,7 +9,7 @@ import com.kabouzeid.gramophone.util.Util; /** * @author Karim Abou Zeid (kabouzeid) */ -public abstract class AbsMainActivityRecyclerViewCustomGridSizeFragment extends AbsMainActivityRecyclerViewFragment { +public abstract class AbsLibraryRecyclerViewCustomGridSizePagerFragment extends AbsLibraryRecyclerViewPagerFragment { private int gridSize; private boolean usePaletteInitialized; 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/libraryfragments/AbsLibraryRecyclerViewPagerFragment.java similarity index 83% rename from app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java rename to app/src/main/java/com/kabouzeid/gramophone/ui/fragments/libraryfragments/AbsLibraryRecyclerViewPagerFragment.java index 2e80b6ec..50926fc0 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/libraryfragments/AbsLibraryRecyclerViewPagerFragment.java @@ -1,4 +1,4 @@ -package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments; +package com.kabouzeid.gramophone.ui.fragments.libraryfragments; import android.os.Bundle; import android.support.annotation.LayoutRes; @@ -27,9 +27,9 @@ import butterknife.ButterKnife; /** * @author Karim Abou Zeid (kabouzeid) */ -public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivityFragment implements OnOffsetChangedListener, MusicServiceEventListener { +public abstract class AbsLibraryRecyclerViewPagerFragment extends AbsLibraryPagerFragment implements OnOffsetChangedListener, MusicServiceEventListener { - public static final String TAG = AbsMainActivityRecyclerViewFragment.class.getSimpleName(); + public static final String TAG = AbsLibraryRecyclerViewPagerFragment.class.getSimpleName(); @Bind(R.id.container) View container; @@ -53,8 +53,8 @@ public abstract class AbsMainActivityRecyclerViewFragment { - public static final String TAG = AlbumsFragment.class.getSimpleName(); +public class AlbumsPagerFragment extends AbsLibraryRecyclerViewCustomGridSizePagerFragment { + public static final String TAG = AlbumsPagerFragment.class.getSimpleName(); @Override protected GridLayoutManager createLayoutManager() { @@ -25,11 +25,11 @@ public class AlbumsFragment extends AbsMainActivityRecyclerViewCustomGridSizeFra int itemLayoutRes = getItemLayoutRes(); applyRecyclerViewPaddingForLayoutRes(itemLayoutRes); return new AlbumAdapter( - getMainActivity(), + getLibraryFragment().getMainActivity(), AlbumLoader.getAllAlbums(getActivity()), itemLayoutRes, loadUsePalette(), - getMainActivity()); + getLibraryFragment()); } @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistsFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/libraryfragments/ArtistsPagerFragment.java similarity index 86% rename from app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistsFragment.java rename to app/src/main/java/com/kabouzeid/gramophone/ui/fragments/libraryfragments/ArtistsPagerFragment.java index d7621931..deb869cb 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistsFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/libraryfragments/ArtistsPagerFragment.java @@ -1,4 +1,4 @@ -package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments; +package com.kabouzeid.gramophone.ui.fragments.libraryfragments; import android.support.annotation.NonNull; import android.support.v7.widget.GridLayoutManager; @@ -11,9 +11,9 @@ import com.kabouzeid.gramophone.util.PreferenceUtil; /** * @author Karim Abou Zeid (kabouzeid) */ -public class ArtistsFragment extends AbsMainActivityRecyclerViewCustomGridSizeFragment { +public class ArtistsPagerFragment extends AbsLibraryRecyclerViewCustomGridSizePagerFragment { - public static final String TAG = ArtistsFragment.class.getSimpleName(); + public static final String TAG = ArtistsPagerFragment.class.getSimpleName(); @NonNull @Override @@ -27,11 +27,11 @@ public class ArtistsFragment extends AbsMainActivityRecyclerViewCustomGridSizeFr int itemLayoutRes = getItemLayoutRes(); applyRecyclerViewPaddingForLayoutRes(itemLayoutRes); return new ArtistAdapter( - getMainActivity(), + getLibraryFragment().getMainActivity(), ArtistLoader.getAllArtists(getActivity()), itemLayoutRes, loadUsePalette(), - getMainActivity()); + getLibraryFragment()); } @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistsFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/libraryfragments/PlaylistsPagerFragment.java similarity index 77% rename from app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistsFragment.java rename to app/src/main/java/com/kabouzeid/gramophone/ui/fragments/libraryfragments/PlaylistsPagerFragment.java index e3898c49..b58ebd89 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistsFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/libraryfragments/PlaylistsPagerFragment.java @@ -1,4 +1,4 @@ -package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments; +package com.kabouzeid.gramophone.ui.fragments.libraryfragments; import android.support.annotation.NonNull; import android.support.v7.widget.LinearLayoutManager; @@ -16,9 +16,9 @@ import java.util.ArrayList; /** * @author Karim Abou Zeid (kabouzeid) */ -public class PlaylistsFragment extends AbsMainActivityRecyclerViewFragment { +public class PlaylistsPagerFragment extends AbsLibraryRecyclerViewPagerFragment { - public static final String TAG = PlaylistsFragment.class.getSimpleName(); + public static final String TAG = PlaylistsPagerFragment.class.getSimpleName(); @NonNull @Override @@ -29,7 +29,7 @@ public class PlaylistsFragment extends AbsMainActivityRecyclerViewFragment { +public class SongsPagerFragment extends AbsLibraryRecyclerViewCustomGridSizePagerFragment { - public static final String TAG = SongsFragment.class.getSimpleName(); + public static final String TAG = SongsPagerFragment.class.getSimpleName(); @NonNull @Override @@ -29,7 +28,6 @@ public class SongsFragment extends AbsMainActivityRecyclerViewCustomGridSizeFrag @NonNull @Override protected SongAdapter createAdapter() { - MainActivity mainActivity = getMainActivity(); ArrayList songs = SongLoader.getAllSongs(getActivity()); int itemLayoutRes = getItemLayoutRes(); applyRecyclerViewPaddingForLayoutRes(itemLayoutRes); @@ -37,18 +35,18 @@ public class SongsFragment extends AbsMainActivityRecyclerViewCustomGridSizeFrag if (getGridSize() <= getMaxGridSizeForList()) { return new ShuffleButtonSongAdapter( - mainActivity, + getLibraryFragment().getMainActivity(), songs, itemLayoutRes, usePalette, - mainActivity); + getLibraryFragment()); } return new SongAdapter( - mainActivity, + getLibraryFragment().getMainActivity(), songs, itemLayoutRes, usePalette, - mainActivity); + getLibraryFragment()); } @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java deleted file mode 100644 index e046ad27..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments; - -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; - -import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble; -import com.kabouzeid.gramophone.ui.activities.MainActivity; - -/** - * @author Karim Abou Zeid (kabouzeid) - */ -public abstract class AbsMainActivityFragment extends Fragment implements KabViewsDisableAble { - private boolean areViewsEnabled; - - @NonNull - protected MainActivity getMainActivity() { - return (MainActivity) getActivity(); - } - - @Override - public void enableViews() { - areViewsEnabled = true; - } - - @Override - public void disableViews() { - areViewsEnabled = false; - } - - @Override - public boolean areViewsEnabled() { - return areViewsEnabled; - } - - @Override - public void onResume() { - super.onResume(); - enableViews(); - } - - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - setHasOptionsMenu(true); - } -} diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java index 4ee56273..c036c3c6 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java @@ -12,7 +12,6 @@ import android.widget.Toast; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; -import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble; import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.ui.activities.AlbumDetailActivity; import com.kabouzeid.gramophone.ui.activities.ArtistDetailActivity; @@ -24,8 +23,6 @@ import com.kabouzeid.gramophone.ui.activities.PlaylistDetailActivity; public class NavigationUtil { public static void goToArtist(@NonNull final Activity activity, final int artistId, @Nullable Pair... sharedElements) { - if (!disableViewsAndCheckIsReadyForTransition(activity)) return; - final Intent intent = new Intent(activity, ArtistDetailActivity.class); intent.putExtra(ArtistDetailActivity.EXTRA_ARTIST_ID, artistId); @@ -34,8 +31,6 @@ public class NavigationUtil { } public static void goToAlbum(@NonNull final Activity activity, final int albumId, @Nullable Pair... sharedElements) { - if (!disableViewsAndCheckIsReadyForTransition(activity)) return; - final Intent intent = new Intent(activity, AlbumDetailActivity.class); intent.putExtra(AlbumDetailActivity.EXTRA_ALBUM_ID, albumId); @@ -44,24 +39,12 @@ public class NavigationUtil { } public static void goToPlaylist(@NonNull final Activity activity, final Playlist playlist, @Nullable Pair... sharedElements) { - if (!disableViewsAndCheckIsReadyForTransition(activity)) return; - final Intent intent = new Intent(activity, PlaylistDetailActivity.class); intent.putExtra(PlaylistDetailActivity.EXTRA_PLAYLIST, playlist); activity.startActivity(intent); } - private static boolean disableViewsAndCheckIsReadyForTransition(@NonNull final Activity activity) { - if (activity instanceof KabViewsDisableAble) { - if (((KabViewsDisableAble) activity).areViewsEnabled()) { - ((KabViewsDisableAble) activity).disableViews(); - return true; - } - } - return false; - } - public static void openEqualizer(@NonNull final Activity activity) { final int sessionId = MusicPlayerRemote.getAudioSessionId(); if (sessionId == AudioEffect.ERROR_BAD_VALUE) { 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 bae173a8..c47ad217 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java @@ -13,7 +13,8 @@ import com.kabouzeid.gramophone.helper.SortOrder; public final class PreferenceUtil { public static final String GENERAL_THEME = "general_theme"; public static final String DEFAULT_START_PAGE = "default_start_page"; - public static final String LAST_START_PAGE = "last_start_page"; + public static final String LAST_PAGE = "last_start_page"; + public static final String LAST_MUSIC_CHOOSER = "last_music_chooser"; public static final String ARTIST_SORT_ORDER = "artist_sort_order"; public static final String ARTIST_SONG_SORT_ORDER = "artist_song_sort_order"; @@ -100,16 +101,24 @@ public final class PreferenceUtil { return Integer.parseInt(mPreferences.getString(DEFAULT_START_PAGE, "-1")); } - public void setLastStartPage(final int value) { + public void setLastPage(final int value) { final SharedPreferences.Editor editor = mPreferences.edit(); - editor.putInt(LAST_START_PAGE, value); + editor.putInt(LAST_PAGE, value); editor.apply(); } - public static final int DEFAULT_PAGE = 0; + public final int getLastPage() { + return mPreferences.getInt(LAST_PAGE, 0); + } - public final int getLastStartPage() { - return mPreferences.getInt(LAST_START_PAGE, DEFAULT_PAGE); + public void setLastMusicChooser(final int value) { + final SharedPreferences.Editor editor = mPreferences.edit(); + editor.putInt(LAST_MUSIC_CHOOSER, value); + editor.apply(); + } + + public final int getLastMusicChooser() { + return mPreferences.getInt(LAST_MUSIC_CHOOSER, 0); } public final boolean coloredNotification() { diff --git a/app/src/main/res/layout/activity_main_content.xml b/app/src/main/res/layout/activity_main_content.xml index d69455fb..b19e4a91 100644 --- a/app/src/main/res/layout/activity_main_content.xml +++ b/app/src/main/res/layout/activity_main_content.xml @@ -1,65 +1,5 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + android:layout_height="match_parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_folder.xml b/app/src/main/res/layout/fragment_folder.xml new file mode 100644 index 00000000..5bde048f --- /dev/null +++ b/app/src/main/res/layout/fragment_folder.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_library.xml b/app/src/main/res/layout/fragment_library.xml new file mode 100644 index 00000000..dd883293 --- /dev/null +++ b/app/src/main/res/layout/fragment_library.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/menu_drawer.xml b/app/src/main/res/menu/menu_drawer.xml index 65f8f894..980fd874 100644 --- a/app/src/main/res/menu/menu_drawer.xml +++ b/app/src/main/res/menu/menu_drawer.xml @@ -9,10 +9,9 @@ android:icon="@drawable/ic_library_music_white_24dp" android:title="@string/library" /> + android:title="@string/folders" /> Folders Saved playlist to %s. Failed to save playlist (%s). + + + Hello blank fragment diff --git a/app/src/main/res/values/strings_activity_settings.xml b/app/src/main/res/values/strings_activity_settings.xml index 33eba14a..ccde656b 100644 --- a/app/src/main/res/values/strings_activity_settings.xml +++ b/app/src/main/res/values/strings_activity_settings.xml @@ -5,6 +5,7 @@ @string/albums @string/artists @string/playlists + @string/folders @@ -13,6 +14,7 @@ 1 2 3 + -2