From d5f8d54199eb6b4d43751a6dba7183baf6fe5003 Mon Sep 17 00:00:00 2001 From: dkanada Date: Thu, 6 May 2021 15:10:30 +0900 Subject: [PATCH] fix launcher shortcuts and shuffle button --- .../gramophone/adapter/PlaylistAdapter.java | 1 - .../adapter/album/AlbumAdapter.java | 1 - .../adapter/artist/ArtistAdapter.java | 1 - .../song/ShuffleButtonSongAdapter.java | 5 +- .../mainactivity/library/LibraryFragment.java | 4 +- .../gramophone/helper/sort/SortMethod.java | 1 + .../dkanada/gramophone/util/QueryUtil.java | 3 + .../dkanada/gramophone/util/ShortcutUtil.java | 71 +++++++++++++++++++ .../AppShortcutLauncherActivity.java | 5 ++ .../res/menu/menu_item_playing_queue_song.xml | 1 - app/src/main/res/menu/menu_main.xml | 1 - 11 files changed, 85 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/com/dkanada/gramophone/util/ShortcutUtil.java 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 230fbb9a..25bc5d93 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/PlaylistAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/PlaylistAdapter.java @@ -22,7 +22,6 @@ import com.dkanada.gramophone.helper.menu.PlaylistMenuHelper; import com.dkanada.gramophone.helper.menu.SongsMenuHelper; import com.dkanada.gramophone.interfaces.CabHolder; import com.dkanada.gramophone.model.Playlist; -import com.dkanada.gramophone.model.Song; import com.dkanada.gramophone.util.NavigationUtil; import java.util.ArrayList; diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/album/AlbumAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/album/AlbumAdapter.java index 63107b42..542c64e3 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/album/AlbumAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/album/AlbumAdapter.java @@ -23,7 +23,6 @@ import com.dkanada.gramophone.helper.menu.SongsMenuHelper; import com.dkanada.gramophone.helper.sort.SortMethod; import com.dkanada.gramophone.interfaces.CabHolder; import com.dkanada.gramophone.model.Album; -import com.dkanada.gramophone.model.Song; import com.dkanada.gramophone.util.MusicUtil; import com.dkanada.gramophone.util.NavigationUtil; import com.dkanada.gramophone.util.PreferenceUtil; diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/artist/ArtistAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/artist/ArtistAdapter.java index b48addd2..9d626b05 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/artist/ArtistAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/artist/ArtistAdapter.java @@ -22,7 +22,6 @@ import com.dkanada.gramophone.glide.CustomPaletteTarget; import com.dkanada.gramophone.helper.menu.SongsMenuHelper; import com.dkanada.gramophone.interfaces.CabHolder; import com.dkanada.gramophone.model.Artist; -import com.dkanada.gramophone.model.Song; import com.dkanada.gramophone.util.MusicUtil; import com.dkanada.gramophone.util.NavigationUtil; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/song/ShuffleButtonSongAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/song/ShuffleButtonSongAdapter.java index 43738ac7..22563ea4 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/song/ShuffleButtonSongAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/song/ShuffleButtonSongAdapter.java @@ -8,6 +8,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import com.dkanada.gramophone.util.ShortcutUtil; import com.kabouzeid.appthemehelper.ThemeStore; import com.dkanada.gramophone.R; import com.dkanada.gramophone.helper.MusicPlayerRemote; @@ -17,7 +18,6 @@ import com.dkanada.gramophone.model.Song; import java.util.List; public class ShuffleButtonSongAdapter extends AbsOffsetSongAdapter { - public ShuffleButtonSongAdapter(AppCompatActivity activity, List dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) { super(activity, dataSet, itemLayoutRes, usePalette, cabHolder); } @@ -72,8 +72,7 @@ public class ShuffleButtonSongAdapter extends AbsOffsetSongAdapter { @Override public void onClick(View v) { if (getItemViewType() == OFFSET_ITEM) { - MusicPlayerRemote.openAndShuffleQueue(dataSet, true); - return; + ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true)); } super.onClick(v); diff --git a/app/src/main/java/com/dkanada/gramophone/fragments/mainactivity/library/LibraryFragment.java b/app/src/main/java/com/dkanada/gramophone/fragments/mainactivity/library/LibraryFragment.java index 10ff9248..4ea17ae6 100644 --- a/app/src/main/java/com/dkanada/gramophone/fragments/mainactivity/library/LibraryFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/fragments/mainactivity/library/LibraryFragment.java @@ -20,6 +20,8 @@ import androidx.annotation.Nullable; import com.dkanada.gramophone.databinding.FragmentLibraryBinding; import com.dkanada.gramophone.fragments.mainactivity.library.pager.FavoritesFragment; +import com.dkanada.gramophone.helper.MusicPlayerRemote; +import com.dkanada.gramophone.util.ShortcutUtil; import com.google.android.material.appbar.AppBarLayout; import com.afollestad.materialcab.MaterialCab; import com.kabouzeid.appthemehelper.ThemeStore; @@ -239,7 +241,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde int id = item.getItemId(); switch (id) { case R.id.action_shuffle_all: - Toast.makeText(requireActivity(), requireActivity().getResources().getString(R.string.error_unexpected), Toast.LENGTH_SHORT).show(); + ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true)); return true; case R.id.action_new_playlist: CreatePlaylistDialog.create().show(getChildFragmentManager(), "CREATE_PLAYLIST"); diff --git a/app/src/main/java/com/dkanada/gramophone/helper/sort/SortMethod.java b/app/src/main/java/com/dkanada/gramophone/helper/sort/SortMethod.java index 8e3b8f01..dc3d9bef 100644 --- a/app/src/main/java/com/dkanada/gramophone/helper/sort/SortMethod.java +++ b/app/src/main/java/com/dkanada/gramophone/helper/sort/SortMethod.java @@ -7,4 +7,5 @@ public class SortMethod { public static final String YEAR = "YEAR"; public static final String ADDED = "ADDED"; public static final String RANDOM = "RANDOM"; + public static final String COUNT = "COUNT"; } diff --git a/app/src/main/java/com/dkanada/gramophone/util/QueryUtil.java b/app/src/main/java/com/dkanada/gramophone/util/QueryUtil.java index f94d2acf..7f0fea0a 100644 --- a/app/src/main/java/com/dkanada/gramophone/util/QueryUtil.java +++ b/app/src/main/java/com/dkanada/gramophone/util/QueryUtil.java @@ -229,6 +229,9 @@ public class QueryUtil { case SortMethod.RANDOM: query.setSortBy(new String[]{"Random"}); break; + case SortMethod.COUNT: + query.setSortBy(new String[]{"PlayCount"}); + break; } } diff --git a/app/src/main/java/com/dkanada/gramophone/util/ShortcutUtil.java b/app/src/main/java/com/dkanada/gramophone/util/ShortcutUtil.java new file mode 100644 index 00000000..e97e1207 --- /dev/null +++ b/app/src/main/java/com/dkanada/gramophone/util/ShortcutUtil.java @@ -0,0 +1,71 @@ +package com.dkanada.gramophone.util; + +import com.dkanada.gramophone.App; +import com.dkanada.gramophone.helper.sort.SortMethod; +import com.dkanada.gramophone.helper.sort.SortOrder; +import com.dkanada.gramophone.interfaces.MediaCallback; +import com.dkanada.gramophone.model.Song; + +import org.jellyfin.apiclient.interaction.Response; +import org.jellyfin.apiclient.model.dto.BaseItemDto; +import org.jellyfin.apiclient.model.querying.ItemFields; +import org.jellyfin.apiclient.model.querying.ItemQuery; +import org.jellyfin.apiclient.model.querying.ItemsResult; + +import java.util.ArrayList; +import java.util.List; + +public class ShortcutUtil { + public static void getFrequent(MediaCallback callback) { + ItemQuery query = new ItemQuery(); + + QueryUtil.applySortMethod(query, SortMethod.COUNT); + QueryUtil.applySortOrder(query, SortOrder.DESCENDING); + + getSongs(query, callback); + } + + public static void getLatest(MediaCallback callback) { + ItemQuery query = new ItemQuery(); + + QueryUtil.applySortMethod(query, SortMethod.ADDED); + QueryUtil.applySortOrder(query, SortOrder.DESCENDING); + + getSongs(query, callback); + } + + public static void getShuffle(MediaCallback callback) { + ItemQuery query = new ItemQuery(); + + QueryUtil.applySortMethod(query, SortMethod.RANDOM); + QueryUtil.applySortOrder(query, SortOrder.DESCENDING); + + getSongs(query, callback); + } + + public static void getSongs(ItemQuery query, MediaCallback callback) { + query.setIncludeItemTypes(new String[]{"Audio"}); + query.setFields(new ItemFields[]{ItemFields.MediaSources}); + + query.setLimit(200); + query.setUserId(App.getApiClient().getCurrentUserId()); + query.setRecursive(true); + + App.getApiClient().GetItemsAsync(query, new Response() { + @Override + public void onResponse(ItemsResult result) { + List songs = new ArrayList<>(); + for (BaseItemDto itemDto : result.getItems()) { + songs.add(new Song(itemDto)); + } + + callback.onLoadMedia(songs); + } + + @Override + public void onError(Exception exception) { + exception.printStackTrace(); + } + }); + } +} diff --git a/app/src/main/java/com/dkanada/gramophone/views/shortcuts/AppShortcutLauncherActivity.java b/app/src/main/java/com/dkanada/gramophone/views/shortcuts/AppShortcutLauncherActivity.java index 8d2ddff1..910f2724 100644 --- a/app/src/main/java/com/dkanada/gramophone/views/shortcuts/AppShortcutLauncherActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/views/shortcuts/AppShortcutLauncherActivity.java @@ -8,6 +8,8 @@ import com.dkanada.gramophone.BuildConfig; import com.dkanada.gramophone.views.shortcuts.type.LatestShortcutType; import com.dkanada.gramophone.views.shortcuts.type.ShuffleShortcutType; import com.dkanada.gramophone.views.shortcuts.type.FrequentShortcutType; +import com.dkanada.gramophone.helper.MusicPlayerRemote; +import com.dkanada.gramophone.util.ShortcutUtil; import com.dkanada.gramophone.model.Playlist; import com.dkanada.gramophone.service.MusicService; @@ -25,12 +27,15 @@ public class AppShortcutLauncherActivity extends Activity { switch (getIntent().getIntExtra(EXTRA_SHORTCUT, SHORTCUT_TYPE_DEFAULT)) { case SHORTCUT_TYPE_SHUFFLE: + ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true)); DynamicShortcutManager.reportShortcutUsed(this, ShuffleShortcutType.getId()); break; case SHORTCUT_TYPE_FREQUENT: + ShortcutUtil.getFrequent((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true)); DynamicShortcutManager.reportShortcutUsed(this, FrequentShortcutType.getId()); break; case SHORTCUT_TYPE_LATEST: + ShortcutUtil.getLatest((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true)); DynamicShortcutManager.reportShortcutUsed(this, LatestShortcutType.getId()); break; } diff --git a/app/src/main/res/menu/menu_item_playing_queue_song.xml b/app/src/main/res/menu/menu_item_playing_queue_song.xml index 576945b4..f03ce98a 100644 --- a/app/src/main/res/menu/menu_item_playing_queue_song.xml +++ b/app/src/main/res/menu/menu_item_playing_queue_song.xml @@ -33,7 +33,6 @@ app:showAsAction="never" /> diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index b3675272..b91d7989 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -12,7 +12,6 @@