diff --git a/app/build.gradle b/app/build.gradle index 7f9b2949..367fcdba 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -86,7 +86,7 @@ dependencies { implementation 'com.afollestad.material-dialogs:core:0.9.6.0' implementation 'com.afollestad.material-dialogs:commons:0.9.6.0' - implementation 'com.afollestad:material-cab:0.1.12' + implementation 'com.afollestad:material-cab:2.0.1' implementation 'me.zhanghai.android.materialprogressbar:library:1.6.1' implementation 'com.github.QuadFlask:colorpicker:ef73ced217' diff --git a/app/src/main/java/com/dkanada/gramophone/activities/MainActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/MainActivity.java index d1c774b7..3378dbce 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/MainActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/MainActivity.java @@ -14,7 +14,10 @@ import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.drawerlayout.widget.DrawerLayout; +import com.afollestad.materialcab.attached.AttachedCab; +import com.afollestad.materialcab.attached.AttachedCabKt; import com.dkanada.gramophone.activities.base.AbsMusicContentActivity; +import com.dkanada.gramophone.interfaces.CabHolder; import com.dkanada.gramophone.util.NavigationUtil; import com.dkanada.gramophone.util.PreferenceUtil; import com.dkanada.gramophone.util.ThemeUtil; @@ -35,14 +38,14 @@ import org.jellyfin.apiclient.model.dto.BaseItemDto; import java.util.List; -public class MainActivity extends AbsMusicContentActivity { +public class MainActivity extends AbsMusicContentActivity implements CabHolder { private ActivityMainDrawerLayoutBinding binding; private ActivityMainContentBinding contentBinding; private NavigationDrawerHeaderBinding navigationBinding; private boolean onLogout; @Nullable - private MainActivityFragmentCallbacks currentFragment; + private AttachedCab cab; @Nullable private List libraries; @@ -93,8 +96,6 @@ public class MainActivity extends AbsMusicContentActivity { menu.getItem(0).setChecked(true); if (state == null) { setCurrentFragment(LibraryFragment.newInstance()); - } else { - restoreCurrentFragment(); } }); } @@ -112,11 +113,6 @@ public class MainActivity extends AbsMusicContentActivity { private void setCurrentFragment(Fragment fragment) { getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment, null).commit(); - currentFragment = (MainActivityFragmentCallbacks) fragment; - } - - private void restoreCurrentFragment() { - currentFragment = (MainActivityFragmentCallbacks) getSupportFragmentManager().findFragmentById(R.id.fragment_container); } @Override @@ -225,6 +221,22 @@ public class MainActivity extends AbsMusicContentActivity { updateNavigationDrawerHeader(); } + @Override + public void onCreateCab(AttachedCab cab) { + this.cab = cab; + } + + @Override + public void onBackPressed() { + if (binding.drawerLayout.isDrawerOpen(binding.navigationView)) { + binding.drawerLayout.closeDrawers(); + } else if (cab != null && AttachedCabKt.isActive(cab)) { + AttachedCabKt.destroy(cab); + } else { + super.onBackPressed(); + } + } + @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { if (item.getItemId() == android.R.id.home) { @@ -240,16 +252,6 @@ public class MainActivity extends AbsMusicContentActivity { return super.onOptionsItemSelected(item); } - @Override - public boolean handleBackPress() { - if (binding.drawerLayout.isDrawerOpen(binding.navigationView)) { - binding.drawerLayout.closeDrawers(); - return true; - } - - return super.handleBackPress() || (currentFragment != null && currentFragment.handleBackPress()); - } - @Override public void onPanelExpanded(View view) { super.onPanelExpanded(view); @@ -261,8 +263,4 @@ public class MainActivity extends AbsMusicContentActivity { super.onPanelCollapsed(view); binding.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); } - - public interface MainActivityFragmentCallbacks { - boolean handleBackPress(); - } } diff --git a/app/src/main/java/com/dkanada/gramophone/activities/base/AbsMusicPanelActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/base/AbsMusicPanelActivity.java index 04e9a70f..11ccb174 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/base/AbsMusicPanelActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/base/AbsMusicPanelActivity.java @@ -214,22 +214,6 @@ public abstract class AbsMusicPanelActivity extends AbsMusicServiceActivity impl return binding.getRoot(); } - @Override - public void onBackPressed() { - if (!handleBackPress()) super.onBackPressed(); - } - - public boolean handleBackPress() { - if (binding.slidingLayout.getPanelHeight() != 0 && playerFragment.onBackPressed()) - return true; - if (getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) { - collapsePanel(); - return true; - } - - return false; - } - @Override public void onPaletteColorChanged() { if (getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) { @@ -288,6 +272,17 @@ public abstract class AbsMusicPanelActivity extends AbsMusicServiceActivity impl } } + @Override + public void onBackPressed() { + boolean queuePanelCollapsed = playerFragment.onBackPressed(); + + if (!queuePanelCollapsed && getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) { + collapsePanel(); + } else if (!queuePanelCollapsed) { + super.onBackPressed(); + } + } + @Override public void setTaskDescriptionColor(int color) { taskDescriptionColor = color; diff --git a/app/src/main/java/com/dkanada/gramophone/activities/details/AlbumDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/details/AlbumDetailActivity.java index 045f7271..6b17cf76 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/details/AlbumDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/details/AlbumDetailActivity.java @@ -10,7 +10,8 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import com.afollestad.materialcab.MaterialCab; +import com.afollestad.materialcab.attached.AttachedCab; +import com.afollestad.materialcab.attached.AttachedCabKt; import com.dkanada.gramophone.BuildConfig; import com.dkanada.gramophone.activities.base.AbsMusicContentActivity; import com.dkanada.gramophone.databinding.ActivityAlbumDetailBinding; @@ -40,7 +41,7 @@ public class AlbumDetailActivity extends AbsMusicContentActivity implements Pale private ActivityAlbumDetailBinding binding; - private MaterialCab cab; + private AttachedCab cab; private int headerViewHeight; private int toolbarColor; @@ -197,20 +198,16 @@ public class AlbumDetailActivity extends AbsMusicContentActivity implements Pale } @Override - public MaterialCab openCab(int menuRes, @NonNull final MaterialCab.Callback callback) { - if (cab != null && cab.isActive()) cab.finish(); - cab = new MaterialCab(this, R.id.cab_stub) - .setMenu(menuRes) - .setCloseDrawableRes(R.drawable.ic_close_white_24dp) - .setBackgroundColor(getPaletteColor()) - .start(callback); - return cab; + public void onCreateCab(AttachedCab cab) { + cab.backgroundColor(null, getPaletteColor()); + + this.cab = cab; } @Override public void onBackPressed() { - if (cab != null && cab.isActive()) { - cab.finish(); + if (cab != null && AttachedCabKt.isActive(cab)) { + AttachedCabKt.destroy(cab); } else { binding.list.stopScroll(); super.onBackPressed(); diff --git a/app/src/main/java/com/dkanada/gramophone/activities/details/ArtistDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/details/ArtistDetailActivity.java index 05154d35..cb28df37 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/details/ArtistDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/details/ArtistDetailActivity.java @@ -11,7 +11,8 @@ import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import com.afollestad.materialcab.MaterialCab; +import com.afollestad.materialcab.attached.AttachedCab; +import com.afollestad.materialcab.attached.AttachedCabKt; import com.dkanada.gramophone.BuildConfig; import com.dkanada.gramophone.activities.base.AbsMusicContentActivity; import com.dkanada.gramophone.adapter.song.SongAdapter; @@ -42,7 +43,7 @@ public class ArtistDetailActivity extends AbsMusicContentActivity implements Pal private ActivityArtistDetailBinding binding; - private MaterialCab cab; + private AttachedCab cab; private int headerViewHeight; private int toolbarColor; @@ -225,20 +226,16 @@ public class ArtistDetailActivity extends AbsMusicContentActivity implements Pal } @Override - public MaterialCab openCab(int menuRes, @NonNull final MaterialCab.Callback callback) { - if (cab != null && cab.isActive()) cab.finish(); - cab = new MaterialCab(this, R.id.cab_stub) - .setMenu(menuRes) - .setCloseDrawableRes(R.drawable.ic_close_white_24dp) - .setBackgroundColor(getPaletteColor()) - .start(callback); - return cab; + public void onCreateCab(AttachedCab cab) { + cab.backgroundColor(null, getPaletteColor()); + + this.cab = cab; } @Override public void onBackPressed() { - if (cab != null && cab.isActive()) { - cab.finish(); + if (cab != null && AttachedCabKt.isActive(cab)) { + AttachedCabKt.destroy(cab); } else { binding.albums.stopScroll(); super.onBackPressed(); diff --git a/app/src/main/java/com/dkanada/gramophone/activities/details/GenreDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/details/GenreDetailActivity.java index 769f984f..cefcf1e2 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/details/GenreDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/details/GenreDetailActivity.java @@ -9,7 +9,8 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import com.afollestad.materialcab.MaterialCab; +import com.afollestad.materialcab.attached.AttachedCab; +import com.afollestad.materialcab.attached.AttachedCabKt; import com.dkanada.gramophone.BuildConfig; import com.dkanada.gramophone.activities.base.AbsMusicContentActivity; import com.dkanada.gramophone.databinding.ActivityGenreDetailBinding; @@ -34,7 +35,7 @@ public class GenreDetailActivity extends AbsMusicContentActivity implements CabH private Genre genre; - private MaterialCab cab; + private AttachedCab cab; private SongAdapter adapter; @Override @@ -110,21 +111,14 @@ public class GenreDetailActivity extends AbsMusicContentActivity implements CabH } @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(PreferenceUtil.getInstance(this).getPrimaryColor()) - .start(callback); - - return cab; + public void onCreateCab(AttachedCab cab) { + this.cab = cab; } @Override public void onBackPressed() { - if (cab != null && cab.isActive()) { - cab.finish(); + if (cab != null && AttachedCabKt.isActive(cab)) { + AttachedCabKt.destroy(cab); } else { binding.recyclerView.stopScroll(); super.onBackPressed(); diff --git a/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java index b6f8c116..a4b0b8e5 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java @@ -9,7 +9,8 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import com.afollestad.materialcab.MaterialCab; +import com.afollestad.materialcab.attached.AttachedCab; +import com.afollestad.materialcab.attached.AttachedCabKt; import com.dkanada.gramophone.BuildConfig; import com.dkanada.gramophone.activities.base.AbsMusicContentActivity; import com.dkanada.gramophone.databinding.ActivityPlaylistDetailBinding; @@ -43,7 +44,7 @@ public class PlaylistDetailActivity extends AbsMusicContentActivity implements C private Playlist playlist; - private MaterialCab cab; + private AttachedCab cab; private SongAdapter adapter; private RecyclerView.Adapter wrappedAdapter; @@ -136,21 +137,14 @@ public class PlaylistDetailActivity extends AbsMusicContentActivity implements C } @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(PreferenceUtil.getInstance(this).getPrimaryColor()) - .start(callback); - - return cab; + public void onCreateCab(AttachedCab cab) { + this.cab = cab; } @Override public void onBackPressed() { - if (cab != null && cab.isActive()) { - cab.finish(); + if (cab != null && AttachedCabKt.isActive(cab)) { + AttachedCabKt.destroy(cab); } else { binding.recyclerView.stopScroll(); super.onBackPressed(); diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/PlaylistAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/PlaylistAdapter.java index d1eb1f1d..47298df8 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/PlaylistAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/PlaylistAdapter.java @@ -35,7 +35,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter dataSet, @LayoutRes int itemLayoutRes, @Nullable CabHolder cabHolder) { - super(activity, cabHolder, R.menu.menu_select_playlist); + super(activity, R.id.cab_stub, R.menu.menu_select_playlist); this.activity = activity; this.dataSet = dataSet; @@ -178,7 +178,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) { - super(activity, cabHolder, R.menu.menu_select_media); + super(activity, R.id.cab_stub, R.menu.menu_select_media); this.activity = activity; this.dataSet = dataSet; @@ -214,7 +214,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) { - super(activity, cabHolder, R.menu.menu_select_media); + super(activity, R.id.cab_stub, R.menu.menu_select_media); this.activity = activity; this.dataSet = dataSet; this.itemLayoutRes = itemLayoutRes; @@ -188,7 +188,7 @@ public class ArtistAdapter extends AbsMultiSelectAdapter extends RecyclerView.Adapter implements MaterialCab.Callback { - private final Context context; - private final CabHolder cabHolder; - private int menuRes; - - private MaterialCab cab; - private List checked; - - public AbsMultiSelectAdapter(Context context, @Nullable CabHolder cabHolder, @MenuRes int menuRes) { - this.context = context; - this.cabHolder = cabHolder; - this.menuRes = menuRes; - - this.checked = new ArrayList<>(); - } - - protected void setMultiSelectMenuRes(@MenuRes int menuRes) { - this.menuRes = menuRes; - } - - protected boolean toggleChecked(final int position) { - if (cabHolder != null) { - I identifier = getIdentifier(position); - if (identifier == null) return false; - - if (!checked.remove(identifier)) checked.add(identifier); - - notifyItemChanged(position); - updateCab(); - return true; - } - - return false; - } - - protected void checkAll() { - if (cabHolder != null) { - checked.clear(); - for (int i = 0; i < getItemCount(); i++) { - I identifier = getIdentifier(i); - if (identifier != null) { - checked.add(identifier); - } - } - - notifyDataSetChanged(); - updateCab(); - } - } - - private void updateCab() { - if (cabHolder != null) { - if (cab == null || !cab.isActive()) { - cab = cabHolder.openCab(menuRes, this); - } - - final int size = checked.size(); - if (size <= 0) cab.finish(); - else if (size == 1) cab.setTitle(getName(checked.get(0))); - else cab.setTitle(context.getString(R.string.x_selected, size)); - } - } - - private void clearChecked() { - checked.clear(); - notifyDataSetChanged(); - } - - protected boolean isChecked(I identifier) { - return checked.contains(identifier); - } - - protected boolean isInQuickSelectMode() { - return cab != null && cab.isActive(); - } - - @Override - public boolean onCabCreated(MaterialCab materialCab, Menu menu) { - return true; - } - - @Override - public boolean onCabItemClicked(MenuItem menuItem) { - if (menuItem.getItemId() == R.id.action_select_all) { - checkAll(); - } else { - onMultipleItemAction(menuItem, new ArrayList<>(checked)); - cab.finish(); - clearChecked(); - } - - return true; - } - - @Override - public boolean onCabFinished(MaterialCab materialCab) { - clearChecked(); - return true; - } - - protected String getName(I object) { - return object.toString(); - } - - @Nullable - protected abstract I getIdentifier(int position); - - protected abstract void onMultipleItemAction(MenuItem menuItem, List selection); -} diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/base/AbsMultiSelectAdapter.kt b/app/src/main/java/com/dkanada/gramophone/adapter/base/AbsMultiSelectAdapter.kt new file mode 100644 index 00000000..ed77755c --- /dev/null +++ b/app/src/main/java/com/dkanada/gramophone/adapter/base/AbsMultiSelectAdapter.kt @@ -0,0 +1,122 @@ +package com.dkanada.gramophone.adapter.base + +import android.app.Activity +import android.content.Context +import android.view.MenuItem +import androidx.recyclerview.widget.RecyclerView +import com.afollestad.materialcab.attached.AttachedCab +import com.afollestad.materialcab.attached.destroy +import com.afollestad.materialcab.attached.isActive +import com.afollestad.materialcab.attached.isDestroyed +import com.afollestad.materialcab.createCab +import com.dkanada.gramophone.R +import com.dkanada.gramophone.interfaces.CabHolder +import com.dkanada.gramophone.util.PreferenceUtil +import java.util.* + +abstract class AbsMultiSelectAdapter( + private val context: Context, + private val viewRes: Int, + private var menuRes: Int, +) : RecyclerView.Adapter() { + private var checked: MutableList = ArrayList() + private var cab: AttachedCab? = null + + protected fun isChecked(identifier: I): Boolean { + return checked.contains(identifier) + } + + protected fun isActive(): Boolean { + return cab.isActive() + } + + protected fun toggleChecked(position: Int): Boolean { + val identifier = getIdentifier(position) + + if (identifier != null && !checked.remove(identifier)) { + checked.add(identifier) + } + + notifyItemChanged(position) + updateCab() + + return true + } + + protected fun setMenu(menuRes: Int) { + this.menuRes = menuRes + } + + private fun updateCab() { + when { + cab == null || cab.isDestroyed() -> { + val activity = context as Activity + val cabHolder = context as CabHolder + + cab = activity.createCab(viewRes) { + menu(menuRes) + + backgroundColor(literal = PreferenceUtil.getInstance(context).primaryColor) + title(literal = getName(checked[0])) + + onCreate { cab, _ -> cabHolder.onCreateCab(cab) } + onSelection { item -> onSelectionCab(item) } + onDestroy { onDestroyCab() } + } + } + checked.size <= 0 && cab.isActive() -> { + cab.destroy() + } + checked.size == 1 -> { + cab?.title(literal = getName(checked[0])) + } + else -> { + cab?.title(literal = context.getString(R.string.x_selected, checked.size)) + } + } + } + + private fun checkAll() { + checked.clear() + + for (i in 0 until itemCount) { + val identifier = getIdentifier(i) + + if (identifier != null) { + checked.add(identifier) + } + } + + notifyDataSetChanged() + updateCab() + } + + private fun checkNone() { + checked.clear() + notifyDataSetChanged() + } + + private fun onSelectionCab(menuItem: MenuItem): Boolean { + if (menuItem.itemId == R.id.action_select_all) { + checkAll() + } else { + onMultipleItemAction(menuItem, ArrayList(checked)) + cab.destroy() + } + + return true + } + + private fun onDestroyCab(): Boolean { + checkNone() + + return true + } + + protected abstract fun getName(identifier: I): String? + + protected abstract fun getIdentifier(position: Int): I? + + @JvmSuppressWildcards + protected abstract fun onMultipleItemAction(menuItem: MenuItem, selection: List) +} diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/song/AbsOffsetSongAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/song/AbsOffsetSongAdapter.java index d4aa2d6e..98205d60 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/song/AbsOffsetSongAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/song/AbsOffsetSongAdapter.java @@ -95,7 +95,7 @@ public abstract class AbsOffsetSongAdapter extends SongAdapter { @Override public void onClick(View v) { - if (isInQuickSelectMode() && getItemViewType() != OFFSET_ITEM) { + if (isActive() && getItemViewType() != OFFSET_ITEM) { toggleChecked(getBindingAdapterPosition()); } else { MusicPlayerRemote.openQueue(dataSet, getBindingAdapterPosition() - 1, true); diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/song/PlaylistSongAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/song/PlaylistSongAdapter.java index d9e96286..d3af6426 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/song/PlaylistSongAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/song/PlaylistSongAdapter.java @@ -20,7 +20,7 @@ import java.util.List; public class PlaylistSongAdapter extends AbsOffsetSongAdapter { public PlaylistSongAdapter(AppCompatActivity activity, @NonNull List dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) { super(activity, dataSet, itemLayoutRes, usePalette, cabHolder, false); - setMultiSelectMenuRes(R.menu.menu_select_playlist_song); + setMenu(R.menu.menu_select_playlist_song); } @Override diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/song/SongAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/song/SongAdapter.java index abfa9e2e..870d2037 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/song/SongAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/song/SongAdapter.java @@ -12,7 +12,6 @@ import androidx.annotation.Nullable; import androidx.core.util.Pair; import androidx.appcompat.app.AppCompatActivity; -import com.afollestad.materialcab.MaterialCab; import com.dkanada.gramophone.util.ThemeUtil; import com.dkanada.gramophone.R; import com.dkanada.gramophone.adapter.base.AbsMultiSelectAdapter; @@ -32,7 +31,7 @@ import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; import java.util.List; -public class SongAdapter extends AbsMultiSelectAdapter implements MaterialCab.Callback, FastScrollRecyclerView.SectionedAdapter { +public class SongAdapter extends AbsMultiSelectAdapter implements FastScrollRecyclerView.SectionedAdapter { protected final AppCompatActivity activity; protected List dataSet; @@ -46,7 +45,7 @@ public class SongAdapter extends AbsMultiSelectAdapter dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder, boolean showSectionName) { - super(activity, cabHolder, R.menu.menu_select_media); + super(activity, R.id.cab_stub, R.menu.menu_select_media); this.activity = activity; this.dataSet = dataSet; @@ -262,7 +261,7 @@ public class SongAdapter extends AbsMultiSelectAdapter dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet(); - return new AlbumAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment()); + return new AlbumAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment().getMainActivity()); } @NonNull diff --git a/app/src/main/java/com/dkanada/gramophone/fragments/library/ArtistsFragment.java b/app/src/main/java/com/dkanada/gramophone/fragments/library/ArtistsFragment.java index abcecbfe..7c452d9d 100644 --- a/app/src/main/java/com/dkanada/gramophone/fragments/library/ArtistsFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/fragments/library/ArtistsFragment.java @@ -36,7 +36,7 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr notifyLayoutResChanged(itemLayoutRes); List dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet(); - return new ArtistAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment()); + return new ArtistAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment().getMainActivity()); } @NonNull diff --git a/app/src/main/java/com/dkanada/gramophone/fragments/library/PlaylistsFragment.java b/app/src/main/java/com/dkanada/gramophone/fragments/library/PlaylistsFragment.java index 3b85d639..6c99393f 100644 --- a/app/src/main/java/com/dkanada/gramophone/fragments/library/PlaylistsFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/fragments/library/PlaylistsFragment.java @@ -29,7 +29,7 @@ public class PlaylistsFragment extends AbsLibraryPagerRecyclerViewFragment dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet(); - return new PlaylistAdapter(getLibraryFragment().getMainActivity(), dataSet, R.layout.item_list_single_row, getLibraryFragment()); + return new PlaylistAdapter(getLibraryFragment().getMainActivity(), dataSet, R.layout.item_list_single_row, getLibraryFragment().getMainActivity()); } @NonNull diff --git a/app/src/main/java/com/dkanada/gramophone/fragments/library/SongsFragment.java b/app/src/main/java/com/dkanada/gramophone/fragments/library/SongsFragment.java index 28f8a29b..c1e3404f 100644 --- a/app/src/main/java/com/dkanada/gramophone/fragments/library/SongsFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/fragments/library/SongsFragment.java @@ -45,14 +45,14 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag dataSet, itemLayoutRes, usePalette, - getLibraryFragment()); + getLibraryFragment().getMainActivity()); } else { adapter = new SongAdapter( getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, usePalette, - getLibraryFragment()); + getLibraryFragment().getMainActivity()); } return adapter; diff --git a/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java b/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java index 5a12f9eb..bf03f86d 100644 --- a/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java @@ -21,14 +21,11 @@ import com.dkanada.gramophone.helper.MusicPlayerRemote; import com.dkanada.gramophone.util.ShortcutUtil; import com.dkanada.gramophone.util.ThemeUtil; import com.google.android.material.appbar.AppBarLayout; -import com.afollestad.materialcab.MaterialCab; import com.dkanada.gramophone.R; import com.dkanada.gramophone.adapter.MusicLibraryPagerAdapter; import com.dkanada.gramophone.dialogs.CreatePlaylistDialog; import com.dkanada.gramophone.model.SortMethod; import com.dkanada.gramophone.model.SortOrder; -import com.dkanada.gramophone.interfaces.CabHolder; -import com.dkanada.gramophone.activities.MainActivity; import com.dkanada.gramophone.activities.SearchActivity; import com.dkanada.gramophone.fragments.library.AbsLibraryPagerRecyclerViewCustomGridSizeFragment; import com.dkanada.gramophone.fragments.library.AlbumsFragment; @@ -36,11 +33,10 @@ import com.dkanada.gramophone.fragments.library.PlaylistsFragment; import com.dkanada.gramophone.fragments.library.SongsFragment; import com.dkanada.gramophone.util.PreferenceUtil; -public class LibraryFragment extends AbsMainActivityFragment implements CabHolder, MainActivity.MainActivityFragmentCallbacks, ViewPager.OnPageChangeListener, SharedPreferences.OnSharedPreferenceChangeListener { +public class LibraryFragment extends AbsMainActivityFragment implements ViewPager.OnPageChangeListener, SharedPreferences.OnSharedPreferenceChangeListener { private FragmentLibraryBinding binding; private MusicLibraryPagerAdapter pagerAdapter; - private MaterialCab cab; public static LibraryFragment newInstance() { return new LibraryFragment(); @@ -130,18 +126,6 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde return getCurrentFragment() instanceof PlaylistsFragment; } - @Override - public MaterialCab openCab(final int menuRes, final MaterialCab.Callback callback) { - if (cab != null && cab.isActive()) cab.finish(); - cab = new MaterialCab(getMainActivity(), R.id.cab_stub) - .setMenu(menuRes) - .setCloseDrawableRes(R.drawable.ic_close_white_24dp) - .setBackgroundColor(PreferenceUtil.getInstance(requireActivity()).getPrimaryColor()) - .start(callback); - - return cab; - } - public void addOnAppBarOffsetChangedListener(AppBarLayout.OnOffsetChangedListener onOffsetChangedListener) { binding.appbar.addOnOffsetChangedListener(onOffsetChangedListener); } @@ -403,16 +387,6 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde return false; } - @Override - public boolean handleBackPress() { - if (cab != null && cab.isActive()) { - cab.finish(); - return true; - } - - return false; - } - @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } diff --git a/app/src/main/java/com/dkanada/gramophone/interfaces/CabHolder.java b/app/src/main/java/com/dkanada/gramophone/interfaces/CabHolder.java index 37fc0e1e..2fc5dfc7 100644 --- a/app/src/main/java/com/dkanada/gramophone/interfaces/CabHolder.java +++ b/app/src/main/java/com/dkanada/gramophone/interfaces/CabHolder.java @@ -1,9 +1,13 @@ package com.dkanada.gramophone.interfaces; -import androidx.annotation.NonNull; +import android.view.MenuItem; -import com.afollestad.materialcab.MaterialCab; +import com.afollestad.materialcab.attached.AttachedCab; public interface CabHolder { - MaterialCab openCab(final int menuRes, final MaterialCab.Callback callback); + default void onCreateCab(AttachedCab cab) {} + + default void onSelectionCab(MenuItem item) {} + + default void onDestroyCab(AttachedCab cab) {} }