add optional library filter
This commit is contained in:
parent
c59221cd04
commit
96ded5b957
4 changed files with 71 additions and 5 deletions
|
|
@ -4,10 +4,6 @@ import android.app.Application;
|
|||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.anjlab.android.iab.v3.BillingProcessor;
|
||||
import com.anjlab.android.iab.v3.TransactionDetails;
|
||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||
import com.kabouzeid.gramophone.shortcuts.DynamicShortcutManager;
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ import androidx.annotation.Nullable;
|
|||
import com.google.android.material.navigation.NavigationView;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.drawerlayout.widget.DrawerLayout;
|
||||
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
|
@ -24,13 +26,19 @@ import com.kabouzeid.appthemehelper.util.NavigationViewUtil;
|
|||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.glide.CustomGlideRequest;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.interfaces.MediaCallback;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||
import com.kabouzeid.gramophone.ui.fragments.mainactivity.library.LibraryFragment;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
|
||||
import com.kabouzeid.gramophone.util.QueryUtil;
|
||||
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
|
||||
|
||||
import org.jellyfin.apiclient.model.dto.BaseItemDto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
|
|
@ -48,6 +56,9 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
|
|||
@Nullable
|
||||
private View navigationDrawerHeader;
|
||||
|
||||
@Nullable
|
||||
private List<BaseItemDto> libraries;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
|
@ -94,6 +105,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
|
|||
drawerLayout.closeDrawers();
|
||||
switch (menuItem.getItemId()) {
|
||||
case R.id.nav_library:
|
||||
QueryUtil.currentLibrary = null;
|
||||
navigationView.setCheckedItem(R.id.nav_library);
|
||||
setCurrentFragment(LibraryFragment.newInstance());
|
||||
break;
|
||||
|
|
@ -104,6 +116,16 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
|
|||
new Handler().postDelayed(() -> startActivity(new Intent(MainActivity.this, AboutActivity.class)), 200);
|
||||
break;
|
||||
}
|
||||
|
||||
for (BaseItemDto itemDto : libraries) {
|
||||
if (menuItem.getItemId() == itemDto.getId().hashCode()) {
|
||||
QueryUtil.currentLibrary = itemDto;
|
||||
navigationView.setCheckedItem(itemDto.getId().hashCode());
|
||||
setCurrentFragment(LibraryFragment.newInstance());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
|
@ -117,14 +139,37 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
|
|||
Song song = MusicPlayerRemote.getCurrentSong();
|
||||
if (navigationDrawerHeader == null) {
|
||||
navigationDrawerHeader = navigationView.inflateHeaderView(R.layout.navigation_drawer_header);
|
||||
//noinspection ConstantConditions
|
||||
navigationDrawerHeader.setOnClickListener(v -> {
|
||||
drawerLayout.closeDrawers();
|
||||
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
||||
expandPanel();
|
||||
}
|
||||
});
|
||||
|
||||
Menu menu = navigationView.getMenu();
|
||||
QueryUtil.getLibraries(new MediaCallback() {
|
||||
@Override
|
||||
public void onLoadMedia(List<?> media) {
|
||||
libraries = (List<BaseItemDto>) media;
|
||||
menu.clear();
|
||||
|
||||
menu.add(R.id.navigation_drawer_menu_category_sections, R.id.nav_library, menu.size(), R.string.all);
|
||||
menu.getItem(0).setIcon(R.drawable.ic_library_music_white_24dp);
|
||||
|
||||
for (BaseItemDto itemDto : libraries) {
|
||||
if (itemDto.getCollectionType() == null || !itemDto.getCollectionType().equals("music")) continue;
|
||||
menu.add(R.id.navigation_drawer_menu_category_sections, itemDto.getId().hashCode(), menu.size(), itemDto.getName());
|
||||
menu.getItem(menu.size() - 1).setIcon(R.drawable.ic_album_white_24dp);
|
||||
}
|
||||
|
||||
menu.add(R.id.navigation_drawer_menu_category_other, R.id.nav_settings, menu.size(), R.string.action_settings);
|
||||
menu.getItem(menu.size() - 1).setIcon(R.drawable.ic_settings_white_24dp);
|
||||
menu.add(R.id.navigation_drawer_menu_category_other, R.id.nav_about, menu.size(), R.string.action_about);
|
||||
menu.getItem(menu.size() - 1).setIcon(R.drawable.ic_help_white_24dp);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
((TextView) navigationDrawerHeader.findViewById(R.id.title)).setText(song.title);
|
||||
((TextView) navigationDrawerHeader.findViewById(R.id.text)).setText(MusicUtil.getSongInfoString(song));
|
||||
CustomGlideRequest.Builder.from(Glide.with(this), song.albumId)
|
||||
|
|
|
|||
|
|
@ -13,14 +13,36 @@ import org.jellyfin.apiclient.model.querying.ItemQuery;
|
|||
import org.jellyfin.apiclient.model.querying.ItemsResult;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class QueryUtil {
|
||||
public static BaseItemDto currentLibrary;
|
||||
|
||||
public static void getLibraries(MediaCallback callback) {
|
||||
String id = App.getApiClient().getCurrentUserId();
|
||||
App.getApiClient().GetUserViews(id, new Response<ItemsResult>() {
|
||||
@Override
|
||||
public void onResponse(ItemsResult result) {
|
||||
List<BaseItemDto> libraries = new ArrayList<>();
|
||||
libraries.addAll(Arrays.asList(result.getItems()));
|
||||
|
||||
callback.onLoadMedia(libraries);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Exception exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void getAlbums(ItemQuery query, MediaCallback callback) {
|
||||
query.setIncludeItemTypes(new String[]{"MusicAlbum"});
|
||||
query.setUserId(App.getApiClient().getCurrentUserId());
|
||||
query.setLimit(100);
|
||||
query.setRecursive(true);
|
||||
if (currentLibrary != null && query.getParentId() == null) query.setParentId(currentLibrary.getId());
|
||||
App.getApiClient().GetItemsAsync(query, new Response<ItemsResult>() {
|
||||
@Override
|
||||
public void onResponse(ItemsResult result) {
|
||||
|
|
@ -60,6 +82,7 @@ public class QueryUtil {
|
|||
query.setUserId(App.getApiClient().getCurrentUserId());
|
||||
query.setLimit(100);
|
||||
query.setRecursive(true);
|
||||
if (currentLibrary != null && query.getParentId() == null) query.setParentId(currentLibrary.getId());
|
||||
App.getApiClient().GetItemsAsync(query, new Response<ItemsResult>() {
|
||||
@Override
|
||||
public void onResponse(ItemsResult result) {
|
||||
|
|
@ -83,6 +106,7 @@ public class QueryUtil {
|
|||
query.setUserId(App.getApiClient().getCurrentUserId());
|
||||
query.setLimit(100);
|
||||
query.setRecursive(true);
|
||||
if (currentLibrary != null && query.getParentId() == null) query.setParentId(currentLibrary.getId());
|
||||
App.getApiClient().GetAlbumArtistsAsync(query, new Response<ItemsResult>() {
|
||||
@Override
|
||||
public void onResponse(ItemsResult result) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue