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.interfaces.CabHolder;
import com.dkanada.gramophone.model.Playlist;
import com.dkanada.gramophone.model.Song;
import com.dkanada.gramophone.util.NavigationUtil;
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.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;

View file

@ -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;

View file

@ -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<Song> 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);

View file

@ -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");

View file

@ -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";
}

View file

@ -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;
}
}

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.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;
}