fix launcher shortcuts and shuffle button

This commit is contained in:
dkanada 2021-05-06 15:10:30 +09:00
commit d5f8d54199
11 changed files with 85 additions and 9 deletions

View file

@ -22,7 +22,6 @@ import com.dkanada.gramophone.helper.menu.PlaylistMenuHelper;
import com.dkanada.gramophone.helper.menu.SongsMenuHelper; import com.dkanada.gramophone.helper.menu.SongsMenuHelper;
import com.dkanada.gramophone.interfaces.CabHolder; import com.dkanada.gramophone.interfaces.CabHolder;
import com.dkanada.gramophone.model.Playlist; import com.dkanada.gramophone.model.Playlist;
import com.dkanada.gramophone.model.Song;
import com.dkanada.gramophone.util.NavigationUtil; import com.dkanada.gramophone.util.NavigationUtil;
import java.util.ArrayList; import java.util.ArrayList;

View file

@ -23,7 +23,6 @@ import com.dkanada.gramophone.helper.menu.SongsMenuHelper;
import com.dkanada.gramophone.helper.sort.SortMethod; import com.dkanada.gramophone.helper.sort.SortMethod;
import com.dkanada.gramophone.interfaces.CabHolder; import com.dkanada.gramophone.interfaces.CabHolder;
import com.dkanada.gramophone.model.Album; import com.dkanada.gramophone.model.Album;
import com.dkanada.gramophone.model.Song;
import com.dkanada.gramophone.util.MusicUtil; import com.dkanada.gramophone.util.MusicUtil;
import com.dkanada.gramophone.util.NavigationUtil; import com.dkanada.gramophone.util.NavigationUtil;
import com.dkanada.gramophone.util.PreferenceUtil; import com.dkanada.gramophone.util.PreferenceUtil;

View file

@ -22,7 +22,6 @@ import com.dkanada.gramophone.glide.CustomPaletteTarget;
import com.dkanada.gramophone.helper.menu.SongsMenuHelper; import com.dkanada.gramophone.helper.menu.SongsMenuHelper;
import com.dkanada.gramophone.interfaces.CabHolder; import com.dkanada.gramophone.interfaces.CabHolder;
import com.dkanada.gramophone.model.Artist; import com.dkanada.gramophone.model.Artist;
import com.dkanada.gramophone.model.Song;
import com.dkanada.gramophone.util.MusicUtil; import com.dkanada.gramophone.util.MusicUtil;
import com.dkanada.gramophone.util.NavigationUtil; import com.dkanada.gramophone.util.NavigationUtil;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;

View file

@ -8,6 +8,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import com.dkanada.gramophone.util.ShortcutUtil;
import com.kabouzeid.appthemehelper.ThemeStore; import com.kabouzeid.appthemehelper.ThemeStore;
import com.dkanada.gramophone.R; import com.dkanada.gramophone.R;
import com.dkanada.gramophone.helper.MusicPlayerRemote; import com.dkanada.gramophone.helper.MusicPlayerRemote;
@ -17,7 +18,6 @@ import com.dkanada.gramophone.model.Song;
import java.util.List; import java.util.List;
public class ShuffleButtonSongAdapter extends AbsOffsetSongAdapter { public class ShuffleButtonSongAdapter extends AbsOffsetSongAdapter {
public ShuffleButtonSongAdapter(AppCompatActivity activity, List<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) { public ShuffleButtonSongAdapter(AppCompatActivity activity, List<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
super(activity, dataSet, itemLayoutRes, usePalette, cabHolder); super(activity, dataSet, itemLayoutRes, usePalette, cabHolder);
} }
@ -72,8 +72,7 @@ public class ShuffleButtonSongAdapter extends AbsOffsetSongAdapter {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (getItemViewType() == OFFSET_ITEM) { if (getItemViewType() == OFFSET_ITEM) {
MusicPlayerRemote.openAndShuffleQueue(dataSet, true); ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true));
return;
} }
super.onClick(v); super.onClick(v);

View file

@ -20,6 +20,8 @@ import androidx.annotation.Nullable;
import com.dkanada.gramophone.databinding.FragmentLibraryBinding; import com.dkanada.gramophone.databinding.FragmentLibraryBinding;
import com.dkanada.gramophone.fragments.mainactivity.library.pager.FavoritesFragment; 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.google.android.material.appbar.AppBarLayout;
import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialcab.MaterialCab;
import com.kabouzeid.appthemehelper.ThemeStore; import com.kabouzeid.appthemehelper.ThemeStore;
@ -239,7 +241,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
int id = item.getItemId(); int id = item.getItemId();
switch (id) { switch (id) {
case R.id.action_shuffle_all: 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; return true;
case R.id.action_new_playlist: case R.id.action_new_playlist:
CreatePlaylistDialog.create().show(getChildFragmentManager(), "CREATE_PLAYLIST"); CreatePlaylistDialog.create().show(getChildFragmentManager(), "CREATE_PLAYLIST");

View file

@ -7,4 +7,5 @@ public class SortMethod {
public static final String YEAR = "YEAR"; public static final String YEAR = "YEAR";
public static final String ADDED = "ADDED"; public static final String ADDED = "ADDED";
public static final String RANDOM = "RANDOM"; public static final String RANDOM = "RANDOM";
public static final String COUNT = "COUNT";
} }

View file

@ -229,6 +229,9 @@ public class QueryUtil {
case SortMethod.RANDOM: case SortMethod.RANDOM:
query.setSortBy(new String[]{"Random"}); query.setSortBy(new String[]{"Random"});
break; break;
case SortMethod.COUNT:
query.setSortBy(new String[]{"PlayCount"});
break;
} }
} }

View file

@ -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<Song> callback) {
ItemQuery query = new ItemQuery();
QueryUtil.applySortMethod(query, SortMethod.COUNT);
QueryUtil.applySortOrder(query, SortOrder.DESCENDING);
getSongs(query, callback);
}
public static void getLatest(MediaCallback<Song> callback) {
ItemQuery query = new ItemQuery();
QueryUtil.applySortMethod(query, SortMethod.ADDED);
QueryUtil.applySortOrder(query, SortOrder.DESCENDING);
getSongs(query, callback);
}
public static void getShuffle(MediaCallback<Song> 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<Song> 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<ItemsResult>() {
@Override
public void onResponse(ItemsResult result) {
List<Song> songs = new ArrayList<>();
for (BaseItemDto itemDto : result.getItems()) {
songs.add(new Song(itemDto));
}
callback.onLoadMedia(songs);
}
@Override
public void onError(Exception exception) {
exception.printStackTrace();
}
});
}
}

View file

@ -8,6 +8,8 @@ import com.dkanada.gramophone.BuildConfig;
import com.dkanada.gramophone.views.shortcuts.type.LatestShortcutType; import com.dkanada.gramophone.views.shortcuts.type.LatestShortcutType;
import com.dkanada.gramophone.views.shortcuts.type.ShuffleShortcutType; import com.dkanada.gramophone.views.shortcuts.type.ShuffleShortcutType;
import com.dkanada.gramophone.views.shortcuts.type.FrequentShortcutType; 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.model.Playlist;
import com.dkanada.gramophone.service.MusicService; import com.dkanada.gramophone.service.MusicService;
@ -25,12 +27,15 @@ public class AppShortcutLauncherActivity extends Activity {
switch (getIntent().getIntExtra(EXTRA_SHORTCUT, SHORTCUT_TYPE_DEFAULT)) { switch (getIntent().getIntExtra(EXTRA_SHORTCUT, SHORTCUT_TYPE_DEFAULT)) {
case SHORTCUT_TYPE_SHUFFLE: case SHORTCUT_TYPE_SHUFFLE:
ShortcutUtil.getShuffle((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true));
DynamicShortcutManager.reportShortcutUsed(this, ShuffleShortcutType.getId()); DynamicShortcutManager.reportShortcutUsed(this, ShuffleShortcutType.getId());
break; break;
case SHORTCUT_TYPE_FREQUENT: case SHORTCUT_TYPE_FREQUENT:
ShortcutUtil.getFrequent((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true));
DynamicShortcutManager.reportShortcutUsed(this, FrequentShortcutType.getId()); DynamicShortcutManager.reportShortcutUsed(this, FrequentShortcutType.getId());
break; break;
case SHORTCUT_TYPE_LATEST: case SHORTCUT_TYPE_LATEST:
ShortcutUtil.getLatest((media) -> MusicPlayerRemote.openAndShuffleQueue(media, true));
DynamicShortcutManager.reportShortcutUsed(this, LatestShortcutType.getId()); DynamicShortcutManager.reportShortcutUsed(this, LatestShortcutType.getId());
break; break;
} }

View file

@ -33,7 +33,6 @@
app:showAsAction="never" /> app:showAsAction="never" />
<item <item
android:visible="false"
android:id="@+id/action_details" android:id="@+id/action_details"
android:title="@string/action_details" android:title="@string/action_details"
app:showAsAction="never" /> app:showAsAction="never" />

View file

@ -12,7 +12,6 @@
<item <item
android:id="@+id/action_shuffle_all" android:id="@+id/action_shuffle_all"
android:title="@string/action_shuffle_all" android:title="@string/action_shuffle_all"
android:visible="false"
app:showAsAction="never" /> app:showAsAction="never" />
<item <item