use of com.simplecity.amp_library.model.Album in project Shuttle by timusus.
the class BaseDetailFragment method getAlbumViewModels.
@NonNull
@Override
public List<ViewModel> getAlbumViewModels(List<Album> albums) {
if (albums.isEmpty()) {
return Collections.emptyList();
}
List<ViewModel> items = new ArrayList<>();
if (setHorizontalItemsDisposable != null) {
setHorizontalItemsDisposable.dispose();
}
setHorizontalItemsDisposable = horizontalRecyclerView.setItems(Stream.of(albums).map(album -> {
HorizontalAlbumView horizontalAlbumView = new HorizontalAlbumView(album, requestManager);
horizontalAlbumView.setClickListener(BaseDetailFragment.this);
horizontalAlbumView.showYear(true);
return horizontalAlbumView;
}).collect(Collectors.toList()));
items.add(new SubheaderView(StringUtils.makeAlbumsLabel(getContext(), albums.size())));
items.add(horizontalRecyclerView);
return items;
}
use of com.simplecity.amp_library.model.Album in project Shuttle by timusus.
the class Operators method songsToAlbums.
public static List<Album> songsToAlbums(List<Song> songs) {
HashMap<Long, Album> albumMap = new HashMap<>();
for (Song song : songs) {
// Create an album representing the album this song belongs to
Album album = song.getAlbum();
// Now check if there's already an equivalent album in our albumMap
Album oldAlbum = albumMap.get(album.id);
if (oldAlbum != null) {
// Increment the number of songs.
oldAlbum.numSongs++;
// The number of discs is just the largest disc number for songs
oldAlbum.numDiscs = Math.max(song.discNumber, oldAlbum.numDiscs);
oldAlbum.songPlayCount += song.playCount;
// Add any new artists
Stream.of(album.artists).filter(artist -> !oldAlbum.artists.contains(artist)).forEach(artist -> oldAlbum.artists.add(artist));
// Add new paths
Stream.of(album.paths).filter(path -> !oldAlbum.paths.contains(path)).forEach(path -> oldAlbum.paths.add(path));
} else {
// Couldn't find an existing entry for this album. Add a new one.
albumMap.put(album.id, album);
}
}
return new ArrayList<>(albumMap.values());
}
use of com.simplecity.amp_library.model.Album in project Shuttle by timusus.
the class Operators method albumsToAlbumArtists.
public static List<AlbumArtist> albumsToAlbumArtists(List<Album> albums) {
HashMap<String, AlbumArtist> albumArtistMap = new HashMap<>();
for (Album album : albums) {
// Create an album-artist representing the album-artist this album belongs to
AlbumArtist albumArtist = album.getAlbumArtist();
// Check if there's already an equivalent album-artist in our albumArtistMap
AlbumArtist oldAlbumArtist = albumArtistMap.get(albumArtist.name);
if (oldAlbumArtist != null) {
// Add this album to the album artist's albums
if (!oldAlbumArtist.albums.contains(album)) {
oldAlbumArtist.albums.add(album);
}
} else {
albumArtistMap.put(albumArtist.name, albumArtist);
}
}
return new ArrayList<>(albumArtistMap.values());
}
use of com.simplecity.amp_library.model.Album in project Shuttle by timusus.
the class ArtworkUtils method getFolderArtwork.
/**
* Searches the parent directory of the passed in path for [cover/album/artwork].[png/jpg/jpeg]
* using regex and returns a {@link InputStream} representing the artwork
*/
@WorkerThread
public static InputStream getFolderArtwork(@Nullable final String path) {
InputStream fileInputStream = null;
if (path != null) {
File[] files;
File file = new File(path);
File parent = file.getParentFile();
if (parent.exists() && parent.isDirectory()) {
final Pattern pattern = Pattern.compile("(folder|cover|album).*\\.(jpg|jpeg|png)", Pattern.CASE_INSENSITIVE);
files = parent.listFiles(file1 -> pattern.matcher(file1.getName()).matches());
if (files.length > 0) {
try {
File artworkFile = Stream.of(files).filter(aFile -> aFile.exists() && aFile.length() > 1024).max((a, b) -> (int) (a.length() / 1024 - b.length() / 1024)).get();
fileInputStream = getFileArtwork(artworkFile);
} catch (NoSuchElementException e) {
Log.e(TAG, "getFolderArtwork failed: " + e.toString());
}
}
}
}
return fileInputStream;
}
use of com.simplecity.amp_library.model.Album in project Shuttle by timusus.
the class MainActivity method onOptionsItemSelected.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.action_search:
Intent intent = new Intent(MainActivity.this, SearchActivity.class);
intent.putExtra(SearchManager.QUERY, "");
startActivityForResult(intent, REQUEST_SEARCH);
return true;
case EQUALIZER:
final Intent equalizerIntent = new Intent(this, EqualizerActivity.class);
startActivity(equalizerIntent);
return true;
case GO_TO_ARTIST:
long time = System.currentTimeMillis();
Album currentAlbum = MusicUtils.getAlbum();
if (currentAlbum != null) {
DataManager.getInstance().getAlbumArtistsRelay().first().flatMap(Observable::from).filter(albumArtist -> albumArtist.name.equals(currentAlbum.albumArtistName) && com.annimon.stream.Stream.of(albumArtist.albums).anyMatch(album -> album.id == currentAlbum.id)).observeOn(AndroidSchedulers.mainThread()).subscribe(albumArtist -> {
swapFragments(DetailFragment.newInstance(albumArtist), true);
new Handler().postDelayed(() -> mSlidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED, true), time - System.currentTimeMillis() + 250);
});
}
return true;
case GO_TO_ALBUM:
time = System.currentTimeMillis();
currentAlbum = MusicUtils.getAlbum();
if (currentAlbum != null) {
DataManager.getInstance().getAlbumsRelay().first().flatMap(Observable::from).filter(album -> album.id == currentAlbum.id).observeOn(AndroidSchedulers.mainThread()).subscribe(album -> {
swapFragments(DetailFragment.newInstance(album), true);
new Handler().postDelayed(() -> mSlidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED, true), time - System.currentTimeMillis() + 250);
});
}
return true;
case TIMER:
SleepTimer.createTimer(this, MusicUtils.getTimerActive(), MusicUtils.getTimeRemaining());
return true;
case DELETE_ITEM:
new DialogUtils.DeleteDialogBuilder().context(this).singleMessageId(R.string.delete_song_desc).multipleMessage(R.string.delete_song_desc_multiple).itemNames(Collections.singletonList(MusicUtils.getSongName())).songsToDelete(Observable.just(Collections.singletonList(MusicUtils.getSong()))).build().show();
return true;
case NEW_PLAYLIST:
PlaylistUtils.createPlaylistDialog(this, MusicUtils.getQueue());
return true;
case PLAYLIST_SELECTED:
List<Song> songs = MusicUtils.getQueue();
Playlist playlist = (Playlist) item.getIntent().getSerializableExtra(ShuttleUtils.ARG_PLAYLIST);
PlaylistUtils.addToPlaylist(this, playlist, songs);
return true;
case CLEAR_QUEUE:
MusicUtils.clearQueue();
intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
return true;
case TAGGER:
TaggerDialog.newInstance(MusicUtils.getSong()).show(getSupportFragmentManager());
return true;
case VIEW_INFO:
DialogUtils.showSongInfoDialog(this, MusicUtils.getSong());
return true;
case R.id.menu_favorite:
PlaylistUtils.toggleFavorite(this);
return true;
case R.id.menu_share:
DialogUtils.showShareDialog(MainActivity.this, MusicUtils.getSong());
return true;
case R.id.menu_queue:
Fragment playingFragment = getSupportFragmentManager().findFragmentById(R.id.player_container);
if (playingFragment != null) {
((PlayerFragment) playingFragment).toggleQueue();
}
return true;
case android.R.id.home:
playingFragment = getSupportFragmentManager().findFragmentById(R.id.player_container);
if (playingFragment != null) {
Fragment childFragment = playingFragment.getChildFragmentManager().findFragmentById(R.id.queue_container);
if (childFragment != null && childFragment instanceof QueueFragment) {
((PlayerFragment) playingFragment).toggleQueue();
toggleQueue(false);
return true;
}
}
if (mSlidingUpPanelLayout != null) {
if (mSlidingUpPanelLayout.getPanelState() != SlidingUpPanelLayout.PanelState.COLLAPSED && mSlidingUpPanelLayout.getPanelState() != SlidingUpPanelLayout.PanelState.HIDDEN) {
mSlidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED, true);
return true;
}
}
break;
}
return super.onOptionsItemSelected(item);
}
Aggregations