diff --git a/app/src/main/java/com/kabouzeid/gramophone/App.java b/app/src/main/java/com/kabouzeid/gramophone/App.java index f73a67c1..b3bdc904 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/App.java +++ b/app/src/main/java/com/kabouzeid/gramophone/App.java @@ -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; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java index 666e555c..da9086ed 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java @@ -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 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) 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) diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/QueryUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/QueryUtil.java index 007b66ce..3ed1c8e0 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/QueryUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/QueryUtil.java @@ -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() { + @Override + public void onResponse(ItemsResult result) { + List 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() { @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() { @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() { @Override public void onResponse(ItemsResult result) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 19c79cef..0455e7c2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -180,6 +180,7 @@ Website Loading products… Up next + All Appearance Library Saved playlist to %s.