diff --git a/app/build.gradle b/app/build.gradle index 341c5ba1..d81bafc3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,7 +25,7 @@ android { minSdkVersion 16 targetSdkVersion 22 versionCode 26 - versionName "0.9.10.1b" + versionName "0.9.10.1b DEV" } compileOptions { @@ -70,6 +70,7 @@ dependencies { compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3' compile 'com.afollestad:material-dialogs:0.7.4.2' + compile 'com.afollestad:material-cab:0.1.2' compile 'com.jpardogo.materialtabstrip:library:1.0.9' compile 'com.readystatesoftware.systembartint:systembartint:1.0.3' compile 'com.melnykov:floatingactionbutton:1.3.0' diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java new file mode 100644 index 00000000..dd3383d6 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java @@ -0,0 +1,80 @@ +package com.kabouzeid.gramophone.adapter; + +import android.support.v7.widget.RecyclerView; +import android.view.Menu; +import android.view.MenuItem; + +import com.afollestad.materialcab.MaterialCab; +import com.kabouzeid.gramophone.interfaces.CabHolder; + +import java.util.ArrayList; + +/** + * @author Karim Abou Zeid (kabouzeid) + */ +public abstract class AbsMultiSelectAdapter extends RecyclerView.Adapter implements MaterialCab.Callback { + private final CabHolder cabHolder; + private MaterialCab cab; + private ArrayList checked; + private int menuRes; + + public AbsMultiSelectAdapter(CabHolder cabHolder, int menuRes) { + this.cabHolder = cabHolder; + checked = new ArrayList<>(); + this.menuRes = menuRes; + } + + protected void toggleChecked(final int position) { + if (cabHolder != null) { + openCabIfNecessary(); + if (position > 0) { + I identifier = getIdentifier(position); + if (!checked.remove(identifier)) checked.add(identifier); + notifyItemChanged(position); + } + if (checked.isEmpty()) cab.finish(); + } + } + + private void openCabIfNecessary() { + if (cab == null || !cab.isActive()) { + cab = cabHolder.openCab(menuRes, this); + } + } + + private void uncheckAll() { + checked.clear(); + notifyDataSetChanged(); + } + + protected boolean isChecked(I identifier) { + return checked.contains(identifier); + } + + protected boolean isInQuickSelectMode() { + return cab != null && cab.isActive(); + } + + @Override + public boolean onCabCreated(MaterialCab materialCab, Menu menu) { + return true; + } + + @Override + public boolean onCabItemClicked(MenuItem menuItem) { + onMultipleItemAction(menuItem, new ArrayList<>(checked)); + cab.finish(); + uncheckAll(); + return true; + } + + @Override + public boolean onCabFinished(MaterialCab materialCab) { + uncheckAll(); + return true; + } + + protected abstract I getIdentifier(int position); + + protected abstract void onMultipleItemAction(MenuItem menuItem, ArrayList selection); +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java index 0a2cb6de..ceb05a2c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java @@ -12,11 +12,16 @@ import android.widget.ImageView; import android.widget.PopupMenu; import android.widget.TextView; +import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialdialogs.ThemeSingleton; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.adapter.AbsMultiSelectAdapter; +import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; +import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog; import com.kabouzeid.gramophone.helper.MenuItemClickHelper; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; +import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.loader.SongLoader; import com.kabouzeid.gramophone.model.DataBaseChangedEvent; import com.kabouzeid.gramophone.model.Song; @@ -28,12 +33,11 @@ import com.nostra13.universalimageloader.core.ImageLoader; import com.squareup.otto.Subscribe; import java.util.ArrayList; -import java.util.HashSet; /** * @author Karim Abou Zeid (kabouzeid) */ -public class SongAdapter extends RecyclerView.Adapter { +public class SongAdapter extends AbsMultiSelectAdapter implements MaterialCab.Callback { public static final String TAG = AlbumSongAdapter.class.getSimpleName(); private static final int SHUFFLE_BUTTON = 0; @@ -41,11 +45,10 @@ public class SongAdapter extends RecyclerView.Adapter { protected final AppCompatActivity activity; protected ArrayList dataSet; - private HashSet checked; - public SongAdapter(AppCompatActivity activity) { + public SongAdapter(AppCompatActivity activity, CabHolder cabHolder) { + super(cabHolder, R.menu.menu_media_selection); this.activity = activity; - checked = new HashSet<>(); loadDataSet(); } @@ -80,7 +83,7 @@ public class SongAdapter extends RecyclerView.Adapter { .resetViewBeforeLoading(true) .build() ); - holder.view.setActivated(checked.contains(song.id)); + holder.view.setActivated(isChecked(song)); } else { holder.songTitle.setText(activity.getResources().getString(R.string.shuffle_all).toUpperCase()); holder.songTitle.setTextColor(ThemeSingleton.get().positiveColor); @@ -101,6 +104,26 @@ public class SongAdapter extends RecyclerView.Adapter { return dataSet.size() + 1; } + @Override + protected Song getIdentifier(int position) { + return dataSet.get(position - 1); + } + + @Override + protected void onMultipleItemAction(MenuItem menuItem, ArrayList selection) { + switch (menuItem.getItemId()) { + case R.id.action_delete_from_disk: + DeleteSongsDialog.create(selection).show(activity.getSupportFragmentManager(), "DELETE_SONGS"); + break; + case R.id.action_add_to_playlist: + AddToPlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); + break; + case R.id.action_add_to_current_playing: + MusicPlayerRemote.enqueue(selection); + break; + } + } + public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { final TextView songTitle; final TextView songInfo; @@ -152,6 +175,8 @@ public class SongAdapter extends RecyclerView.Adapter { public void onClick(View v) { if (getItemViewType() == SHUFFLE_BUTTON) { MusicPlayerRemote.shuffleAllSongs(activity); + } else if (isInQuickSelectMode()) { + toggleChecked(getAdapterPosition()); } else { MusicPlayerRemote.openQueue(dataSet, getAdapterPosition() - 1, true); } @@ -164,11 +189,6 @@ public class SongAdapter extends RecyclerView.Adapter { } } - private void toggleChecked(final int position) { - final int id = dataSet.get(position - 1).id; - if (!checked.add(id)) checked.remove(id); - notifyItemChanged(position); - } @Override public void onDetachedFromRecyclerView(RecyclerView recyclerView) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java b/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java index fdf19e15..fe62786d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java @@ -21,6 +21,7 @@ import com.kabouzeid.gramophone.service.MusicService; import com.kabouzeid.gramophone.util.InternalStorageUtil; import java.util.ArrayList; +import java.util.List; import java.util.Random; /** @@ -251,6 +252,14 @@ public class MusicPlayerRemote { } } + public static void enqueue(List songs) { + if (musicService != null) { + musicService.addSongs(songs); + final String toast = songs.size() > 1 ? musicService.getResources().getString(R.string.added_x_titles_to_playing_queue, songs.size()) : musicService.getResources().getString(R.string.added_title_to_playing_queue); + Toast.makeText(musicService, toast, Toast.LENGTH_SHORT).show(); + } + } + public static void removeFromQueue(Song song) { if (musicService != null) { musicService.removeSong(song); diff --git a/app/src/main/java/com/kabouzeid/gramophone/interfaces/CabHolder.java b/app/src/main/java/com/kabouzeid/gramophone/interfaces/CabHolder.java new file mode 100644 index 00000000..cf836d88 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/interfaces/CabHolder.java @@ -0,0 +1,11 @@ +package com.kabouzeid.gramophone.interfaces; + +import com.afollestad.materialcab.MaterialCab; + +/** + * @author Karim Abou Zeid (kabouzeid) + */ +public interface CabHolder { + + MaterialCab openCab(final int menuRes, final MaterialCab.Callback callback); +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java index b7a13887..24cdfd55 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java @@ -27,9 +27,8 @@ public class AlbumLoader { final int artistId = cursor.getInt(3); final int songCount = cursor.getInt(4); final int year = cursor.getInt(5); - final String albumArtPath = cursor.getString(6); - final Album album = new Album(id, albumName, artist, artistId, songCount, year, albumArtPath); + final Album album = new Album(id, albumName, artist, artistId, songCount, year); albums.add(album); } while (cursor.moveToNext()); } @@ -58,8 +57,6 @@ public class AlbumLoader { MediaStore.Audio.AlbumColumns.NUMBER_OF_SONGS, /* 5 */ MediaStore.Audio.AlbumColumns.FIRST_YEAR, - /* 6 */ - MediaStore.Audio.AlbumColumns.ALBUM_ART }, selection, values, PreferenceUtils.getInstance(context).getAlbumSortOrder()); } @@ -73,9 +70,8 @@ public class AlbumLoader { final int artistId = cursor.getInt(3); final int songCount = cursor.getInt(4); final int year = cursor.getInt(5); - final String albumArtPath = cursor.getString(6); - album = new Album(id, albumName, artist, artistId, songCount, year, albumArtPath); + album = new Album(id, albumName, artist, artistId, songCount, year); } if (cursor != null) { @@ -95,9 +91,8 @@ public class AlbumLoader { final int artistId = cursor.getInt(3); final int songCount = cursor.getInt(4); final int year = cursor.getInt(5); - final String albumArtPath = cursor.getString(6); - final Album album = new Album(id, albumName, artist, artistId, songCount, year, albumArtPath); + final Album album = new Album(id, albumName, artist, artistId, songCount, year); albums.add(album); } while (cursor.moveToNext()); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java index a931616c..df5d1d11 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java @@ -27,9 +27,8 @@ public class AlbumSongLoader { final long duration = cursor.getLong(4); final int trackNumber = cursor.getInt(5); final int artistId = cursor.getInt(6); - final long dateModified = cursor.getInt(7); - final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, dateModified); + final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber); songs.add(song); } while (cursor.moveToNext()); } @@ -54,9 +53,7 @@ public class AlbumSongLoader { /* 5 */ MediaStore.Audio.AudioColumns.TRACK, /* 6 */ - MediaStore.Audio.AudioColumns.ARTIST_ID, - /* 7 */ - MediaStore.Audio.AudioColumns.DATE_MODIFIED + MediaStore.Audio.AudioColumns.ARTIST_ID }, (MediaStore.Audio.AudioColumns.IS_MUSIC + "=1") + " AND " + MediaStore.Audio.AudioColumns.TITLE + " != ''" + " AND " + MediaStore.Audio.AudioColumns.ALBUM_ID + "=" + albumId, null, diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java index eaa82d0d..893a53f6 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java @@ -26,9 +26,8 @@ public class ArtistAlbumLoader { final String artist = cursor.getString(2); final int songCount = cursor.getInt(3); final int year = cursor.getInt(4); - final String albumArtPath = cursor.getString(5); - final Album album = new Album(id, albumName, artist, artistId, songCount, year, albumArtPath); + final Album album = new Album(id, albumName, artist, artistId, songCount, year); albums.add(album); } while (cursor.moveToNext()); } @@ -51,8 +50,6 @@ public class ArtistAlbumLoader { MediaStore.Audio.AlbumColumns.NUMBER_OF_SONGS, /* 4 */ MediaStore.Audio.AlbumColumns.FIRST_YEAR, - /* 5 */ - MediaStore.Audio.AlbumColumns.ALBUM_ART }, null, null, PreferenceUtils.getInstance(context).getArtistAlbumSortOrder()); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java index 3d84ef23..2a68191c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java @@ -27,9 +27,8 @@ public class ArtistSongLoader { final long duration = cursor.getLong(4); final int trackNumber = cursor.getInt(5); final int albumId = cursor.getInt(6); - final long dateModified = cursor.getInt(7); - final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, dateModified); + final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber); songs.add(song); } while (cursor.moveToNext()); } @@ -54,9 +53,7 @@ public class ArtistSongLoader { /* 5 */ MediaStore.Audio.AudioColumns.TRACK, /* 6 */ - MediaStore.Audio.AudioColumns.ALBUM_ID, - /* 7 */ - MediaStore.Audio.AudioColumns.DATE_MODIFIED + MediaStore.Audio.AudioColumns.ALBUM_ID }, (MediaStore.Audio.AudioColumns.IS_MUSIC + "=1") + " AND " + MediaStore.Audio.AudioColumns.TITLE + " != ''" + " AND " + MediaStore.Audio.AudioColumns.ARTIST_ID + "=" + artistId, null, diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java index 619daf1e..5b201d99 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java @@ -26,9 +26,8 @@ public class PlaylistSongLoader { final int albumId = cursor.getInt(6); final int artistId = cursor.getInt(7); final int idInPlaylist = cursor.getInt(8); - final long dateModified = cursor.getInt(9); - final PlaylistSong song = new PlaylistSong(id, albumId, artistId, songName, artist, album, duration, trackNumber, playlistID, idInPlaylist, dateModified); + final PlaylistSong song = new PlaylistSong(id, albumId, artistId, songName, artist, album, duration, trackNumber, playlistID, idInPlaylist); songs.add(song); } while (cursor.moveToNext()); @@ -60,9 +59,7 @@ public class PlaylistSongLoader { /* 7 */ AudioColumns.ARTIST_ID, /* 8 */ - MediaStore.Audio.Playlists.Members._ID, - /* 9 */ - MediaStore.Audio.AudioColumns.DATE_MODIFIED + MediaStore.Audio.Playlists.Members._ID }, (AudioColumns.IS_MUSIC + "=1") + " AND " + AudioColumns.TITLE + " != ''", null, MediaStore.Audio.Playlists.Members.DEFAULT_SORT_ORDER); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java index 9c7e00b5..0bc8607c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java @@ -30,9 +30,8 @@ public class SongLoader { final int trackNumber = cursor.getInt(5); final int artistId = cursor.getInt(6); final int albumId = cursor.getInt(7); - final long dateModified = cursor.getInt(8); - final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, dateModified); + final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber); songs.add(song); } while (cursor.moveToNext()); } @@ -68,9 +67,7 @@ public class SongLoader { /* 6 */ MediaStore.Audio.AudioColumns.ARTIST_ID, /* 7 */ - MediaStore.Audio.AudioColumns.ALBUM_ID, - /* 8 */ - MediaStore.Audio.AudioColumns.DATE_MODIFIED + MediaStore.Audio.AudioColumns.ALBUM_ID }, finalSelection, values, PreferenceUtils.getInstance(context).getSongSortOrder()); } @@ -87,9 +84,8 @@ public class SongLoader { final int trackNumber = cursor.getInt(5); final int artistId = cursor.getInt(6); final int albumId = cursor.getInt(7); - final long dateModified = cursor.getInt(8); - final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, dateModified); + final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber); songs.add(song); } while (cursor.moveToNext()); } @@ -111,8 +107,7 @@ public class SongLoader { final int trackNumber = cursor.getInt(5); final int artistId = cursor.getInt(6); final int albumId = cursor.getInt(7); - final long dateModified = cursor.getInt(8); - song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, dateModified); + song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber); } if (cursor != null) { cursor.close(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Album.java b/app/src/main/java/com/kabouzeid/gramophone/model/Album.java index b674c284..f3a000d0 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Album.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Album.java @@ -11,17 +11,15 @@ public class Album { public final String artistName; public final int songCount; public final int year; - public final String albumArtPath; //used as cache key public Album(final int id, final String title, final String artistName, final int artistId, - final int songNumber, final int albumYear, final String albumArtPath) { + final int songNumber, final int albumYear) { this.id = id; this.title = title; this.artistName = artistName; this.artistId = artistId; songCount = songNumber; year = albumYear; - this.albumArtPath = albumArtPath != null ? albumArtPath : ""; } public Album() { @@ -31,6 +29,5 @@ public class Album { this.artistId = -1; songCount = -1; year = -1; - this.albumArtPath = ""; } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java b/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java index e746a877..2d40c30d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java @@ -8,8 +8,8 @@ public class PlaylistSong extends Song { public final int idInPlayList; public PlaylistSong(final int id, final int albumId, final int artistId, final String title, final String artistName, - final String albumName, final long duration, final int trackNumber, final int playlistId, final int idInPlayList, final long dateModified) { - super(id, albumId, artistId, title, artistName, albumName, duration, trackNumber, dateModified); + final String albumName, final long duration, final int trackNumber, final int playlistId, final int idInPlayList) { + super(id, albumId, artistId, title, artistName, albumName, duration, trackNumber); this.playlistId = playlistId; this.idInPlayList = idInPlayList; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Song.java b/app/src/main/java/com/kabouzeid/gramophone/model/Song.java index 4497f70b..4543586d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Song.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Song.java @@ -1,5 +1,7 @@ package com.kabouzeid.gramophone.model; +import android.text.TextUtils; + import java.io.Serializable; /** @@ -17,10 +19,9 @@ public class Song implements Serializable { public final String albumName; public final long duration; public final int trackNumber; - public final long dateModified; //used as cache key public Song(final int id, final int albumId, final int artistId, final String title, final String artistName, - final String albumName, final long duration, final int trackNumber, final long dateModified) { + final String albumName, final long duration, final int trackNumber) { this.id = id; this.albumId = albumId; this.artistId = artistId; @@ -29,7 +30,6 @@ public class Song implements Serializable { this.albumName = albumName; this.duration = duration; this.trackNumber = trackNumber; - this.dateModified = dateModified; } public Song() { @@ -41,6 +41,49 @@ public class Song implements Serializable { this.albumName = ""; this.duration = -1; this.trackNumber = -1; - this.dateModified = -1; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (albumName == null ? 0 : albumName.hashCode()); + result = prime * result + (artistName == null ? 0 : artistName.hashCode()); + result = prime * result + (int) duration; + result = prime * result + id; + result = prime * result + (title == null ? 0 : title.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Song other = (Song) obj; + if (id != other.id) { + return false; + } + if (!TextUtils.equals(albumName, other.albumName)) { + return false; + } + if (!TextUtils.equals(artistName, other.artistName)) { + return false; + } + if (duration != other.duration) { + return false; + } + return TextUtils.equals(title, other.title); + } + + @Override + public String toString() { + return title; } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java index dbabf5e7..53c92f6a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java @@ -42,6 +42,7 @@ import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListene import java.io.IOException; import java.util.ArrayList; +import java.util.List; public class MusicService extends Service implements MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener, AudioManager.OnAudioFocusChangeListener { public static final String ACTION_TOGGLE_PLAYBACK = "com.kabouzeid.gramophone.action.TOGGLE_PLAYBACK"; @@ -552,6 +553,18 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe saveState(); } + public void addSongs(int position, List songs) { + playingQueue.addAll(position, songs); + originalPlayingQueue.addAll(position, songs); + saveState(); + } + + public void addSongs(List songs) { + playingQueue.addAll(songs); + originalPlayingQueue.addAll(songs); + saveState(); + } + public void removeSong(int position) { if (getShuffleMode() == SHUFFLE_MODE_NONE) { playingQueue.remove(position); 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 1de1e71e..9c37fb60 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 @@ -25,6 +25,7 @@ import android.view.MenuItem; import android.view.SubMenu; import android.widget.FrameLayout; +import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialdialogs.ThemeSingleton; import com.astuetz.PagerSlidingTabStrip; import com.kabouzeid.gramophone.R; @@ -32,6 +33,7 @@ import com.kabouzeid.gramophone.adapter.PagerAdapter; import com.kabouzeid.gramophone.dialogs.AboutDialog; import com.kabouzeid.gramophone.dialogs.CreatePlaylistDialog; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; +import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble; import com.kabouzeid.gramophone.loader.AlbumSongLoader; import com.kabouzeid.gramophone.loader.ArtistSongLoader; @@ -57,7 +59,7 @@ import java.util.List; import java.util.Set; public class MainActivity extends AbsFabActivity - implements NavigationDrawerFragment.NavigationDrawerCallbacks, KabViewsDisableAble { + implements NavigationDrawerFragment.NavigationDrawerCallbacks, KabViewsDisableAble, CabHolder { public static final String TAG = MainActivity.class.getSimpleName(); @@ -69,6 +71,7 @@ public class MainActivity extends AbsFabActivity private ViewPager viewPager; private PagerSlidingTabStrip slidingTabLayout; private int currentPage = -1; + private MaterialCab cab; @Override protected void onCreate(Bundle savedInstanceState) { @@ -553,4 +556,14 @@ public class MainActivity extends AbsFabActivity }); return super.onMenuOpened(featureId, menu); } + + @Override + public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) { + if (cab != null) cab.finish(); + cab = new MaterialCab(this, R.id.cab_stub) + .setMenu(menu) + .setBackgroundColor(PreferenceUtils.getInstance(this).getThemeColorPrimary()) + .start(callback); + return cab; + } } \ No newline at end of file diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java index 271f8452..0739b3b3 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java @@ -5,6 +5,7 @@ import android.support.v4.app.Fragment; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble; +import com.kabouzeid.gramophone.ui.activities.MainActivity; import com.kabouzeid.gramophone.util.Util; /** @@ -29,6 +30,10 @@ public abstract class AbsMainActivityFragment extends Fragment implements KabVie return getResources().getDimensionPixelSize(R.dimen.bottom_offset_fab_activity); } + protected MainActivity getMainActivity() { + return (MainActivity) getActivity(); + } + @Override public void enableViews() { areViewsEnabled = true; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java index 1697b487..9d068485 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java @@ -26,6 +26,6 @@ public class SongViewFragment extends AbsMainActivityRecyclerViewFragment { @Override protected RecyclerView.Adapter createAdapter() { - return new SongAdapter((AppCompatActivity) getActivity()); + return new SongAdapter((AppCompatActivity) getActivity(), getMainActivity()); } } diff --git a/app/src/main/res/drawable-hdpi/ic_delete_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_delete_white_24dp.png new file mode 100644 index 00000000..5e89821e Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_delete_white_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_playlist_add_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_playlist_add_white_24dp.png new file mode 100644 index 00000000..e466600a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_playlist_add_white_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_queue_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_queue_white_24dp.png new file mode 100644 index 00000000..7efdfab6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_queue_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_delete_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_delete_white_24dp.png new file mode 100644 index 00000000..8d48b838 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_delete_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_playlist_add_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_playlist_add_white_24dp.png new file mode 100644 index 00000000..a86bc505 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_playlist_add_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_queue_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_queue_white_24dp.png new file mode 100644 index 00000000..1aeb991a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_queue_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_delete_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_delete_white_24dp.png new file mode 100644 index 00000000..3c9e1718 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_delete_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_playlist_add_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_playlist_add_white_24dp.png new file mode 100644 index 00000000..aa874a65 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_playlist_add_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_queue_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_queue_white_24dp.png new file mode 100644 index 00000000..6ab40bc4 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_queue_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_delete_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_delete_white_24dp.png new file mode 100644 index 00000000..5d2e8ea3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_delete_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_playlist_add_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_playlist_add_white_24dp.png new file mode 100644 index 00000000..82e0ee1f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_playlist_add_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_queue_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_queue_white_24dp.png new file mode 100644 index 00000000..844e8c4e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_queue_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_delete_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_delete_white_24dp.png new file mode 100644 index 00000000..e7b2514d Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_delete_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_playlist_add_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_playlist_add_white_24dp.png new file mode 100644 index 00000000..ae4cdc5b Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_playlist_add_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_queue_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_queue_white_24dp.png new file mode 100644 index 00000000..cffe4fa8 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_queue_white_24dp.png differ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4386dc78..d47aac85 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -20,15 +20,22 @@ android:fitsSystemWindows="true" /> + android:paddingTop="@dimen/main_toolbar_padding_top" + tools:ignore="UnusedAttribute"> - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 2b049b81..a37fbebe 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -1,16 +1,17 @@ "الإعدادات" - عنى - يتم التشغيل حالياً - قائمة الانتظار + " عن التطبيق +" + الإستماع الآن + قائمة الإنتظار بحث استمع لاحقاً - أضف إلى قائمة الانتظار + أضف إلى قائمة الإنتظار أزل من قائمة الانتظار أضف إلى قائمة تشغيل... - تعديل معلومات الموسيقى - حذف + تعديل معلومات الملف + حذف نهائي التفاصيل الألبومات الفنانون @@ -27,30 +28,29 @@ النوع فنان الألبوم السنة - الموسيقى + "المقطع " "الموسيقى (٢ للموسيقى ٢ أو ٣٠٠٤ للموسيقى ٤)" حقل نص اسم الألبوم أو اسم الفنان فارغ تتم كتابة الملف يتم حفظ التغييرات... التفاصيل - اسم الملف + إسم الملف مسار الملف الحجم - التنسيق + نوع الملف الطول معدل البت معدل أخذ العينات - اذهب إلى الفنان - اذهب إلى الألبوم - قائمة الانتظار + إذهب إلى الفنان + إذهب إلى الألبوم + قائمة الإنتظار حفظ كقائمة تشغيل - الأيقونة من - "مشغل الموسيقى فونقراف هو برنامج مجاني بشكلٍ كامل بتصميم أنيق من " + الأيقونة من تصميم + "مشغل الموسيقى فونقراف هو برنامج مجاني بشكلٍ كامل بتصميم أنيق من تصميم" بحث لا توجد نتائج تحديث صورة الفنان يتم التحديث... - "تمت الإضافة إلى قائمة الانتظار" حذف من قائمة التشغيل قائمة تشغيل جديدة... عدد قوائم الشبكة @@ -71,14 +71,14 @@ حذف قائمة التشغيل "إضافة إلى قائمة التشغيل" قائمة تشغيل جديدة - "تحذير: لا يمكن التراجع هذه العملية." + "تحذير: لا يمكن التراجع عن هذه العملية." عشوائي آخر ما تم فتحه فاتح داكن المعادل واجهة المستخدم - السمة الأساسية + الثيم العام الصوت عام في أي مشهد يتم تلوين شريط التنقل @@ -93,4 +93,35 @@ مشهد قائمة التشغيل تعديل معلومات الموسيقى في أي مكان + الهوامش السفلية للألبومات ملونة + لا يوجد معدل صوت + "لا يوجد audio id, شغل شيئا وحاول مرة أخرى." + إفتح قائمة التصفح الجانبية + "إغلاق قائمة التصفح الجانبية" + حذف + إعادة التسمية + إختيار + إفتراضي + اللون الأساسي + اللون الثانوي + تحديد الأزرق النيلي كلون ثيم اساسي. + تحديد الوردي كلون ثانوي. + تحديث الصورة + قائمة التشغيل فارغة + لا توجد قوائم تشغيل + إسم قائمة الشغيل + الأغنية + "متوفر في نظام التشغيل Lollipop." + جعل المحتوى الذي يمر تحت شريط الأدوات مرئيا. + "تلوين الهوامش السفلية للألبومات بلون غلاف الألبوم." + "تعذر تحميل صور هذا الألبوم." + البحث في المكتبة... + إعادة تفحص الملفات... + + تحميل من last.fm + اختيار من ذاكرة التخزين الداخلية + بحث في الإنترنات + حذف الغلاف + + "تمت الإضافة إلى قائمة الانتظار" diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 4649c68c..375c33a0 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -50,7 +50,6 @@ Žádné výsledky Změnit obrázek umělce Aktualizace... - "Přidána 1 skladba do fronty." Vymazat z playlistu Nový playlist... Počet sloupců mřížky @@ -120,4 +119,5 @@ Najít na webu Odstranit obal alba + "Přidána 1 skladba do fronty." diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 3f40a4ea..25dd5d07 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -50,7 +50,7 @@ Keine Ergebnisse Interpretenbild aktualisieren Aktualisiere... - "1 Titel wurde der Wiedergabeliste hinzugefügt." + %1$d Titel wurden der Wiedergabeliste hinzugefügt. Aus Playlist entfernen Neue Playlist… Rastergröße @@ -120,4 +120,5 @@ Web suche Cover entfernen + "1 Titel wurde der Wiedergabeliste hinzugefügt." diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index fd24d489..1c20b3bd 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -50,7 +50,6 @@ Κανένα αποτέλεσμα Ανανέωση εικόνας καλλιτέχνη Γίνεται ανανέωση... - "Προστέθηκε ένας τίτλος στη σειρά αναπαραγωγής" Διαγραφή από τη λίστα αναπαραγωγής Νέα λίστα αναπαραγωγής... Στήλες πλέγματος @@ -120,4 +119,5 @@ Αναζήτηση στο διαδίκτυο Διαγραφή εξώφυλλου + "Προστέθηκε ένας τίτλος στη σειρά αναπαραγωγής" diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 27773a0a..da0b4500 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -50,7 +50,6 @@ Sin resultados Actualizar imagen del artista Actualizando... - "1 título añadido a la cola de reproducción" Borrar de la lista de reproducción Nueva lista de reproducción... Columnas de la cuadrícula @@ -118,4 +117,5 @@ Busqueda Web Eliminar Carátula + "1 título añadido a la cola de reproducción" diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 907a03e4..abe8644e 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -3,11 +3,11 @@ "Paramètres" À propos Lecture en cours - File de lecture + Liste de lecture Rechercher - Lire ensuite - Ajouter à la file de lecture - Retirer de la file de lecture + Prochaine lecture + Ajouter à la liste de lecture + Retirer de la liste de lecture Ajouter à une playlist... Éditeur d\'infos Supprimer de l\'appareil @@ -31,10 +31,10 @@ "Piste (2 pour piste 2 ou 3004 pour CD3 piste 4)" Veuillez indiquer le nom et l\'artiste de l\'album. Fichier en cours d\'écriture - Sauvegarde des changements... + Sauvegarde en cours... Détails Nom du fichier - Chemin du fichier + Location du fichier Taille Format Durée @@ -45,12 +45,11 @@ File de lecture Sauvegarder Icône par - "Phonograph est un lecteur de musique avec un Material Design et entièrement gratuit créé par" + "Phonograph est un lecteur de musique entièrement gratuit avec le concept de Material Design créé par" Rechercher Aucun résultat Actualiser l\'image de l\'artiste Actualisation... - "1 titre ajouté à la file de lecture." Supprimer de la playlist Nouvelle playlist... Nombre de colonnes @@ -120,4 +119,5 @@ Recherche internet Supprimer la couverture + "1 titre ajouté à la file de lecture." diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index d3022808..daf59af7 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -12,9 +12,9 @@ Modifica tag Elimina Dettagli - album + Album Artisti - brani + Brani Playlist Niente in riproduzione Spiacenti - si è verificato un errore nel tentativo di riprodurre questa canzone @@ -52,7 +52,6 @@ Nessun risultato Aggiorna immagine artista Aggiornamento... - "Un brano aggiunto alla coda." DettagliAttivitàPlaylist Elimina dalla playlist Nuova playlist... @@ -123,4 +122,5 @@ Cerca nel web Rimuovi copertina + "Un brano aggiunto alla coda." diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 5267f8a0..72d56453 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -50,7 +50,6 @@ 결과 없음 아티스트 이미지 변경 변경 중... - "재생 대기열에 1개의 음악을 추가했습니다." 재생목록에서 삭제 새로운 재생목록... 가로세로 격자 @@ -121,4 +120,5 @@ 인터넷 검색 커버 없애기 + "재생 대기열에 1개의 음악을 추가했습니다." diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index c5e71ea7..a2c818eb 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -50,7 +50,6 @@ Geen resultaten Artiest afbeelding bijwerken Bijwerken... - "1 titel toegevoegd aan de afspeelwachtrij." Verwijderen uit afspeellijst Nieuwe afspeellijst... Rasterkolommen @@ -120,4 +119,5 @@ Zoeken op internet Verwijder hoes + "1 titel toegevoegd aan de afspeelwachtrij." diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index e3c05028..f6612073 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -52,7 +52,6 @@ Brak wyników Zaktualizuj zdjęcie wykonawcy Aktualizowanie... - "Dodano 1 tytuł do kolejki odtwarzania" Usuń z listy odtwarzania Nowa lista odtwarzania... Siatka kolumn @@ -122,4 +121,5 @@ Szukaj w sieci Usuń okładkę + "Dodano 1 tytuł do kolejki odtwarzania" diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 9aed5cdb..1ba9e656 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -50,7 +50,6 @@ Sem resultados Atualizar imagem do artista Atualizando... - "1 título adicionado à lista de reprodução" Excluir da playlist Nova playlist... Colunas da grade @@ -120,4 +119,5 @@ Pesquisar na Internet Remover Arte do Album + "1 título adicionado à lista de reprodução" diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 52d6e8e3..c60997c7 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -49,7 +49,6 @@ Nenhum resultado Atualizar imagem do artista Atualizando... - "Adicionada uma música para a fila atual de músicas." Apagar da playlist Colunas da grade Colunas da grade (Paisagem) @@ -74,4 +73,5 @@ Abrir área de navegação "Fechar área de navegação" Música + "Adicionada uma música para a fila atual de músicas." diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 9468a11d..738749e9 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -49,7 +49,6 @@ Niciun rezultat Actualizează imagine artist Actualizare... - "Adăugat 1 melodie la lista de redare." Şterge din playlist Playlist nou... Rânduri pe grid @@ -99,4 +98,5 @@ Culoare Primară Culoare de accent Melodie + "Adăugat 1 melodie la lista de redare." diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 471c1808..b13f32bd 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -50,7 +50,6 @@ Нет результатов Обновить изображение исполнителя Обновление... - "Добавлена 1 композиция в очередь воспроизведения" Удалить из списка воспроизведения Новый список воспроизведения... Столбцы сетки @@ -120,4 +119,5 @@ Поиск в интернете Удалить обложку + "Добавлена 1 композиция в очередь воспроизведения" diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 88fef55e..9b0affcd 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -50,7 +50,6 @@ Inga resultat Uppdatera artistbild Uppdaterar ... - "Lagt till 1 titel till spellistan." Radera från spellista Ny spellista ... Spellista %1$s skapad @@ -115,4 +114,5 @@ Vill du radera %1$d låtar? Weksök Ta bort omslag + "Lagt till 1 titel till spellistan." diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index e3b216e5..33e3beca 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -50,7 +50,6 @@ Sonuç bulunamadı Sanatçı resmini güncelle Güncelleniyor... - "Çalma sırasına 1 başlık eklendi" Çalma listesinden sil Yeni çalma listesi Izgara sütunları @@ -120,4 +119,5 @@ Web\'de ara Albüm Kapağını Kaldır + "Çalma sırasına 1 başlık eklendi" diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 5db100c5..e866a9d4 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -50,7 +50,6 @@ 没有找到结果 更新歌手图片 正在更新… - "该曲目已加入播放队列" 从播放列表中删除 新建播放列表 专辑列数 @@ -120,4 +119,5 @@ 通过网络搜索 删除封面 + "该曲目已加入播放队列" diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index cca45c35..bf78e3b8 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -50,7 +50,6 @@ 無搜尋結果 更新歌手圖片 更新中… - "這歌曲已加入播放佇列" 從音樂清單移除 新增音樂清單 專輯網格列數 @@ -120,4 +119,5 @@ 網路搜尋 刪除封面 + "這歌曲已加入播放佇列" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a3d04136..9e2745d2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -53,7 +53,8 @@ No results Update artist image Updating… - Added 1 title to the playing queue. + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. Playlist Activity Delete from playlist New playlist… diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 3e606a12..56e647d3 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -43,7 +43,7 @@