migrate material-cab sections to kotlin and update library
This commit is contained in:
parent
ec649b5417
commit
76f37e4cab
21 changed files with 211 additions and 263 deletions
|
|
@ -86,7 +86,7 @@ dependencies {
|
||||||
|
|
||||||
implementation 'com.afollestad.material-dialogs:core:0.9.6.0'
|
implementation 'com.afollestad.material-dialogs:core:0.9.6.0'
|
||||||
implementation 'com.afollestad.material-dialogs:commons: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 'me.zhanghai.android.materialprogressbar:library:1.6.1'
|
||||||
implementation 'com.github.QuadFlask:colorpicker:ef73ced217'
|
implementation 'com.github.QuadFlask:colorpicker:ef73ced217'
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,10 @@ import androidx.annotation.Nullable;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.drawerlayout.widget.DrawerLayout;
|
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.activities.base.AbsMusicContentActivity;
|
||||||
|
import com.dkanada.gramophone.interfaces.CabHolder;
|
||||||
import com.dkanada.gramophone.util.NavigationUtil;
|
import com.dkanada.gramophone.util.NavigationUtil;
|
||||||
import com.dkanada.gramophone.util.PreferenceUtil;
|
import com.dkanada.gramophone.util.PreferenceUtil;
|
||||||
import com.dkanada.gramophone.util.ThemeUtil;
|
import com.dkanada.gramophone.util.ThemeUtil;
|
||||||
|
|
@ -35,14 +38,14 @@ import org.jellyfin.apiclient.model.dto.BaseItemDto;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class MainActivity extends AbsMusicContentActivity {
|
public class MainActivity extends AbsMusicContentActivity implements CabHolder {
|
||||||
private ActivityMainDrawerLayoutBinding binding;
|
private ActivityMainDrawerLayoutBinding binding;
|
||||||
private ActivityMainContentBinding contentBinding;
|
private ActivityMainContentBinding contentBinding;
|
||||||
private NavigationDrawerHeaderBinding navigationBinding;
|
private NavigationDrawerHeaderBinding navigationBinding;
|
||||||
private boolean onLogout;
|
private boolean onLogout;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private MainActivityFragmentCallbacks currentFragment;
|
private AttachedCab cab;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private List<BaseItemDto> libraries;
|
private List<BaseItemDto> libraries;
|
||||||
|
|
@ -93,8 +96,6 @@ public class MainActivity extends AbsMusicContentActivity {
|
||||||
menu.getItem(0).setChecked(true);
|
menu.getItem(0).setChecked(true);
|
||||||
if (state == null) {
|
if (state == null) {
|
||||||
setCurrentFragment(LibraryFragment.newInstance());
|
setCurrentFragment(LibraryFragment.newInstance());
|
||||||
} else {
|
|
||||||
restoreCurrentFragment();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -112,11 +113,6 @@ public class MainActivity extends AbsMusicContentActivity {
|
||||||
|
|
||||||
private void setCurrentFragment(Fragment fragment) {
|
private void setCurrentFragment(Fragment fragment) {
|
||||||
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment, null).commit();
|
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
|
@Override
|
||||||
|
|
@ -225,6 +221,22 @@ public class MainActivity extends AbsMusicContentActivity {
|
||||||
updateNavigationDrawerHeader();
|
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
|
@Override
|
||||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||||
if (item.getItemId() == android.R.id.home) {
|
if (item.getItemId() == android.R.id.home) {
|
||||||
|
|
@ -240,16 +252,6 @@ public class MainActivity extends AbsMusicContentActivity {
|
||||||
return super.onOptionsItemSelected(item);
|
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
|
@Override
|
||||||
public void onPanelExpanded(View view) {
|
public void onPanelExpanded(View view) {
|
||||||
super.onPanelExpanded(view);
|
super.onPanelExpanded(view);
|
||||||
|
|
@ -261,8 +263,4 @@ public class MainActivity extends AbsMusicContentActivity {
|
||||||
super.onPanelCollapsed(view);
|
super.onPanelCollapsed(view);
|
||||||
binding.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
|
binding.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface MainActivityFragmentCallbacks {
|
|
||||||
boolean handleBackPress();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -214,22 +214,6 @@ public abstract class AbsMusicPanelActivity extends AbsMusicServiceActivity impl
|
||||||
return binding.getRoot();
|
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
|
@Override
|
||||||
public void onPaletteColorChanged() {
|
public void onPaletteColorChanged() {
|
||||||
if (getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) {
|
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
|
@Override
|
||||||
public void setTaskDescriptionColor(int color) {
|
public void setTaskDescriptionColor(int color) {
|
||||||
taskDescriptionColor = color;
|
taskDescriptionColor = color;
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,8 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.GridLayoutManager;
|
import androidx.recyclerview.widget.GridLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
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.BuildConfig;
|
||||||
import com.dkanada.gramophone.activities.base.AbsMusicContentActivity;
|
import com.dkanada.gramophone.activities.base.AbsMusicContentActivity;
|
||||||
import com.dkanada.gramophone.databinding.ActivityAlbumDetailBinding;
|
import com.dkanada.gramophone.databinding.ActivityAlbumDetailBinding;
|
||||||
|
|
@ -40,7 +41,7 @@ public class AlbumDetailActivity extends AbsMusicContentActivity implements Pale
|
||||||
|
|
||||||
private ActivityAlbumDetailBinding binding;
|
private ActivityAlbumDetailBinding binding;
|
||||||
|
|
||||||
private MaterialCab cab;
|
private AttachedCab cab;
|
||||||
private int headerViewHeight;
|
private int headerViewHeight;
|
||||||
private int toolbarColor;
|
private int toolbarColor;
|
||||||
|
|
||||||
|
|
@ -197,20 +198,16 @@ public class AlbumDetailActivity extends AbsMusicContentActivity implements Pale
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MaterialCab openCab(int menuRes, @NonNull final MaterialCab.Callback callback) {
|
public void onCreateCab(AttachedCab cab) {
|
||||||
if (cab != null && cab.isActive()) cab.finish();
|
cab.backgroundColor(null, getPaletteColor());
|
||||||
cab = new MaterialCab(this, R.id.cab_stub)
|
|
||||||
.setMenu(menuRes)
|
this.cab = cab;
|
||||||
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
|
||||||
.setBackgroundColor(getPaletteColor())
|
|
||||||
.start(callback);
|
|
||||||
return cab;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
if (cab != null && cab.isActive()) {
|
if (cab != null && AttachedCabKt.isActive(cab)) {
|
||||||
cab.finish();
|
AttachedCabKt.destroy(cab);
|
||||||
} else {
|
} else {
|
||||||
binding.list.stopScroll();
|
binding.list.stopScroll();
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,8 @@ import androidx.recyclerview.widget.GridLayoutManager;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
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.BuildConfig;
|
||||||
import com.dkanada.gramophone.activities.base.AbsMusicContentActivity;
|
import com.dkanada.gramophone.activities.base.AbsMusicContentActivity;
|
||||||
import com.dkanada.gramophone.adapter.song.SongAdapter;
|
import com.dkanada.gramophone.adapter.song.SongAdapter;
|
||||||
|
|
@ -42,7 +43,7 @@ public class ArtistDetailActivity extends AbsMusicContentActivity implements Pal
|
||||||
|
|
||||||
private ActivityArtistDetailBinding binding;
|
private ActivityArtistDetailBinding binding;
|
||||||
|
|
||||||
private MaterialCab cab;
|
private AttachedCab cab;
|
||||||
private int headerViewHeight;
|
private int headerViewHeight;
|
||||||
private int toolbarColor;
|
private int toolbarColor;
|
||||||
|
|
||||||
|
|
@ -225,20 +226,16 @@ public class ArtistDetailActivity extends AbsMusicContentActivity implements Pal
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MaterialCab openCab(int menuRes, @NonNull final MaterialCab.Callback callback) {
|
public void onCreateCab(AttachedCab cab) {
|
||||||
if (cab != null && cab.isActive()) cab.finish();
|
cab.backgroundColor(null, getPaletteColor());
|
||||||
cab = new MaterialCab(this, R.id.cab_stub)
|
|
||||||
.setMenu(menuRes)
|
this.cab = cab;
|
||||||
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
|
||||||
.setBackgroundColor(getPaletteColor())
|
|
||||||
.start(callback);
|
|
||||||
return cab;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
if (cab != null && cab.isActive()) {
|
if (cab != null && AttachedCabKt.isActive(cab)) {
|
||||||
cab.finish();
|
AttachedCabKt.destroy(cab);
|
||||||
} else {
|
} else {
|
||||||
binding.albums.stopScroll();
|
binding.albums.stopScroll();
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
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.BuildConfig;
|
||||||
import com.dkanada.gramophone.activities.base.AbsMusicContentActivity;
|
import com.dkanada.gramophone.activities.base.AbsMusicContentActivity;
|
||||||
import com.dkanada.gramophone.databinding.ActivityGenreDetailBinding;
|
import com.dkanada.gramophone.databinding.ActivityGenreDetailBinding;
|
||||||
|
|
@ -34,7 +35,7 @@ public class GenreDetailActivity extends AbsMusicContentActivity implements CabH
|
||||||
|
|
||||||
private Genre genre;
|
private Genre genre;
|
||||||
|
|
||||||
private MaterialCab cab;
|
private AttachedCab cab;
|
||||||
private SongAdapter adapter;
|
private SongAdapter adapter;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -110,21 +111,14 @@ public class GenreDetailActivity extends AbsMusicContentActivity implements CabH
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) {
|
public void onCreateCab(AttachedCab cab) {
|
||||||
if (cab != null && cab.isActive()) cab.finish();
|
this.cab = cab;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
if (cab != null && cab.isActive()) {
|
if (cab != null && AttachedCabKt.isActive(cab)) {
|
||||||
cab.finish();
|
AttachedCabKt.destroy(cab);
|
||||||
} else {
|
} else {
|
||||||
binding.recyclerView.stopScroll();
|
binding.recyclerView.stopScroll();
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
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.BuildConfig;
|
||||||
import com.dkanada.gramophone.activities.base.AbsMusicContentActivity;
|
import com.dkanada.gramophone.activities.base.AbsMusicContentActivity;
|
||||||
import com.dkanada.gramophone.databinding.ActivityPlaylistDetailBinding;
|
import com.dkanada.gramophone.databinding.ActivityPlaylistDetailBinding;
|
||||||
|
|
@ -43,7 +44,7 @@ public class PlaylistDetailActivity extends AbsMusicContentActivity implements C
|
||||||
|
|
||||||
private Playlist playlist;
|
private Playlist playlist;
|
||||||
|
|
||||||
private MaterialCab cab;
|
private AttachedCab cab;
|
||||||
private SongAdapter adapter;
|
private SongAdapter adapter;
|
||||||
|
|
||||||
private RecyclerView.Adapter wrappedAdapter;
|
private RecyclerView.Adapter wrappedAdapter;
|
||||||
|
|
@ -136,21 +137,14 @@ public class PlaylistDetailActivity extends AbsMusicContentActivity implements C
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) {
|
public void onCreateCab(AttachedCab cab) {
|
||||||
if (cab != null && cab.isActive()) cab.finish();
|
this.cab = cab;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
if (cab != null && cab.isActive()) {
|
if (cab != null && AttachedCabKt.isActive(cab)) {
|
||||||
cab.finish();
|
AttachedCabKt.destroy(cab);
|
||||||
} else {
|
} else {
|
||||||
binding.recyclerView.stopScroll();
|
binding.recyclerView.stopScroll();
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
||||||
protected int itemLayoutRes;
|
protected int itemLayoutRes;
|
||||||
|
|
||||||
public PlaylistAdapter(AppCompatActivity activity, List<Playlist> dataSet, @LayoutRes int itemLayoutRes, @Nullable CabHolder cabHolder) {
|
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.activity = activity;
|
||||||
this.dataSet = dataSet;
|
this.dataSet = dataSet;
|
||||||
|
|
@ -178,7 +178,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
if (isInQuickSelectMode()) {
|
if (isActive()) {
|
||||||
toggleChecked(getBindingAdapterPosition());
|
toggleChecked(getBindingAdapterPosition());
|
||||||
} else {
|
} else {
|
||||||
Playlist playlist = dataSet.get(getBindingAdapterPosition());
|
Playlist playlist = dataSet.get(getBindingAdapterPosition());
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
||||||
protected boolean usePalette;
|
protected boolean usePalette;
|
||||||
|
|
||||||
public AlbumAdapter(@NonNull AppCompatActivity activity, List<Album> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
|
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.activity = activity;
|
||||||
this.dataSet = dataSet;
|
this.dataSet = dataSet;
|
||||||
|
|
@ -214,7 +214,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (isInQuickSelectMode()) {
|
if (isActive()) {
|
||||||
toggleChecked(getBindingAdapterPosition());
|
toggleChecked(getBindingAdapterPosition());
|
||||||
} else {
|
} else {
|
||||||
Pair transition = Pair.create(image, activity.getResources().getString(R.string.transition_album_image));
|
Pair transition = Pair.create(image, activity.getResources().getString(R.string.transition_album_image));
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
||||||
protected boolean usePalette;
|
protected boolean usePalette;
|
||||||
|
|
||||||
public ArtistAdapter(@NonNull AppCompatActivity activity, List<Artist> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
|
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.activity = activity;
|
||||||
this.dataSet = dataSet;
|
this.dataSet = dataSet;
|
||||||
this.itemLayoutRes = itemLayoutRes;
|
this.itemLayoutRes = itemLayoutRes;
|
||||||
|
|
@ -188,7 +188,7 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (isInQuickSelectMode()) {
|
if (isActive()) {
|
||||||
toggleChecked(getBindingAdapterPosition());
|
toggleChecked(getBindingAdapterPosition());
|
||||||
} else {
|
} else {
|
||||||
Pair transition = Pair.create(image, activity.getResources().getString(R.string.transition_artist_image));
|
Pair transition = Pair.create(image, activity.getResources().getString(R.string.transition_artist_image));
|
||||||
|
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
@ -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>)
|
||||||
|
}
|
||||||
|
|
@ -95,7 +95,7 @@ public abstract class AbsOffsetSongAdapter extends SongAdapter {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (isInQuickSelectMode() && getItemViewType() != OFFSET_ITEM) {
|
if (isActive() && getItemViewType() != OFFSET_ITEM) {
|
||||||
toggleChecked(getBindingAdapterPosition());
|
toggleChecked(getBindingAdapterPosition());
|
||||||
} else {
|
} else {
|
||||||
MusicPlayerRemote.openQueue(dataSet, getBindingAdapterPosition() - 1, true);
|
MusicPlayerRemote.openQueue(dataSet, getBindingAdapterPosition() - 1, true);
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import java.util.List;
|
||||||
public class PlaylistSongAdapter extends AbsOffsetSongAdapter {
|
public class PlaylistSongAdapter extends AbsOffsetSongAdapter {
|
||||||
public PlaylistSongAdapter(AppCompatActivity activity, @NonNull List<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
|
public PlaylistSongAdapter(AppCompatActivity activity, @NonNull List<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
|
||||||
super(activity, dataSet, itemLayoutRes, usePalette, cabHolder, false);
|
super(activity, dataSet, itemLayoutRes, usePalette, cabHolder, false);
|
||||||
setMultiSelectMenuRes(R.menu.menu_select_playlist_song);
|
setMenu(R.menu.menu_select_playlist_song);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@ import androidx.annotation.Nullable;
|
||||||
import androidx.core.util.Pair;
|
import androidx.core.util.Pair;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
import com.afollestad.materialcab.MaterialCab;
|
|
||||||
import com.dkanada.gramophone.util.ThemeUtil;
|
import com.dkanada.gramophone.util.ThemeUtil;
|
||||||
import com.dkanada.gramophone.R;
|
import com.dkanada.gramophone.R;
|
||||||
import com.dkanada.gramophone.adapter.base.AbsMultiSelectAdapter;
|
import com.dkanada.gramophone.adapter.base.AbsMultiSelectAdapter;
|
||||||
|
|
@ -32,7 +31,7 @@ import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
|
||||||
|
|
||||||
import java.util.List;
|
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 final AppCompatActivity activity;
|
||||||
protected List<Song> dataSet;
|
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) {
|
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.activity = activity;
|
||||||
this.dataSet = dataSet;
|
this.dataSet = dataSet;
|
||||||
|
|
@ -262,7 +261,7 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (isInQuickSelectMode()) {
|
if (isActive()) {
|
||||||
toggleChecked(getBindingAdapterPosition());
|
toggleChecked(getBindingAdapterPosition());
|
||||||
} else {
|
} else {
|
||||||
MusicPlayerRemote.openQueue(dataSet, getBindingAdapterPosition(), true);
|
MusicPlayerRemote.openQueue(dataSet, getBindingAdapterPosition(), true);
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
|
||||||
notifyLayoutResChanged(itemLayoutRes);
|
notifyLayoutResChanged(itemLayoutRes);
|
||||||
|
|
||||||
List<Album> dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
|
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
|
@NonNull
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
|
||||||
notifyLayoutResChanged(itemLayoutRes);
|
notifyLayoutResChanged(itemLayoutRes);
|
||||||
|
|
||||||
List<Artist> dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
|
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
|
@NonNull
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ public class PlaylistsFragment extends AbsLibraryPagerRecyclerViewFragment<Playl
|
||||||
@Override
|
@Override
|
||||||
protected PlaylistAdapter createAdapter() {
|
protected PlaylistAdapter createAdapter() {
|
||||||
List<Playlist> dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
|
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
|
@NonNull
|
||||||
|
|
|
||||||
|
|
@ -45,14 +45,14 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag
|
||||||
dataSet,
|
dataSet,
|
||||||
itemLayoutRes,
|
itemLayoutRes,
|
||||||
usePalette,
|
usePalette,
|
||||||
getLibraryFragment());
|
getLibraryFragment().getMainActivity());
|
||||||
} else {
|
} else {
|
||||||
adapter = new SongAdapter(
|
adapter = new SongAdapter(
|
||||||
getLibraryFragment().getMainActivity(),
|
getLibraryFragment().getMainActivity(),
|
||||||
dataSet,
|
dataSet,
|
||||||
itemLayoutRes,
|
itemLayoutRes,
|
||||||
usePalette,
|
usePalette,
|
||||||
getLibraryFragment());
|
getLibraryFragment().getMainActivity());
|
||||||
}
|
}
|
||||||
|
|
||||||
return adapter;
|
return adapter;
|
||||||
|
|
|
||||||
|
|
@ -21,14 +21,11 @@ import com.dkanada.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.dkanada.gramophone.util.ShortcutUtil;
|
import com.dkanada.gramophone.util.ShortcutUtil;
|
||||||
import com.dkanada.gramophone.util.ThemeUtil;
|
import com.dkanada.gramophone.util.ThemeUtil;
|
||||||
import com.google.android.material.appbar.AppBarLayout;
|
import com.google.android.material.appbar.AppBarLayout;
|
||||||
import com.afollestad.materialcab.MaterialCab;
|
|
||||||
import com.dkanada.gramophone.R;
|
import com.dkanada.gramophone.R;
|
||||||
import com.dkanada.gramophone.adapter.MusicLibraryPagerAdapter;
|
import com.dkanada.gramophone.adapter.MusicLibraryPagerAdapter;
|
||||||
import com.dkanada.gramophone.dialogs.CreatePlaylistDialog;
|
import com.dkanada.gramophone.dialogs.CreatePlaylistDialog;
|
||||||
import com.dkanada.gramophone.model.SortMethod;
|
import com.dkanada.gramophone.model.SortMethod;
|
||||||
import com.dkanada.gramophone.model.SortOrder;
|
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.activities.SearchActivity;
|
||||||
import com.dkanada.gramophone.fragments.library.AbsLibraryPagerRecyclerViewCustomGridSizeFragment;
|
import com.dkanada.gramophone.fragments.library.AbsLibraryPagerRecyclerViewCustomGridSizeFragment;
|
||||||
import com.dkanada.gramophone.fragments.library.AlbumsFragment;
|
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.fragments.library.SongsFragment;
|
||||||
import com.dkanada.gramophone.util.PreferenceUtil;
|
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 FragmentLibraryBinding binding;
|
||||||
|
|
||||||
private MusicLibraryPagerAdapter pagerAdapter;
|
private MusicLibraryPagerAdapter pagerAdapter;
|
||||||
private MaterialCab cab;
|
|
||||||
|
|
||||||
public static LibraryFragment newInstance() {
|
public static LibraryFragment newInstance() {
|
||||||
return new LibraryFragment();
|
return new LibraryFragment();
|
||||||
|
|
@ -130,18 +126,6 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
|
||||||
return getCurrentFragment() instanceof PlaylistsFragment;
|
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) {
|
public void addOnAppBarOffsetChangedListener(AppBarLayout.OnOffsetChangedListener onOffsetChangedListener) {
|
||||||
binding.appbar.addOnOffsetChangedListener(onOffsetChangedListener);
|
binding.appbar.addOnOffsetChangedListener(onOffsetChangedListener);
|
||||||
}
|
}
|
||||||
|
|
@ -403,16 +387,6 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handleBackPress() {
|
|
||||||
if (cab != null && cab.isActive()) {
|
|
||||||
cab.finish();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,13 @@
|
||||||
package com.dkanada.gramophone.interfaces;
|
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 {
|
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) {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue