Prepared everything for multi-selection and implemented it in the song view for now.

This commit is contained in:
Karim Abou Zeid 2015-05-24 20:33:14 +02:00
commit 8503eb4e36
55 changed files with 348 additions and 108 deletions

View file

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

View file

@ -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<VH extends RecyclerView.ViewHolder, I> extends RecyclerView.Adapter<VH> implements MaterialCab.Callback {
private final CabHolder cabHolder;
private MaterialCab cab;
private ArrayList<I> 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<I> selection);
}

View file

@ -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<SongAdapter.ViewHolder> {
public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, Song> 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<SongAdapter.ViewHolder> {
protected final AppCompatActivity activity;
protected ArrayList<Song> dataSet;
private HashSet<Integer> 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<SongAdapter.ViewHolder> {
.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<SongAdapter.ViewHolder> {
return dataSet.size() + 1;
}
@Override
protected Song getIdentifier(int position) {
return dataSet.get(position - 1);
}
@Override
protected void onMultipleItemAction(MenuItem menuItem, ArrayList<Song> 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<SongAdapter.ViewHolder> {
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<SongAdapter.ViewHolder> {
}
}
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) {

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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<Song> songs) {
playingQueue.addAll(position, songs);
originalPlayingQueue.addAll(position, songs);
saveState();
}
public void addSongs(List<Song> songs) {
playingQueue.addAll(songs);
originalPlayingQueue.addAll(songs);
saveState();
}
public void removeSong(int position) {
if (getShuffleMode() == SHUFFLE_MODE_NONE) {
playingQueue.remove(position);

View file

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

View file

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

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 444 B

View file

@ -20,15 +20,22 @@
android:fitsSystemWindows="true" />
<LinearLayout
android:elevation="@dimen/toolbar_elevation"
android:id="@+id/toolbarFrame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="@dimen/main_toolbar_padding_top">
android:paddingTop="@dimen/main_toolbar_padding_top"
tools:ignore="UnusedAttribute">
<android.support.v7.widget.Toolbar
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
style="@style/Toolbar"
android:elevation="0dp"
android:background="?colorPrimary">
<TextView
@ -46,12 +53,19 @@
</android.support.v7.widget.Toolbar>
<ViewStub
android:id="@+id/cab_stub"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
</FrameLayout>
<com.astuetz.PagerSlidingTabStrip
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="@dimen/tab_height"
android:background="?colorPrimary"
android:elevation="@dimen/toolbar_elevation"
android:elevation="0dp"
android:paddingLeft="64dp"
android:paddingStart="64dp"
android:textColor="@color/sliding_tabs_deactivated"

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_add_to_playlist"
android:icon="@drawable/ic_playlist_add_white_24dp"
android:title="@string/action_add_to_playlist"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_add_to_current_playing"
android:icon="@drawable/ic_queue_white_24dp"
android:title="@string/action_add_to_playing_queue"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_delete_from_disk"
android:icon="@drawable/ic_delete_white_24dp"
android:title="@string/action_delete_from_disk"
app:showAsAction="ifRoom" />
</menu>

View file

@ -1,16 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_settings">"الإعدادات"</string>
<string name="action_about">عنى</string>
<string name="action_currently_playing">يتم التشغيل حالياً</string>
<string name="action_playing_queue">قائمة الانتظار</string>
<string name="action_about">" عن التطبيق
"</string>
<string name="action_currently_playing">الإستماع الآن</string>
<string name="action_playing_queue">قائمة الإنتظار</string>
<string name="action_search">بحث</string>
<string name="action_play_next">استمع لاحقاً</string>
<string name="action_add_to_playing_queue">أضف إلى قائمة الانتظار</string>
<string name="action_add_to_playing_queue">أضف إلى قائمة الإنتظار</string>
<string name="action_remove_from_playing_queue">أزل من قائمة الانتظار</string>
<string name="action_add_to_playlist">أضف إلى قائمة تشغيل...</string>
<string name="action_tag_editor">تعديل معلومات الموسيقى</string>
<string name="action_delete_from_disk">حذف</string>
<string name="action_tag_editor">تعديل معلومات الملف</string>
<string name="action_delete_from_disk">حذف نهائي</string>
<string name="action_details">التفاصيل</string>
<string name="albums">الألبومات</string>
<string name="artists">الفنانون</string>
@ -27,30 +28,29 @@
<string name="genre">النوع</string>
<string name="album_artist">فنان الألبوم</string>
<string name="year">السنة</string>
<string name="track">الموسيقى</string>
<string name="track">"المقطع "</string>
<string name="track_hint">"الموسيقى (٢ للموسيقى ٢ أو ٣٠٠٤ للموسيقى ٤)"</string>
<string name="album_or_artist_empty">حقل نص اسم الألبوم أو اسم الفنان فارغ</string>
<string name="writing_file_number">تتم كتابة الملف</string>
<string name="saving_changes">يتم حفظ التغييرات...</string>
<string name="label_details">التفاصيل</string>
<string name="label_file_name">اسم الملف</string>
<string name="label_file_name">إسم الملف</string>
<string name="label_file_path">مسار الملف</string>
<string name="label_file_size">الحجم</string>
<string name="label_file_format">التنسيق</string>
<string name="label_file_format">نوع الملف</string>
<string name="label_track_length">الطول</string>
<string name="label_bit_rate">معدل البت</string>
<string name="label_sampling_rate">معدل أخذ العينات</string>
<string name="action_go_to_artist">اذهب إلى الفنان</string>
<string name="action_go_to_album">اذهب إلى الألبوم</string>
<string name="label_current_playing_queue">قائمة الانتظار</string>
<string name="action_go_to_artist">إذهب إلى الفنان</string>
<string name="action_go_to_album">إذهب إلى الألبوم</string>
<string name="label_current_playing_queue">قائمة الإنتظار</string>
<string name="save_as_playlist">حفظ كقائمة تشغيل</string>
<string name="credits_3">الأيقونة من</string>
<string name="credits_1">"مشغل الموسيقى فونقراف هو برنامج مجاني بشكلٍ كامل بتصميم أنيق من "</string>
<string name="credits_3">الأيقونة من تصميم</string>
<string name="credits_1">"مشغل الموسيقى فونقراف هو برنامج مجاني بشكلٍ كامل بتصميم أنيق من تصميم"</string>
<string name="title_activity_search">بحث</string>
<string name="no_results">لا توجد نتائج</string>
<string name="action_re_download_artist_image">تحديث صورة الفنان</string>
<string name="updating">يتم التحديث...</string>
<string name="added_title_to_playing_queue">"تمت الإضافة إلى قائمة الانتظار"</string>
<string name="action_delete_from_playlist">حذف من قائمة التشغيل</string>
<string name="new_playlist_action">قائمة تشغيل جديدة...</string>
<string name="action_grid_columns">عدد قوائم الشبكة</string>
@ -71,14 +71,14 @@
<string name="delete_playlist_title">حذف قائمة التشغيل</string>
<string name="add_playlist_title">"إضافة إلى قائمة التشغيل"</string>
<string name="new_playlist_title">قائمة تشغيل جديدة</string>
<string name="delete_warning">"تحذير: لا يمكن التراجع هذه العملية."</string>
<string name="delete_warning">"تحذير: لا يمكن التراجع عن هذه العملية."</string>
<string name="shuffle_all">عشوائي</string>
<string name="last_opened">آخر ما تم فتحه</string>
<string name="light_theme_name">فاتح</string>
<string name="dark_theme_name">داكن</string>
<string name="equalizer">المعادل</string>
<string name="pref_header_ui">واجهة المستخدم</string>
<string name="pref_title_general_theme">السمة الأساسية</string>
<string name="pref_title_general_theme">الثيم العام</string>
<string name="pref_header_audio">الصوت</string>
<string name="pref_header_general">عام</string>
<string name="pref_summary_colored_navigation_bar">في أي مشهد يتم تلوين شريط التنقل</string>
@ -93,4 +93,35 @@
<string name="pref_title_colored_navigation_bar_playlists">مشهد قائمة التشغيل</string>
<string name="pref_title_colored_navigation_bar_tag_editor">تعديل معلومات الموسيقى</string>
<string name="pref_title_colored_navigation_bar_other_screens">في أي مكان</string>
<string name="pref_title_colored_album_footers">الهوامش السفلية للألبومات ملونة</string>
<string name="no_equalizer">لا يوجد معدل صوت</string>
<string name="no_audio_ID">"لا يوجد audio id, شغل شيئا وحاول مرة أخرى."</string>
<string name="navigation_drawer_open">إفتح قائمة التصفح الجانبية</string>
<string name="navigation_drawer_close">"إغلاق قائمة التصفح الجانبية"</string>
<string name="delete_action">حذف</string>
<string name="rename_action">إعادة التسمية</string>
<string name="select">إختيار</string>
<string name="default_str">إفتراضي</string>
<string name="primary_color">اللون الأساسي</string>
<string name="accent_color">اللون الثانوي</string>
<string name="primary_color_desc">تحديد الأزرق النيلي كلون ثيم اساسي.</string>
<string name="accent_color_desc">تحديد الوردي كلون ثانوي.</string>
<string name="update_image">تحديث الصورة</string>
<string name="playlist_empty_text">قائمة التشغيل فارغة</string>
<string name="no_playlists">لا توجد قوائم تشغيل</string>
<string name="playlist_name">إسم قائمة الشغيل</string>
<string name="song">الأغنية</string>
<string name="pref_only_lollipop">"متوفر في نظام التشغيل Lollipop."</string>
<string name="pref_summary_transparent_toolbar">جعل المحتوى الذي يمر تحت شريط الأدوات مرئيا.</string>
<string name="pref_summary_colored_album_footers">"تلوين الهوامش السفلية للألبومات بلون غلاف الألبوم."</string>
<string name="failed_download_albumart">"تعذر تحميل صور هذا الألبوم."</string>
<string name="search_hint">البحث في المكتبة...</string>
<string name="rescanning_media">إعادة تفحص الملفات...</string>
<string-array name="update_album_cover_options">
<item>تحميل من last.fm</item>
<item>اختيار من ذاكرة التخزين الداخلية</item>
<item>بحث في الإنترنات</item>
<item>حذف الغلاف</item>
</string-array>
<string name="added_title_to_playing_queue">"تمت الإضافة إلى قائمة الانتظار"</string>
</resources>

View file

@ -50,7 +50,6 @@
<string name="no_results">Žádné výsledky</string>
<string name="action_re_download_artist_image">Změnit obrázek umělce</string>
<string name="updating">Aktualizace...</string>
<string name="added_title_to_playing_queue">"Přidána 1 skladba do fronty."</string>
<string name="action_delete_from_playlist">Vymazat z playlistu</string>
<string name="new_playlist_action">Nový playlist...</string>
<string name="action_grid_columns">Počet sloupců mřížky</string>
@ -120,4 +119,5 @@
<item>Najít na webu</item>
<item>Odstranit obal alba</item>
</string-array>
<string name="added_title_to_playing_queue">"Přidána 1 skladba do fronty."</string>
</resources>

View file

@ -50,7 +50,7 @@
<string name="no_results">Keine Ergebnisse</string>
<string name="action_re_download_artist_image">Interpretenbild aktualisieren</string>
<string name="updating">Aktualisiere...</string>
<string name="added_title_to_playing_queue">"1 Titel wurde der Wiedergabeliste hinzugefügt."</string>
<string name="added_x_titles_to_playing_queue">%1$d Titel wurden der Wiedergabeliste hinzugefügt.</string>
<string name="action_delete_from_playlist">Aus Playlist entfernen</string>
<string name="new_playlist_action">Neue Playlist…</string>
<string name="action_grid_columns">Rastergröße</string>
@ -120,4 +120,5 @@
<item>Web suche</item>
<item>Cover entfernen</item>
</string-array>
<string name="added_title_to_playing_queue">"1 Titel wurde der Wiedergabeliste hinzugefügt."</string>
</resources>

View file

@ -50,7 +50,6 @@
<string name="no_results">Κανένα αποτέλεσμα</string>
<string name="action_re_download_artist_image">Ανανέωση εικόνας καλλιτέχνη</string>
<string name="updating">Γίνεται ανανέωση...</string>
<string name="added_title_to_playing_queue">"Προστέθηκε ένας τίτλος στη σειρά αναπαραγωγής"</string>
<string name="action_delete_from_playlist">Διαγραφή από τη λίστα αναπαραγωγής</string>
<string name="new_playlist_action">Νέα λίστα αναπαραγωγής...</string>
<string name="action_grid_columns">Στήλες πλέγματος</string>
@ -120,4 +119,5 @@
<item>Αναζήτηση στο διαδίκτυο</item>
<item>Διαγραφή εξώφυλλου</item>
</string-array>
<string name="added_title_to_playing_queue">"Προστέθηκε ένας τίτλος στη σειρά αναπαραγωγής"</string>
</resources>

View file

@ -50,7 +50,6 @@
<string name="no_results">Sin resultados</string>
<string name="action_re_download_artist_image">Actualizar imagen del artista</string>
<string name="updating">Actualizando...</string>
<string name="added_title_to_playing_queue">"1 título añadido a la cola de reproducción"</string>
<string name="action_delete_from_playlist">Borrar de la lista de reproducción</string>
<string name="new_playlist_action">Nueva lista de reproducción...</string>
<string name="action_grid_columns">Columnas de la cuadrícula</string>
@ -118,4 +117,5 @@
<item>Busqueda Web</item>
<item>Eliminar Carátula</item>
</string-array>
<string name="added_title_to_playing_queue">"1 título añadido a la cola de reproducción"</string>
</resources>

View file

@ -3,11 +3,11 @@
<string name="action_settings">"Paramètres"</string>
<string name="action_about">À propos</string>
<string name="action_currently_playing">Lecture en cours</string>
<string name="action_playing_queue">File de lecture</string>
<string name="action_playing_queue">Liste de lecture</string>
<string name="action_search">Rechercher</string>
<string name="action_play_next">Lire ensuite</string>
<string name="action_add_to_playing_queue">Ajouter à la file de lecture</string>
<string name="action_remove_from_playing_queue">Retirer de la file de lecture</string>
<string name="action_play_next">Prochaine lecture</string>
<string name="action_add_to_playing_queue">Ajouter à la liste de lecture</string>
<string name="action_remove_from_playing_queue">Retirer de la liste de lecture</string>
<string name="action_add_to_playlist">Ajouter à une playlist...</string>
<string name="action_tag_editor">Éditeur d\'infos</string>
<string name="action_delete_from_disk">Supprimer de l\'appareil</string>
@ -31,10 +31,10 @@
<string name="track_hint">"Piste (2 pour piste 2 ou 3004 pour CD3 piste 4)"</string>
<string name="album_or_artist_empty">Veuillez indiquer le nom et l\'artiste de l\'album.</string>
<string name="writing_file_number">Fichier en cours d\'écriture</string>
<string name="saving_changes">Sauvegarde des changements...</string>
<string name="saving_changes">Sauvegarde en cours...</string>
<string name="label_details">Détails</string>
<string name="label_file_name">Nom du fichier</string>
<string name="label_file_path">Chemin du fichier</string>
<string name="label_file_path">Location du fichier</string>
<string name="label_file_size">Taille</string>
<string name="label_file_format">Format</string>
<string name="label_track_length">Durée</string>
@ -45,12 +45,11 @@
<string name="label_current_playing_queue">File de lecture</string>
<string name="save_as_playlist">Sauvegarder</string>
<string name="credits_3">Icône par</string>
<string name="credits_1">"Phonograph est un lecteur de musique avec un Material Design et entièrement gratuit créé par"</string>
<string name="credits_1">"Phonograph est un lecteur de musique entièrement gratuit avec le concept de Material Design créé par"</string>
<string name="title_activity_search">Rechercher</string>
<string name="no_results">Aucun résultat</string>
<string name="action_re_download_artist_image">Actualiser l\'image de l\'artiste</string>
<string name="updating">Actualisation...</string>
<string name="added_title_to_playing_queue">"1 titre ajouté à la file de lecture."</string>
<string name="action_delete_from_playlist">Supprimer de la playlist</string>
<string name="new_playlist_action">Nouvelle playlist...</string>
<string name="action_grid_columns">Nombre de colonnes</string>
@ -120,4 +119,5 @@
<item>Recherche internet</item>
<item>Supprimer la couverture</item>
</string-array>
<string name="added_title_to_playing_queue">"1 titre ajouté à la file de lecture."</string>
</resources>

View file

@ -12,9 +12,9 @@
<string name="action_tag_editor">Modifica tag</string>
<string name="action_delete_from_disk">Elimina</string>
<string name="action_details">Dettagli</string>
<string name="albums">album</string>
<string name="albums">Album</string>
<string name="artists">Artisti</string>
<string name="songs">brani</string>
<string name="songs">Brani</string>
<string name="playlists">Playlist</string>
<string name="nothing_playing">Niente in riproduzione</string>
<string name="unplayable_file">Spiacenti - si è verificato un errore nel tentativo di riprodurre questa canzone</string>
@ -52,7 +52,6 @@
<string name="no_results">Nessun risultato</string>
<string name="action_re_download_artist_image">Aggiorna immagine artista</string>
<string name="updating">Aggiornamento...</string>
<string name="added_title_to_playing_queue">"Un brano aggiunto alla coda."</string>
<string name="title_activity_playlist_detail">DettagliAttivitàPlaylist</string>
<string name="action_delete_from_playlist">Elimina dalla playlist</string>
<string name="new_playlist_action">Nuova playlist...</string>
@ -123,4 +122,5 @@
<item>Cerca nel web</item>
<item>Rimuovi copertina</item>
</string-array>
<string name="added_title_to_playing_queue">"Un brano aggiunto alla coda."</string>
</resources>

View file

@ -50,7 +50,6 @@
<string name="no_results">결과 없음</string>
<string name="action_re_download_artist_image">아티스트 이미지 변경</string>
<string name="updating">변경 중...</string>
<string name="added_title_to_playing_queue">"재생 대기열에 1개의 음악을 추가했습니다."</string>
<string name="action_delete_from_playlist">재생목록에서 삭제</string>
<string name="new_playlist_action">새로운 재생목록...</string>
<string name="action_grid_columns">가로세로 격자</string>
@ -121,4 +120,5 @@
<item>인터넷 검색</item>
<item>커버 없애기</item>
</string-array>
<string name="added_title_to_playing_queue">"재생 대기열에 1개의 음악을 추가했습니다."</string>
</resources>

View file

@ -50,7 +50,6 @@
<string name="no_results">Geen resultaten</string>
<string name="action_re_download_artist_image">Artiest afbeelding bijwerken</string>
<string name="updating">Bijwerken...</string>
<string name="added_title_to_playing_queue">"1 titel toegevoegd aan de afspeelwachtrij."</string>
<string name="action_delete_from_playlist">Verwijderen uit afspeellijst</string>
<string name="new_playlist_action">Nieuwe afspeellijst...</string>
<string name="action_grid_columns">Rasterkolommen</string>
@ -120,4 +119,5 @@
<item>Zoeken op internet</item>
<item>Verwijder hoes</item>
</string-array>
<string name="added_title_to_playing_queue">"1 titel toegevoegd aan de afspeelwachtrij."</string>
</resources>

View file

@ -52,7 +52,6 @@
<string name="no_results">Brak wyników</string>
<string name="action_re_download_artist_image">Zaktualizuj zdjęcie wykonawcy</string>
<string name="updating">Aktualizowanie...</string>
<string name="added_title_to_playing_queue">"Dodano 1 tytuł do kolejki odtwarzania"</string>
<string name="action_delete_from_playlist">Usuń z listy odtwarzania</string>
<string name="new_playlist_action">Nowa lista odtwarzania...</string>
<string name="action_grid_columns">Siatka kolumn</string>
@ -122,4 +121,5 @@
<item>Szukaj w sieci</item>
<item>Usuń okładkę</item>
</string-array>
<string name="added_title_to_playing_queue">"Dodano 1 tytuł do kolejki odtwarzania"</string>
</resources>

View file

@ -50,7 +50,6 @@
<string name="no_results">Sem resultados</string>
<string name="action_re_download_artist_image">Atualizar imagem do artista</string>
<string name="updating">Atualizando...</string>
<string name="added_title_to_playing_queue">"1 título adicionado à lista de reprodução"</string>
<string name="action_delete_from_playlist">Excluir da playlist</string>
<string name="new_playlist_action">Nova playlist...</string>
<string name="action_grid_columns">Colunas da grade</string>
@ -120,4 +119,5 @@
<item>Pesquisar na Internet</item>
<item>Remover Arte do Album</item>
</string-array>
<string name="added_title_to_playing_queue">"1 título adicionado à lista de reprodução"</string>
</resources>

View file

@ -49,7 +49,6 @@
<string name="no_results">Nenhum resultado</string>
<string name="action_re_download_artist_image">Atualizar imagem do artista</string>
<string name="updating">Atualizando...</string>
<string name="added_title_to_playing_queue">"Adicionada uma música para a fila atual de músicas."</string>
<string name="action_delete_from_playlist">Apagar da playlist</string>
<string name="action_grid_columns">Colunas da grade</string>
<string name="action_grid_columns_land">Colunas da grade (Paisagem)</string>
@ -74,4 +73,5 @@
<string name="navigation_drawer_open">Abrir área de navegação</string>
<string name="navigation_drawer_close">"Fechar área de navegação"</string>
<string name="song">Música</string>
<string name="added_title_to_playing_queue">"Adicionada uma música para a fila atual de músicas."</string>
</resources>

View file

@ -49,7 +49,6 @@
<string name="no_results">Niciun rezultat</string>
<string name="action_re_download_artist_image">Actualizează imagine artist</string>
<string name="updating">Actualizare...</string>
<string name="added_title_to_playing_queue">"Adăugat 1 melodie la lista de redare."</string>
<string name="action_delete_from_playlist">Şterge din playlist</string>
<string name="new_playlist_action">Playlist nou...</string>
<string name="action_grid_columns">Rânduri pe grid</string>
@ -99,4 +98,5 @@
<string name="primary_color">Culoare Primară</string>
<string name="accent_color">Culoare de accent</string>
<string name="song">Melodie</string>
<string name="added_title_to_playing_queue">"Adăugat 1 melodie la lista de redare."</string>
</resources>

View file

@ -50,7 +50,6 @@
<string name="no_results">Нет результатов</string>
<string name="action_re_download_artist_image">Обновить изображение исполнителя</string>
<string name="updating">Обновление...</string>
<string name="added_title_to_playing_queue">"Добавлена 1 композиция в очередь воспроизведения"</string>
<string name="action_delete_from_playlist">Удалить из списка воспроизведения</string>
<string name="new_playlist_action">Новый список воспроизведения...</string>
<string name="action_grid_columns">Столбцы сетки</string>
@ -120,4 +119,5 @@
<item>Поиск в интернете</item>
<item>Удалить обложку</item>
</string-array>
<string name="added_title_to_playing_queue">"Добавлена 1 композиция в очередь воспроизведения"</string>
</resources>

View file

@ -50,7 +50,6 @@
<string name="no_results">Inga resultat</string>
<string name="action_re_download_artist_image">Uppdatera artistbild</string>
<string name="updating">Uppdaterar ...</string>
<string name="added_title_to_playing_queue">"Lagt till 1 titel till spellistan."</string>
<string name="action_delete_from_playlist">Radera från spellista</string>
<string name="new_playlist_action">Ny spellista ...</string>
<string name="created_playlist_x">Spellista %1$s skapad</string>
@ -115,4 +114,5 @@ Vill du radera <b>%1$d</b> låtar?
<item>Weksök</item>
<item>Ta bort omslag</item>
</string-array>
<string name="added_title_to_playing_queue">"Lagt till 1 titel till spellistan."</string>
</resources>

View file

@ -50,7 +50,6 @@
<string name="no_results">Sonuç bulunamadı</string>
<string name="action_re_download_artist_image">Sanatçı resmini güncelle</string>
<string name="updating">Güncelleniyor...</string>
<string name="added_title_to_playing_queue">"Çalma sırasına 1 başlık eklendi"</string>
<string name="action_delete_from_playlist">Çalma listesinden sil</string>
<string name="new_playlist_action">Yeni çalma listesi</string>
<string name="action_grid_columns">Izgara sütunları</string>
@ -120,4 +119,5 @@
<item>Web\'de ara</item>
<item>Albüm Kapağını Kaldır</item>
</string-array>
<string name="added_title_to_playing_queue">"Çalma sırasına 1 başlık eklendi"</string>
</resources>

View file

@ -50,7 +50,6 @@
<string name="no_results">没有找到结果</string>
<string name="action_re_download_artist_image">更新歌手图片</string>
<string name="updating">正在更新…</string>
<string name="added_title_to_playing_queue">"该曲目已加入播放队列"</string>
<string name="action_delete_from_playlist">从播放列表中删除</string>
<string name="new_playlist_action">新建播放列表</string>
<string name="action_grid_columns">专辑列数</string>
@ -120,4 +119,5 @@
<item>通过网络搜索</item>
<item>删除封面</item>
</string-array>
<string name="added_title_to_playing_queue">"该曲目已加入播放队列"</string>
</resources>

View file

@ -50,7 +50,6 @@
<string name="no_results">無搜尋結果</string>
<string name="action_re_download_artist_image">更新歌手圖片</string>
<string name="updating">更新中…</string>
<string name="added_title_to_playing_queue">"這歌曲已加入播放佇列"</string>
<string name="action_delete_from_playlist">從音樂清單移除</string>
<string name="new_playlist_action">新增音樂清單</string>
<string name="action_grid_columns">專輯網格列數</string>
@ -120,4 +119,5 @@
<item>網路搜尋</item>
<item>刪除封面</item>
</string-array>
<string name="added_title_to_playing_queue">"這歌曲已加入播放佇列"</string>
</resources>

View file

@ -53,7 +53,8 @@
<string name="no_results">No results</string>
<string name="action_re_download_artist_image">Update artist image</string>
<string name="updating">Updating…</string>
<string name="added_title_to_playing_queue">Added 1 title to the playing queue.</string>
<string name="added_title_to_playing_queue">"Added 1 title to the playing queue."</string>
<string name="added_x_titles_to_playing_queue">Added %1$d titles to the playing queue.</string>
<string name="title_activity_playlist_detail">Playlist Activity</string>
<string name="action_delete_from_playlist">Delete from playlist</string>
<string name="new_playlist_action">New playlist…</string>

View file

@ -43,7 +43,7 @@
<style name="Toolbar">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">?attr/actionBarSize</item>
<item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
<item name="android:theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
<item name="android:minHeight">@dimen/abc_action_bar_default_height_material</item>
<item name="popupTheme">?toolbarPopupTheme</item>
<item name="android:elevation" tools:ignore="NewApi">@dimen/toolbar_elevation</item>