migrate material-cab sections to kotlin and update library

This commit is contained in:
dkanada 2021-08-08 17:33:11 +09:00
commit 76f37e4cab
21 changed files with 211 additions and 263 deletions

View file

@ -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<BaseItemDto> 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();
}
}

View file

@ -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;

View file

@ -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();

View file

@ -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();

View file

@ -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();

View file

@ -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();

View file

@ -35,7 +35,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
protected int itemLayoutRes;
public PlaylistAdapter(AppCompatActivity activity, List<Playlist> 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<PlaylistAdapter.ViewH
@Override
public void onClick(View view) {
if (isInQuickSelectMode()) {
if (isActive()) {
toggleChecked(getBindingAdapterPosition());
} else {
Playlist playlist = dataSet.get(getBindingAdapterPosition());

View file

@ -40,7 +40,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
protected boolean usePalette;
public AlbumAdapter(@NonNull AppCompatActivity activity, List<Album> 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<AlbumAdapter.ViewHolder,
@Override
public void onClick(View v) {
if (isInQuickSelectMode()) {
if (isActive()) {
toggleChecked(getBindingAdapterPosition());
} else {
Pair transition = Pair.create(image, activity.getResources().getString(R.string.transition_album_image));

View file

@ -40,7 +40,7 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
protected boolean usePalette;
public ArtistAdapter(@NonNull AppCompatActivity activity, List<Artist> 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<ArtistAdapter.ViewHolde
@Override
public void onClick(View v) {
if (isInQuickSelectMode()) {
if (isActive()) {
toggleChecked(getBindingAdapterPosition());
} else {
Pair transition = Pair.create(image, activity.getResources().getString(R.string.transition_artist_image));

View file

@ -1,126 +0,0 @@
package com.dkanada.gramophone.adapter.base;
import android.content.Context;
import android.view.Menu;
import android.view.MenuItem;
import androidx.annotation.MenuRes;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.afollestad.materialcab.MaterialCab;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.interfaces.CabHolder;
import java.util.ArrayList;
import java.util.List;
public abstract class AbsMultiSelectAdapter<VH extends RecyclerView.ViewHolder, I> extends RecyclerView.Adapter<VH> implements MaterialCab.Callback {
private final Context context;
private final CabHolder cabHolder;
private int menuRes;
private MaterialCab cab;
private List<I> 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<I> selection);
}

View file

@ -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<VH : RecyclerView.ViewHolder, I>(
private val context: Context,
private val viewRes: Int,
private var menuRes: Int,
) : RecyclerView.Adapter<VH>() {
private var checked: MutableList<I> = 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<I>)
}

View file

@ -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);

View file

@ -20,7 +20,7 @@ import java.util.List;
public class PlaylistSongAdapter extends AbsOffsetSongAdapter {
public PlaylistSongAdapter(AppCompatActivity activity, @NonNull List<Song> 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

View file

@ -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<SongAdapter.ViewHolder, Song> implements MaterialCab.Callback, FastScrollRecyclerView.SectionedAdapter {
public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, Song> implements FastScrollRecyclerView.SectionedAdapter {
protected final AppCompatActivity activity;
protected List<Song> dataSet;
@ -46,7 +45,7 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
}
public SongAdapter(AppCompatActivity activity, List<Song> 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<SongAdapter.ViewHolder, S
@Override
public void onClick(View v) {
if (isInQuickSelectMode()) {
if (isActive()) {
toggleChecked(getBindingAdapterPosition());
} else {
MusicPlayerRemote.openQueue(dataSet, getBindingAdapterPosition(), true);

View file

@ -34,7 +34,7 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
notifyLayoutResChanged(itemLayoutRes);
List<Album> 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

View file

@ -36,7 +36,7 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
notifyLayoutResChanged(itemLayoutRes);
List<Artist> 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

View file

@ -29,7 +29,7 @@ public class PlaylistsFragment extends AbsLibraryPagerRecyclerViewFragment<Playl
@Override
protected PlaylistAdapter createAdapter() {
List<Playlist> 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

View file

@ -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;

View file

@ -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) {
}

View file

@ -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) {}
}