Main Activity Fragments should be updated automatically now when the Media Store has changed.
This commit is contained in:
parent
e0a6535f9f
commit
9c8cba612b
59 changed files with 428 additions and 352 deletions
|
|
@ -29,8 +29,6 @@ public class PagerAdapter extends FragmentPagerAdapter {
|
||||||
@NonNull
|
@NonNull
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
|
|
||||||
private int mCurrentPage;
|
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private final String[] titles;
|
private final String[] titles;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
||||||
import com.kabouzeid.gramophone.model.Playlist;
|
import com.kabouzeid.gramophone.model.Playlist;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
|
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
|
|
@ -60,6 +60,15 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
||||||
setHasStableIds(true);
|
setHasStableIds(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ArrayList<Playlist> getDataSet() {
|
||||||
|
return dataSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void swapDataSet(ArrayList<Playlist> dataSet) {
|
||||||
|
this.dataSet = dataSet;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getItemId(int position) {
|
public long getItemId(int position) {
|
||||||
return dataSet.get(position).id;
|
return dataSet.get(position).id;
|
||||||
|
|
@ -208,8 +217,8 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
||||||
toggleChecked(getAdapterPosition());
|
toggleChecked(getAdapterPosition());
|
||||||
} else {
|
} else {
|
||||||
Pair[] sharedViews = null;
|
Pair[] sharedViews = null;
|
||||||
if (activity instanceof AbsFabActivity)
|
if (activity instanceof AbsSlidingMusicPanelActivity)
|
||||||
sharedViews = ((AbsFabActivity) activity).getSharedViewsWithFab(null);
|
sharedViews = ((AbsSlidingMusicPanelActivity) activity).getSharedViewsWithPlayPauseFab(null);
|
||||||
Playlist playlist = dataSet.get(getAdapterPosition());
|
Playlist playlist = dataSet.get(getAdapterPosition());
|
||||||
NavigationUtil.goToPlaylist(activity, playlist, sharedViews);
|
NavigationUtil.goToPlaylist(activity, playlist, sharedViews);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||||
import com.kabouzeid.gramophone.loader.AlbumSongLoader;
|
import com.kabouzeid.gramophone.loader.AlbumSongLoader;
|
||||||
import com.kabouzeid.gramophone.model.Album;
|
import com.kabouzeid.gramophone.model.Album;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
|
|
@ -62,6 +62,15 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
||||||
setHasStableIds(true);
|
setHasStableIds(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Album> getDataSet() {
|
||||||
|
return dataSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void swapDataSet(List<Album> dataSet) {
|
||||||
|
this.dataSet = dataSet;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
|
|
@ -205,8 +214,8 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
||||||
Pair.create(image,
|
Pair.create(image,
|
||||||
activity.getResources().getString(R.string.transition_album_art)
|
activity.getResources().getString(R.string.transition_album_art)
|
||||||
)};
|
)};
|
||||||
if (activity instanceof AbsFabActivity)
|
if (activity instanceof AbsSlidingMusicPanelActivity)
|
||||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
albumPairs = ((AbsSlidingMusicPanelActivity) activity).getSharedViewsWithPlayPauseFab(albumPairs);
|
||||||
NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).id, albumPairs);
|
NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).id, albumPairs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ import com.kabouzeid.gramophone.lastfm.rest.model.artistinfo.Image;
|
||||||
import com.kabouzeid.gramophone.loader.ArtistSongLoader;
|
import com.kabouzeid.gramophone.loader.ArtistSongLoader;
|
||||||
import com.kabouzeid.gramophone.model.Artist;
|
import com.kabouzeid.gramophone.model.Artist;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||||
|
|
@ -54,6 +54,15 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
||||||
setHasStableIds(true);
|
setHasStableIds(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ArrayList<Artist> getDataSet() {
|
||||||
|
return dataSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void swapDataSet(ArrayList<Artist> dataSet) {
|
||||||
|
this.dataSet = dataSet;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getItemId(int position) {
|
public long getItemId(int position) {
|
||||||
return dataSet.get(position).id;
|
return dataSet.get(position).id;
|
||||||
|
|
@ -170,8 +179,8 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
||||||
Pair.create(image,
|
Pair.create(image,
|
||||||
activity.getResources().getString(R.string.transition_artist_image)
|
activity.getResources().getString(R.string.transition_artist_image)
|
||||||
)};
|
)};
|
||||||
if (activity instanceof AbsFabActivity)
|
if (activity instanceof AbsSlidingMusicPanelActivity)
|
||||||
artistPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(artistPairs);
|
artistPairs = ((AbsSlidingMusicPanelActivity) activity).getSharedViewsWithPlayPauseFab(artistPairs);
|
||||||
NavigationUtil.goToArtist(activity, dataSet.get(getAdapterPosition()).id, artistPairs);
|
NavigationUtil.goToArtist(activity, dataSet.get(getAdapterPosition()).id, artistPairs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
||||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||||
|
|
@ -98,8 +98,8 @@ public class ArtistSongAdapter extends ArrayAdapter<Song> implements MaterialCab
|
||||||
Pair[] albumPairs = new Pair[]{
|
Pair[] albumPairs = new Pair[]{
|
||||||
Pair.create(albumArt, activity.getResources().getString(R.string.transition_album_art))
|
Pair.create(albumArt, activity.getResources().getString(R.string.transition_album_art))
|
||||||
};
|
};
|
||||||
if (activity instanceof AbsFabActivity)
|
if (activity instanceof AbsSlidingMusicPanelActivity)
|
||||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
albumPairs = ((AbsSlidingMusicPanelActivity) activity).getSharedViewsWithPlayPauseFab(albumPairs);
|
||||||
NavigationUtil.goToAlbum(activity, song.albumId, albumPairs);
|
NavigationUtil.goToAlbum(activity, song.albumId, albumPairs);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import android.view.View;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
@ -54,8 +54,8 @@ public class SmartPlaylistSongAdapter extends SongAdapter {
|
||||||
Pair[] albumPairs = new Pair[]{
|
Pair[] albumPairs = new Pair[]{
|
||||||
Pair.create(image, activity.getString(R.string.transition_album_art))
|
Pair.create(image, activity.getString(R.string.transition_album_art))
|
||||||
};
|
};
|
||||||
if (activity instanceof AbsFabActivity)
|
if (activity instanceof AbsSlidingMusicPanelActivity)
|
||||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
albumPairs = ((AbsSlidingMusicPanelActivity) activity).getSharedViewsWithPlayPauseFab(albumPairs);
|
||||||
NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).albumId, albumPairs);
|
NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).albumId, albumPairs);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
||||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||||
|
|
@ -50,6 +50,11 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
|
||||||
setHasStableIds(true);
|
setHasStableIds(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void swapDataSet(ArrayList<Song> dataSet) {
|
||||||
|
this.dataSet = dataSet;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
public ArrayList<Song> getDataSet() {
|
public ArrayList<Song> getDataSet() {
|
||||||
return dataSet;
|
return dataSet;
|
||||||
}
|
}
|
||||||
|
|
@ -176,8 +181,8 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
|
||||||
Pair[] albumPairs = new Pair[]{
|
Pair[] albumPairs = new Pair[]{
|
||||||
Pair.create(image, activity.getResources().getString(R.string.transition_album_art))
|
Pair.create(image, activity.getResources().getString(R.string.transition_album_art))
|
||||||
};
|
};
|
||||||
if (activity instanceof AbsFabActivity)
|
if (activity instanceof AbsSlidingMusicPanelActivity)
|
||||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
albumPairs = ((AbsSlidingMusicPanelActivity) activity).getSharedViewsWithPlayPauseFab(albumPairs);
|
||||||
NavigationUtil.goToAlbum(activity, getSong().albumId, albumPairs);
|
NavigationUtil.goToAlbum(activity, getSong().albumId, albumPairs);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -101,10 +101,6 @@ public class MusicPlayerRemote {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isServiceConnected() {
|
|
||||||
return musicService != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void playSongAt(final int position) {
|
public static void playSongAt(final int position) {
|
||||||
if (musicService != null) {
|
if (musicService != null) {
|
||||||
musicService.playSongAt(position);
|
musicService.playSongAt(position);
|
||||||
|
|
@ -231,11 +227,7 @@ public class MusicPlayerRemote {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean shuffleAllSongs(@NonNull final Context context, boolean startPlaying) {
|
public static boolean openAndShuffleQueue(@NonNull final ArrayList<Song> songs, boolean startPlaying) {
|
||||||
return openAndShuffleQueue(context, SongLoader.getAllSongs(context), startPlaying);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean openAndShuffleQueue(final Context context, @NonNull final ArrayList<Song> songs, boolean startPlaying) {
|
|
||||||
if (musicService != null) {
|
if (musicService != null) {
|
||||||
if (!songs.isEmpty()) {
|
if (!songs.isEmpty()) {
|
||||||
MusicPlayerRemote.openQueue(songs, new Random().nextInt(songs.size()), startPlaying);
|
MusicPlayerRemote.openQueue(songs, new Random().nextInt(songs.size()), startPlaying);
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ import com.kabouzeid.gramophone.dialogs.SongDetailDialog;
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.interfaces.PaletteColorHolder;
|
import com.kabouzeid.gramophone.interfaces.PaletteColorHolder;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity;
|
import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity;
|
||||||
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
|
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
|
|
@ -62,14 +62,14 @@ public class SongMenuHelper {
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_go_to_album:
|
case R.id.action_go_to_album:
|
||||||
Pair[] albumPairs = null;
|
Pair[] albumPairs = null;
|
||||||
if (activity instanceof AbsFabActivity)
|
if (activity instanceof AbsSlidingMusicPanelActivity)
|
||||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(null);
|
albumPairs = ((AbsSlidingMusicPanelActivity) activity).getSharedViewsWithPlayPauseFab(null);
|
||||||
NavigationUtil.goToAlbum(activity, song.albumId, albumPairs);
|
NavigationUtil.goToAlbum(activity, song.albumId, albumPairs);
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_go_to_artist:
|
case R.id.action_go_to_artist:
|
||||||
Pair[] artistPairs = null;
|
Pair[] artistPairs = null;
|
||||||
if (activity instanceof AbsFabActivity)
|
if (activity instanceof AbsSlidingMusicPanelActivity)
|
||||||
artistPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(null);
|
artistPairs = ((AbsSlidingMusicPanelActivity) activity).getSharedViewsWithPlayPauseFab(null);
|
||||||
NavigationUtil.goToArtist(activity, song.artistId, artistPairs);
|
NavigationUtil.goToArtist(activity, song.artistId, artistPairs);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.kabouzeid.gramophone.interfaces;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
|
*/
|
||||||
|
public interface MusicStateListener {
|
||||||
|
void onPlayingMetaChanged();
|
||||||
|
|
||||||
|
|
||||||
|
void onPlayStateChanged();
|
||||||
|
|
||||||
|
|
||||||
|
void onMediaStoreChanged();
|
||||||
|
}
|
||||||
|
|
@ -919,7 +919,8 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
// actually call refresh when the delayed callback fires
|
// actually call refresh when the delayed callback fires
|
||||||
notifyChange(MEDIA_STORE_CHANGED);
|
// do not send a sticky broadcast here
|
||||||
|
sendBroadcast(new Intent(MEDIA_STORE_CHANGED));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ import com.kabouzeid.gramophone.loader.AlbumSongLoader;
|
||||||
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
|
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
|
||||||
import com.kabouzeid.gramophone.misc.SmallTransitionListener;
|
import com.kabouzeid.gramophone.misc.SmallTransitionListener;
|
||||||
import com.kabouzeid.gramophone.model.Album;
|
import com.kabouzeid.gramophone.model.Album;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity;
|
import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity;
|
||||||
import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity;
|
import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||||
|
|
@ -58,7 +58,7 @@ import butterknife.InjectView;
|
||||||
* <p/>
|
* <p/>
|
||||||
* Should be kinda stable ONLY AS IT IS!!!
|
* Should be kinda stable ONLY AS IT IS!!!
|
||||||
*/
|
*/
|
||||||
public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorHolder, CabHolder {
|
public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements PaletteColorHolder, CabHolder {
|
||||||
|
|
||||||
public static final String TAG = AlbumDetailActivity.class.getSimpleName();
|
public static final String TAG = AlbumDetailActivity.class.getSimpleName();
|
||||||
private static final int TAG_EDITOR_REQUEST = 2001;
|
private static final int TAG_EDITOR_REQUEST = 2001;
|
||||||
|
|
@ -334,7 +334,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH
|
||||||
NavigationUtil.openEqualizer(this);
|
NavigationUtil.openEqualizer(this);
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_shuffle_album:
|
case R.id.action_shuffle_album:
|
||||||
MusicPlayerRemote.openAndShuffleQueue(this, adapter.getDataSet(), true);
|
MusicPlayerRemote.openAndShuffleQueue(adapter.getDataSet(), true);
|
||||||
return true;
|
return true;
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
|
|
@ -343,7 +343,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH
|
||||||
NavigationUtil.openPlayingQueueDialog(this);
|
NavigationUtil.openPlayingQueueDialog(this);
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_now_playing:
|
case R.id.action_now_playing:
|
||||||
NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithFab(null));
|
NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithPlayPauseFab(null));
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_tag_editor:
|
case R.id.action_tag_editor:
|
||||||
Intent intent = new Intent(this, AlbumTagEditorActivity.class);
|
Intent intent = new Intent(this, AlbumTagEditorActivity.class);
|
||||||
|
|
@ -351,7 +351,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH
|
||||||
startActivityForResult(intent, TAG_EDITOR_REQUEST);
|
startActivityForResult(intent, TAG_EDITOR_REQUEST);
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_go_to_artist:
|
case R.id.action_go_to_artist:
|
||||||
Pair[] artistPairs = getSharedViewsWithFab(null);
|
Pair[] artistPairs = getSharedViewsWithPlayPauseFab(null);
|
||||||
NavigationUtil.goToArtist(this, album.artistId, artistPairs);
|
NavigationUtil.goToArtist(this, album.artistId, artistPairs);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ import com.kabouzeid.gramophone.loader.ArtistSongLoader;
|
||||||
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
|
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
|
||||||
import com.kabouzeid.gramophone.misc.SmallTransitionListener;
|
import com.kabouzeid.gramophone.misc.SmallTransitionListener;
|
||||||
import com.kabouzeid.gramophone.model.Artist;
|
import com.kabouzeid.gramophone.model.Artist;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
|
|
@ -75,7 +75,7 @@ import retrofit.client.Response;
|
||||||
* <p/>
|
* <p/>
|
||||||
* Should be kinda stable ONLY AS IT IS!!!
|
* Should be kinda stable ONLY AS IT IS!!!
|
||||||
*/
|
*/
|
||||||
public class ArtistDetailActivity extends AbsFabActivity implements PaletteColorHolder, CabHolder {
|
public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implements PaletteColorHolder, CabHolder {
|
||||||
|
|
||||||
public static final String TAG = ArtistDetailActivity.class.getSimpleName();
|
public static final String TAG = ArtistDetailActivity.class.getSimpleName();
|
||||||
|
|
||||||
|
|
@ -449,7 +449,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
|
||||||
NavigationUtil.openEqualizer(this);
|
NavigationUtil.openEqualizer(this);
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_shuffle_artist:
|
case R.id.action_shuffle_artist:
|
||||||
MusicPlayerRemote.openAndShuffleQueue(this, songAdapter.getDataSet(), true);
|
MusicPlayerRemote.openAndShuffleQueue(songAdapter.getDataSet(), true);
|
||||||
return true;
|
return true;
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
|
|
@ -469,7 +469,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
|
||||||
setUpArtistImageAndApplyPalette(true);
|
setUpArtistImageAndApplyPalette(true);
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_now_playing:
|
case R.id.action_now_playing:
|
||||||
NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithFab(null));
|
NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithPlayPauseFab(null));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.kabouzeid.gramophone.ui.activities;
|
package com.kabouzeid.gramophone.ui.activities;
|
||||||
|
|
||||||
|
import android.content.ComponentName;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
|
|
@ -7,6 +8,7 @@ import android.graphics.Color;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
import android.os.IBinder;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
|
@ -46,8 +48,9 @@ import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
|
||||||
import com.kabouzeid.gramophone.loader.AlbumSongLoader;
|
import com.kabouzeid.gramophone.loader.AlbumSongLoader;
|
||||||
import com.kabouzeid.gramophone.loader.ArtistSongLoader;
|
import com.kabouzeid.gramophone.loader.ArtistSongLoader;
|
||||||
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
||||||
|
import com.kabouzeid.gramophone.loader.SongLoader;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment;
|
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AlbumViewFragment;
|
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AlbumViewFragment;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
|
|
@ -66,7 +69,7 @@ import java.util.ArrayList;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import butterknife.InjectView;
|
import butterknife.InjectView;
|
||||||
|
|
||||||
public class MainActivity extends AbsFabActivity
|
public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
implements KabViewsDisableAble, CabHolder {
|
implements KabViewsDisableAble, CabHolder {
|
||||||
|
|
||||||
public static final String TAG = MainActivity.class.getSimpleName();
|
public static final String TAG = MainActivity.class.getSimpleName();
|
||||||
|
|
@ -86,7 +89,6 @@ public class MainActivity extends AbsFabActivity
|
||||||
|
|
||||||
private ActionBarDrawerToggle drawerToggle;
|
private ActionBarDrawerToggle drawerToggle;
|
||||||
private PagerAdapter pagerAdapter;
|
private PagerAdapter pagerAdapter;
|
||||||
private int currentPage = -1;
|
|
||||||
private MaterialCab cab;
|
private MaterialCab cab;
|
||||||
@Nullable
|
@Nullable
|
||||||
private View navigationDrawerHeader;
|
private View navigationDrawerHeader;
|
||||||
|
|
@ -117,7 +119,6 @@ public class MainActivity extends AbsFabActivity
|
||||||
|
|
||||||
int startPosition = PreferenceUtil.getInstance(this).getDefaultStartPage();
|
int startPosition = PreferenceUtil.getInstance(this).getDefaultStartPage();
|
||||||
startPosition = startPosition == -1 ? PreferenceUtil.getInstance(this).getLastStartPage() : startPosition;
|
startPosition = startPosition == -1 ? PreferenceUtil.getInstance(this).getLastStartPage() : startPosition;
|
||||||
currentPage = startPosition;
|
|
||||||
|
|
||||||
navigationView.getMenu().getItem(startPosition).setChecked(true);
|
navigationView.getMenu().getItem(startPosition).setChecked(true);
|
||||||
|
|
||||||
|
|
@ -133,7 +134,6 @@ public class MainActivity extends AbsFabActivity
|
||||||
@Override
|
@Override
|
||||||
public void onPageSelected(int position) {
|
public void onPageSelected(int position) {
|
||||||
navigationView.getMenu().getItem(position).setChecked(true);
|
navigationView.getMenu().getItem(position).setChecked(true);
|
||||||
currentPage = position;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -271,7 +271,7 @@ public class MainActivity extends AbsFabActivity
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
NavigationUtil.openCurrentPlayingIfPossible(MainActivity.this, getSharedViewsWithFab(new Pair[]{
|
NavigationUtil.openCurrentPlayingIfPossible(MainActivity.this, getSharedViewsWithPlayPauseFab(new Pair[]{
|
||||||
Pair.create(navigationDrawerHeader.findViewById(R.id.image),
|
Pair.create(navigationDrawerHeader.findViewById(R.id.image),
|
||||||
getResources().getString(R.string.transition_album_art)
|
getResources().getString(R.string.transition_album_art)
|
||||||
)
|
)
|
||||||
|
|
@ -303,9 +303,8 @@ public class MainActivity extends AbsFabActivity
|
||||||
try {
|
try {
|
||||||
super.enableViews();
|
super.enableViews();
|
||||||
toolbar.setEnabled(true);
|
toolbar.setEnabled(true);
|
||||||
((AbsMainActivityFragment) pagerAdapter.getItem(pager.getCurrentItem())).enableViews();
|
((AbsMainActivityFragment) pagerAdapter.getFragment(pager.getCurrentItem())).enableViews();
|
||||||
} catch (NullPointerException e) {
|
} catch (NullPointerException ignored) {
|
||||||
//Log.e(TAG, "wasn't able to enable the views", e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -313,9 +312,8 @@ public class MainActivity extends AbsFabActivity
|
||||||
public void disableViews() {
|
public void disableViews() {
|
||||||
try {
|
try {
|
||||||
super.disableViews();
|
super.disableViews();
|
||||||
((AbsMainActivityFragment) pagerAdapter.getItem(pager.getCurrentItem())).disableViews();
|
((AbsMainActivityFragment) pagerAdapter.getFragment(pager.getCurrentItem())).disableViews();
|
||||||
} catch (NullPointerException e) {
|
} catch (NullPointerException ignored) {
|
||||||
//Log.e(TAG, "wasn't able to disable the views", e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -326,9 +324,8 @@ public class MainActivity extends AbsFabActivity
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onServiceConnected() {
|
public void onServiceConnected(ComponentName name, IBinder service) {
|
||||||
super.onServiceConnected();
|
super.onServiceConnected(name, service);
|
||||||
updateNavigationDrawerHeader();
|
|
||||||
handlePlaybackIntent(getIntent());
|
handlePlaybackIntent(getIntent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -371,7 +368,7 @@ public class MainActivity extends AbsFabActivity
|
||||||
NavigationUtil.openEqualizer(this);
|
NavigationUtil.openEqualizer(this);
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_shuffle_all:
|
case R.id.action_shuffle_all:
|
||||||
MusicPlayerRemote.shuffleAllSongs(this, true);
|
MusicPlayerRemote.openAndShuffleQueue(SongLoader.getAllSongs(this), true);
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_new_playlist:
|
case R.id.action_new_playlist:
|
||||||
CreatePlaylistDialog.create().show(getSupportFragmentManager(), "CREATE_PLAYLIST");
|
CreatePlaylistDialog.create().show(getSupportFragmentManager(), "CREATE_PLAYLIST");
|
||||||
|
|
@ -380,7 +377,7 @@ public class MainActivity extends AbsFabActivity
|
||||||
startActivity(new Intent(MainActivity.this, SearchActivity.class));
|
startActivity(new Intent(MainActivity.this, SearchActivity.class));
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_now_playing:
|
case R.id.action_now_playing:
|
||||||
NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithFab(null));
|
NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithPlayPauseFab(null));
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_playing_queue:
|
case R.id.action_playing_queue:
|
||||||
NavigationUtil.openPlayingQueueDialog(this);
|
NavigationUtil.openPlayingQueueDialog(this);
|
||||||
|
|
@ -405,7 +402,7 @@ public class MainActivity extends AbsFabActivity
|
||||||
@Override
|
@Override
|
||||||
protected void onPause() {
|
protected void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
PreferenceUtil.getInstance(MainActivity.this).setLastStartPage(currentPage);
|
PreferenceUtil.getInstance(MainActivity.this).setLastStartPage(pager.getCurrentItem());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handlePlaybackIntent(@Nullable Intent intent) {
|
private void handlePlaybackIntent(@Nullable Intent intent) {
|
||||||
|
|
|
||||||
|
|
@ -43,10 +43,11 @@ import com.kabouzeid.gramophone.dialogs.SongDetailDialog;
|
||||||
import com.kabouzeid.gramophone.dialogs.SongShareDialog;
|
import com.kabouzeid.gramophone.dialogs.SongShareDialog;
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.imageloader.BlurProcessor;
|
import com.kabouzeid.gramophone.imageloader.BlurProcessor;
|
||||||
|
import com.kabouzeid.gramophone.loader.SongLoader;
|
||||||
import com.kabouzeid.gramophone.misc.SmallTransitionListener;
|
import com.kabouzeid.gramophone.misc.SmallTransitionListener;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.service.MusicService;
|
import com.kabouzeid.gramophone.service.MusicService;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity;
|
import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity;
|
||||||
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
|
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||||
|
|
@ -68,7 +69,7 @@ import butterknife.ButterKnife;
|
||||||
import butterknife.InjectView;
|
import butterknife.InjectView;
|
||||||
import hugo.weaving.DebugLog;
|
import hugo.weaving.DebugLog;
|
||||||
|
|
||||||
public class MusicControllerActivity extends AbsFabActivity {
|
public class MusicControllerActivity extends AbsSlidingMusicPanelActivity {
|
||||||
|
|
||||||
public static final String TAG = MusicControllerActivity.class.getSimpleName();
|
public static final String TAG = MusicControllerActivity.class.getSimpleName();
|
||||||
private static final int FAB_CIRCULAR_REVEAL_ANIMATION_TIME = 1000;
|
private static final int FAB_CIRCULAR_REVEAL_ANIMATION_TIME = 1000;
|
||||||
|
|
@ -193,11 +194,11 @@ public class MusicControllerActivity extends AbsFabActivity {
|
||||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||||
@Override
|
@Override
|
||||||
public void onTransitionEnd(Transition transition) {
|
public void onTransitionEnd(Transition transition) {
|
||||||
int cx = (getFab().getLeft() + getFab().getRight()) / 2;
|
int cx = (getPlayPauseFab().getLeft() + getPlayPauseFab().getRight()) / 2;
|
||||||
int cy = (getFab().getTop() + getFab().getBottom()) / 2;
|
int cy = (getPlayPauseFab().getTop() + getPlayPauseFab().getBottom()) / 2;
|
||||||
int finalRadius = Math.max(mediaControllerContainer.getWidth(), mediaControllerContainer.getHeight());
|
int finalRadius = Math.max(mediaControllerContainer.getWidth(), mediaControllerContainer.getHeight());
|
||||||
|
|
||||||
Animator animator = ViewAnimationUtils.createCircularReveal(mediaControllerContainer, cx, cy, getFab().getWidth() / 2, finalRadius);
|
Animator animator = ViewAnimationUtils.createCircularReveal(mediaControllerContainer, cx, cy, getPlayPauseFab().getWidth() / 2, finalRadius);
|
||||||
animator.setInterpolator(new DecelerateInterpolator());
|
animator.setInterpolator(new DecelerateInterpolator());
|
||||||
animator.setDuration(FAB_CIRCULAR_REVEAL_ANIMATION_TIME);
|
animator.setDuration(FAB_CIRCULAR_REVEAL_ANIMATION_TIME);
|
||||||
animator.start();
|
animator.start();
|
||||||
|
|
@ -225,11 +226,13 @@ public class MusicControllerActivity extends AbsFabActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startUpdatingProgressViews() {
|
private void startUpdatingProgressViews() {
|
||||||
|
startHandler();
|
||||||
progressViewsUpdateHandler.sendEmptyMessage(CMD_UPDATE_PROGRESS_VIEWS);
|
progressViewsUpdateHandler.sendEmptyMessage(CMD_UPDATE_PROGRESS_VIEWS);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void stopUpdatingProgressViews() {
|
private void stopUpdatingProgressViews() {
|
||||||
progressViewsUpdateHandler.removeMessages(CMD_UPDATE_PROGRESS_VIEWS);
|
progressViewsUpdateHandler.removeMessages(CMD_UPDATE_PROGRESS_VIEWS);
|
||||||
|
stopHandler();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initAppearanceVarsFromSharedPrefs() {
|
private void initAppearanceVarsFromSharedPrefs() {
|
||||||
|
|
@ -244,7 +247,7 @@ public class MusicControllerActivity extends AbsFabActivity {
|
||||||
@Override
|
@Override
|
||||||
protected void onPostCreate(Bundle savedInstanceState) {
|
protected void onPostCreate(Bundle savedInstanceState) {
|
||||||
super.onPostCreate(savedInstanceState);
|
super.onPostCreate(savedInstanceState);
|
||||||
getFab().setOnLongClickListener(null);
|
getPlayPauseFab().setOnLongClickListener(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -384,9 +387,6 @@ public class MusicControllerActivity extends AbsFabActivity {
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
updateControllerState();
|
|
||||||
updateCurrentSong();
|
|
||||||
startHandler();
|
|
||||||
startUpdatingProgressViews();
|
startUpdatingProgressViews();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -394,7 +394,6 @@ public class MusicControllerActivity extends AbsFabActivity {
|
||||||
protected void onPause() {
|
protected void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
stopUpdatingProgressViews();
|
stopUpdatingProgressViews();
|
||||||
stopHandler();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateCurrentSong() {
|
private void updateCurrentSong() {
|
||||||
|
|
@ -536,12 +535,6 @@ public class MusicControllerActivity extends AbsFabActivity {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateControllerState() {
|
|
||||||
updateFabState();
|
|
||||||
updateRepeatState();
|
|
||||||
updateShuffleState();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void animateSetFavorite() {
|
private void animateSetFavorite() {
|
||||||
favoriteIcon.clearAnimation();
|
favoriteIcon.clearAnimation();
|
||||||
|
|
||||||
|
|
@ -641,7 +634,7 @@ public class MusicControllerActivity extends AbsFabActivity {
|
||||||
NavigationUtil.openEqualizer(this);
|
NavigationUtil.openEqualizer(this);
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_shuffle_all:
|
case R.id.action_shuffle_all:
|
||||||
MusicPlayerRemote.shuffleAllSongs(this, true);
|
MusicPlayerRemote.openAndShuffleQueue(SongLoader.getAllSongs(this), true);
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_add_to_playlist:
|
case R.id.action_add_to_playlist:
|
||||||
AddToPlaylistDialog.create(song).show(getSupportFragmentManager(), "ADD_PLAYLIST");
|
AddToPlaylistDialog.create(song).show(getSupportFragmentManager(), "ADD_PLAYLIST");
|
||||||
|
|
@ -662,10 +655,10 @@ public class MusicControllerActivity extends AbsFabActivity {
|
||||||
SongDetailDialog.create(songFile).show(getSupportFragmentManager(), "SONG_DETAIL");
|
SongDetailDialog.create(songFile).show(getSupportFragmentManager(), "SONG_DETAIL");
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_go_to_album:
|
case R.id.action_go_to_album:
|
||||||
NavigationUtil.goToAlbum(this, song.albumId, getSharedViewsWithFab(null));
|
NavigationUtil.goToAlbum(this, song.albumId, getSharedViewsWithPlayPauseFab(null));
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_go_to_artist:
|
case R.id.action_go_to_artist:
|
||||||
NavigationUtil.goToArtist(this, song.artistId, getSharedViewsWithFab(null));
|
NavigationUtil.goToArtist(this, song.artistId, getSharedViewsWithPlayPauseFab(null));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ import com.kabouzeid.gramophone.misc.DragSortRecycler;
|
||||||
import com.kabouzeid.gramophone.model.Playlist;
|
import com.kabouzeid.gramophone.model.Playlist;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
|
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
|
|
@ -31,7 +31,7 @@ import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import butterknife.InjectView;
|
import butterknife.InjectView;
|
||||||
|
|
||||||
public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder {
|
public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity implements CabHolder {
|
||||||
|
|
||||||
public static final String TAG = PlaylistDetailActivity.class.getSimpleName();
|
public static final String TAG = PlaylistDetailActivity.class.getSimpleName();
|
||||||
|
|
||||||
|
|
@ -132,7 +132,7 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder
|
||||||
new SleepTimerDialog().show(getSupportFragmentManager(), "SET_SLEEP_TIMER");
|
new SleepTimerDialog().show(getSupportFragmentManager(), "SET_SLEEP_TIMER");
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_shuffle_playlist:
|
case R.id.action_shuffle_playlist:
|
||||||
MusicPlayerRemote.openAndShuffleQueue(this, adapter.getDataSet(), true);
|
MusicPlayerRemote.openAndShuffleQueue(adapter.getDataSet(), true);
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_equalizer:
|
case R.id.action_equalizer:
|
||||||
NavigationUtil.openEqualizer(this);
|
NavigationUtil.openEqualizer(this);
|
||||||
|
|
@ -141,7 +141,7 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder
|
||||||
onBackPressed();
|
onBackPressed();
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_now_playing:
|
case R.id.action_now_playing:
|
||||||
NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithFab(null));
|
NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithPlayPauseFab(null));
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_playing_queue:
|
case R.id.action_playing_queue:
|
||||||
NavigationUtil.openPlayingQueueDialog(this);
|
NavigationUtil.openPlayingQueueDialog(this);
|
||||||
|
|
|
||||||
|
|
@ -24,11 +24,21 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie
|
||||||
enableViews();
|
enableViews();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should be overwritten and re enable all {@link android.view.View} to ensure they are accessible again
|
||||||
|
* <p>
|
||||||
|
* This is necessary because of a bug with the shared element transition
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void enableViews() {
|
public void enableViews() {
|
||||||
areViewsEnabled = true;
|
areViewsEnabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should be overwritten and disable all views that start a new activity on click to prevent opening an activity multiple times
|
||||||
|
* <p>
|
||||||
|
* This is necessary because of a bug with the shared element transition
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void disableViews() {
|
public void disableViews() {
|
||||||
areViewsEnabled = false;
|
areViewsEnabled = false;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,145 @@
|
||||||
|
package com.kabouzeid.gramophone.ui.activities.base;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.ComponentName;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
|
import android.content.ServiceConnection;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.IBinder;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
|
||||||
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
|
import com.kabouzeid.gramophone.interfaces.MusicStateListener;
|
||||||
|
import com.kabouzeid.gramophone.service.MusicService;
|
||||||
|
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
|
*/
|
||||||
|
public abstract class AbsMusicStateActivity extends AbsBaseActivity implements ServiceConnection, MusicStateListener {
|
||||||
|
public static final String TAG = AbsMusicStateActivity.class.getSimpleName();
|
||||||
|
|
||||||
|
private final ArrayList<MusicStateListener> mMusicStateListener = new ArrayList<>();
|
||||||
|
|
||||||
|
private MusicPlayerRemote.ServiceToken serviceToken;
|
||||||
|
private MusicStateReceiver musicStateReceiver;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
serviceToken = MusicPlayerRemote.bindToService(this, this);
|
||||||
|
musicStateReceiver = new MusicStateReceiver(this);
|
||||||
|
|
||||||
|
final IntentFilter filter = new IntentFilter();
|
||||||
|
filter.addAction(MusicService.PLAY_STATE_CHANGED);
|
||||||
|
filter.addAction(MusicService.SHUFFLE_MODE_CHANGED);
|
||||||
|
filter.addAction(MusicService.REPEAT_MODE_CHANGED);
|
||||||
|
filter.addAction(MusicService.META_CHANGED);
|
||||||
|
filter.addAction(MusicService.MEDIA_STORE_CHANGED);
|
||||||
|
|
||||||
|
registerReceiver(musicStateReceiver, filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceConnected(ComponentName name, IBinder service) {
|
||||||
|
onPlayStateChanged();
|
||||||
|
onPlayingMetaChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceDisconnected(ComponentName name) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
MusicPlayerRemote.unbindFromService(serviceToken);
|
||||||
|
unregisterReceiver(musicStateReceiver);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addMusicStateListenerListener(final MusicStateListener listener) {
|
||||||
|
if (listener != null) {
|
||||||
|
mMusicStateListener.add(listener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeMusicStateListenerListener(final MusicStateListener listener) {
|
||||||
|
if (listener != null) {
|
||||||
|
mMusicStateListener.remove(listener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPlayingMetaChanged() {
|
||||||
|
for (MusicStateListener listener : mMusicStateListener) {
|
||||||
|
if (listener != null) {
|
||||||
|
listener.onPlayingMetaChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPlayStateChanged() {
|
||||||
|
for (MusicStateListener listener : mMusicStateListener) {
|
||||||
|
if (listener != null) {
|
||||||
|
listener.onPlayStateChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMediaStoreChanged() {
|
||||||
|
for (MusicStateListener listener : mMusicStateListener) {
|
||||||
|
if (listener != null) {
|
||||||
|
listener.onMediaStoreChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onRepeatModeChanged() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onShuffleModeChanged() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final class MusicStateReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
|
private final WeakReference<AbsMusicStateActivity> reference;
|
||||||
|
|
||||||
|
public MusicStateReceiver(final AbsMusicStateActivity activity) {
|
||||||
|
reference = new WeakReference<>(activity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReceive(final Context context, @NonNull final Intent intent) {
|
||||||
|
final String action = intent.getAction();
|
||||||
|
AbsMusicStateActivity activity = reference.get();
|
||||||
|
if (activity != null) {
|
||||||
|
switch (action) {
|
||||||
|
case MusicService.META_CHANGED:
|
||||||
|
activity.onPlayingMetaChanged();
|
||||||
|
break;
|
||||||
|
case MusicService.PLAY_STATE_CHANGED:
|
||||||
|
activity.onPlayStateChanged();
|
||||||
|
break;
|
||||||
|
case MusicService.REPEAT_MODE_CHANGED:
|
||||||
|
activity.onRepeatModeChanged();
|
||||||
|
break;
|
||||||
|
case MusicService.SHUFFLE_MODE_CHANGED:
|
||||||
|
activity.onShuffleModeChanged();
|
||||||
|
break;
|
||||||
|
case MusicService.MEDIA_STORE_CHANGED:
|
||||||
|
activity.onMediaStoreChanged();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,120 +0,0 @@
|
||||||
package com.kabouzeid.gramophone.ui.activities.base;
|
|
||||||
|
|
||||||
import android.content.BroadcastReceiver;
|
|
||||||
import android.content.ComponentName;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.content.ServiceConnection;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.IBinder;
|
|
||||||
import android.support.annotation.NonNull;
|
|
||||||
import android.support.annotation.Nullable;
|
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
|
||||||
import com.kabouzeid.gramophone.service.MusicService;
|
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
|
||||||
*/
|
|
||||||
public abstract class AbsPlaybackControlActivity extends AbsBaseActivity {
|
|
||||||
@Nullable
|
|
||||||
private MusicPlayerRemote.ServiceToken serviceToken;
|
|
||||||
private PlaybackStatusReceiver playbackStatusReceiver;
|
|
||||||
|
|
||||||
public void onPlayingMetaChanged() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onPlayStateChanged() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onRepeatModeChanged() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onShuffleModeChanged() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onServiceConnected() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
serviceToken = MusicPlayerRemote.bindToService(this, new ServiceConnection() {
|
|
||||||
@Override
|
|
||||||
public void onServiceConnected(ComponentName name, IBinder service) {
|
|
||||||
AbsPlaybackControlActivity.this.onServiceConnected();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onServiceDisconnected(ComponentName name) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
playbackStatusReceiver = new PlaybackStatusReceiver(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onStart() {
|
|
||||||
super.onStart();
|
|
||||||
|
|
||||||
final IntentFilter filter = new IntentFilter();
|
|
||||||
filter.addAction(MusicService.PLAY_STATE_CHANGED);
|
|
||||||
filter.addAction(MusicService.SHUFFLE_MODE_CHANGED);
|
|
||||||
filter.addAction(MusicService.REPEAT_MODE_CHANGED);
|
|
||||||
filter.addAction(MusicService.META_CHANGED);
|
|
||||||
|
|
||||||
registerReceiver(playbackStatusReceiver, filter);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onStop() {
|
|
||||||
super.onStop();
|
|
||||||
try {
|
|
||||||
unregisterReceiver(playbackStatusReceiver);
|
|
||||||
} catch (Throwable ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
MusicPlayerRemote.unbindFromService(serviceToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final class PlaybackStatusReceiver extends BroadcastReceiver {
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
private final WeakReference<AbsPlaybackControlActivity> reference;
|
|
||||||
|
|
||||||
public PlaybackStatusReceiver(final AbsPlaybackControlActivity activity) {
|
|
||||||
reference = new WeakReference<>(activity);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onReceive(final Context context, @NonNull final Intent intent) {
|
|
||||||
final String action = intent.getAction();
|
|
||||||
switch (action) {
|
|
||||||
case MusicService.META_CHANGED:
|
|
||||||
reference.get().onPlayingMetaChanged();
|
|
||||||
break;
|
|
||||||
case MusicService.PLAY_STATE_CHANGED:
|
|
||||||
reference.get().onPlayStateChanged();
|
|
||||||
break;
|
|
||||||
case MusicService.REPEAT_MODE_CHANGED:
|
|
||||||
reference.get().onRepeatModeChanged();
|
|
||||||
break;
|
|
||||||
case MusicService.SHUFFLE_MODE_CHANGED:
|
|
||||||
reference.get().onShuffleModeChanged();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -22,54 +22,46 @@ import com.kabouzeid.gramophone.util.ColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.kabouzeid.gramophone.views.PlayPauseDrawable;
|
import com.kabouzeid.gramophone.views.PlayPauseDrawable;
|
||||||
|
|
||||||
import butterknife.ButterKnife;
|
|
||||||
import butterknife.InjectView;
|
|
||||||
import butterknife.Optional;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public abstract class AbsFabActivity extends AbsPlaybackControlActivity {
|
public abstract class AbsSlidingMusicPanelActivity extends AbsMusicStateActivity {
|
||||||
public static final String TAG = AbsFabActivity.class.getSimpleName();
|
public static final String TAG = AbsSlidingMusicPanelActivity.class.getSimpleName();
|
||||||
|
|
||||||
@Nullable
|
FloatingActionButton playPauseFab;
|
||||||
@Optional
|
|
||||||
@InjectView(R.id.fab)
|
|
||||||
FloatingActionButton fab;
|
|
||||||
|
|
||||||
private PlayPauseDrawable playPauseDrawable;
|
private PlayPauseDrawable playPauseDrawable;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPostCreate(Bundle savedInstanceState) {
|
protected void onPostCreate(Bundle savedInstanceState) {
|
||||||
super.onPostCreate(savedInstanceState);
|
super.onPostCreate(savedInstanceState);
|
||||||
ButterKnife.inject(this);
|
setUpPlayPauseButton();
|
||||||
setUpFab();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpFab() {
|
private void setUpPlayPauseButton() {
|
||||||
if (playPauseDrawable == null) {
|
if (playPauseDrawable == null) {
|
||||||
playPauseDrawable = new PlayPauseDrawable(this);
|
playPauseDrawable = new PlayPauseDrawable(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
getFab().setImageDrawable(playPauseDrawable);
|
getPlayPauseFab().setImageDrawable(playPauseDrawable);
|
||||||
final int accentColor = ThemeSingleton.get().positiveColor;
|
final int accentColor = ThemeSingleton.get().positiveColor;
|
||||||
getFab().setBackgroundTintList(ColorUtil.getEmptyColorStateList(accentColor));
|
getPlayPauseFab().setBackgroundTintList(ColorUtil.getEmptyColorStateList(accentColor));
|
||||||
if (accentColor == Color.WHITE) {
|
if (accentColor == Color.WHITE) {
|
||||||
getFab().getDrawable().setColorFilter(Color.BLACK, PorterDuff.Mode.SRC_IN);
|
getPlayPauseFab().getDrawable().setColorFilter(Color.BLACK, PorterDuff.Mode.SRC_IN);
|
||||||
} else {
|
} else {
|
||||||
getFab().getDrawable().clearColorFilter();
|
getPlayPauseFab().getDrawable().clearColorFilter();
|
||||||
}
|
}
|
||||||
|
|
||||||
updateFabState();
|
updateFabState(false);
|
||||||
final GestureDetector gestureDetector = new GestureDetector(this, new SmallOnGestureListener() {
|
final GestureDetector gestureDetector = new GestureDetector(this, new SmallOnGestureListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
|
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
|
||||||
NavigationUtil.openCurrentPlayingIfPossible(AbsFabActivity.this, getSharedViewsWithFab(null));
|
NavigationUtil.openCurrentPlayingIfPossible(AbsSlidingMusicPanelActivity.this, getSharedViewsWithPlayPauseFab(null));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
getFab().setOnClickListener(new View.OnClickListener() {
|
getPlayPauseFab().setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (MusicPlayerRemote.getPosition() != -1) {
|
if (MusicPlayerRemote.getPosition() != -1) {
|
||||||
|
|
@ -79,12 +71,12 @@ public abstract class AbsFabActivity extends AbsPlaybackControlActivity {
|
||||||
MusicPlayerRemote.resumePlaying();
|
MusicPlayerRemote.resumePlaying();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(AbsFabActivity.this, getResources().getString(R.string.nothing_playing), Toast.LENGTH_SHORT).show();
|
Toast.makeText(AbsSlidingMusicPanelActivity.this, getResources().getString(R.string.playing_queue_empty), Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
getFab().setOnTouchListener(new View.OnTouchListener() {
|
getPlayPauseFab().setOnTouchListener(new View.OnTouchListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onTouch(View view, @NonNull MotionEvent event) {
|
public boolean onTouch(View view, @NonNull MotionEvent event) {
|
||||||
gestureDetector.onTouchEvent(event);
|
gestureDetector.onTouchEvent(event);
|
||||||
|
|
@ -92,55 +84,41 @@ public abstract class AbsFabActivity extends AbsPlaybackControlActivity {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
getFab().setOnLongClickListener(new View.OnLongClickListener() {
|
getPlayPauseFab().setOnLongClickListener(new View.OnLongClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onLongClick(View view) {
|
public boolean onLongClick(View view) {
|
||||||
final Song song = MusicPlayerRemote.getCurrentSong();
|
final Song song = MusicPlayerRemote.getCurrentSong();
|
||||||
if (song.id != -1) {
|
if (song.id != -1) {
|
||||||
Toast.makeText(AbsFabActivity.this, song.title + " - " + song.artistName, Toast.LENGTH_SHORT).show();
|
Toast.makeText(AbsSlidingMusicPanelActivity.this, song.title + " - " + song.artistName, Toast.LENGTH_SHORT).show();
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(AbsFabActivity.this, getResources().getString(R.string.nothing_playing), Toast.LENGTH_SHORT).show();
|
Toast.makeText(AbsSlidingMusicPanelActivity.this, getResources().getString(R.string.nothing_playing), Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateFabState() {
|
protected void updateFabState(boolean animate) {
|
||||||
if (MusicPlayerRemote.isPlaying()) {
|
if (MusicPlayerRemote.isPlaying()) {
|
||||||
playPauseDrawable.setPause();
|
playPauseDrawable.setPause(animate);
|
||||||
} else {
|
} else {
|
||||||
playPauseDrawable.setPlay();
|
playPauseDrawable.setPlay(animate);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void animateUpdateFabState() {
|
|
||||||
if (MusicPlayerRemote.isPlaying()) {
|
|
||||||
setFabPause();
|
|
||||||
} else {
|
|
||||||
setFabPlay();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
protected FloatingActionButton getFab() {
|
protected FloatingActionButton getPlayPauseFab() {
|
||||||
if (fab == null) {
|
if (playPauseFab == null) {
|
||||||
fab = (FloatingActionButton) findViewById(R.id.fab);
|
playPauseFab = (FloatingActionButton) findViewById(R.id.play_pause_fab);
|
||||||
if (fab == null) {
|
if (playPauseFab == null) {
|
||||||
fab = new FloatingActionButton(this);
|
playPauseFab = new FloatingActionButton(this);
|
||||||
Log.e(TAG, "No FAB found created default FAB.");
|
Log.e(TAG, "PlayPauseFAB not found, created default FAB.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return fab;
|
return playPauseFab;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public Pair[] getSharedViewsWithPlayPauseFab(@Nullable Pair[] sharedViews) {
|
||||||
protected void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
updateFabState();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Pair[] getSharedViewsWithFab(@Nullable Pair[] sharedViews) {
|
|
||||||
Pair[] sharedViewsWithFab;
|
Pair[] sharedViewsWithFab;
|
||||||
if (sharedViews != null) {
|
if (sharedViews != null) {
|
||||||
sharedViewsWithFab = new Pair[sharedViews.length + 1];
|
sharedViewsWithFab = new Pair[sharedViews.length + 1];
|
||||||
|
|
@ -148,21 +126,13 @@ public abstract class AbsFabActivity extends AbsPlaybackControlActivity {
|
||||||
} else {
|
} else {
|
||||||
sharedViewsWithFab = new Pair[1];
|
sharedViewsWithFab = new Pair[1];
|
||||||
}
|
}
|
||||||
sharedViewsWithFab[sharedViewsWithFab.length - 1] = Pair.create((View) getFab(), getString(R.string.transition_fab));
|
sharedViewsWithFab[sharedViewsWithFab.length - 1] = Pair.create((View) getPlayPauseFab(), getString(R.string.transition_fab));
|
||||||
return sharedViewsWithFab;
|
return sharedViewsWithFab;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayStateChanged() {
|
public void onPlayStateChanged() {
|
||||||
super.onPlayStateChanged();
|
super.onPlayStateChanged();
|
||||||
animateUpdateFabState();
|
updateFabState(true);
|
||||||
}
|
|
||||||
|
|
||||||
private void setFabPlay() {
|
|
||||||
playPauseDrawable.animatedPlay();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setFabPause() {
|
|
||||||
playPauseDrawable.animatedPause();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -70,7 +70,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
||||||
private int paletteColorPrimary;
|
private int paletteColorPrimary;
|
||||||
private boolean isInNoImageMode;
|
private boolean isInNoImageMode;
|
||||||
|
|
||||||
@InjectView(R.id.fab)
|
@InjectView(R.id.play_pause_fab)
|
||||||
FloatingActionButton fab;
|
FloatingActionButton fab;
|
||||||
@InjectView(R.id.observableScrollView)
|
@InjectView(R.id.observableScrollView)
|
||||||
ObservableScrollView observableScrollView;
|
ObservableScrollView observableScrollView;
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
|
import com.kabouzeid.gramophone.interfaces.MusicStateListener;
|
||||||
import com.kabouzeid.gramophone.views.FastScroller;
|
import com.kabouzeid.gramophone.views.FastScroller;
|
||||||
|
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
|
|
@ -23,7 +24,7 @@ import butterknife.Optional;
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivityFragment implements OnOffsetChangedListener {
|
public abstract class AbsMainActivityRecyclerViewFragment<A extends RecyclerView.Adapter> extends AbsMainActivityFragment implements OnOffsetChangedListener, MusicStateListener {
|
||||||
|
|
||||||
public static final String TAG = AbsMainActivityRecyclerViewFragment.class.getSimpleName();
|
public static final String TAG = AbsMainActivityRecyclerViewFragment.class.getSimpleName();
|
||||||
|
|
||||||
|
|
@ -38,7 +39,7 @@ public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivit
|
||||||
@InjectView(R.id.fast_scroller)
|
@InjectView(R.id.fast_scroller)
|
||||||
FastScroller fastScroller;
|
FastScroller fastScroller;
|
||||||
|
|
||||||
private RecyclerView.Adapter mAdapter;
|
private A mAdapter;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
|
@ -56,6 +57,7 @@ public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivit
|
||||||
}
|
}
|
||||||
|
|
||||||
getMainActivity().addOnAppBarOffsetChangedListener(this);
|
getMainActivity().addOnAppBarOffsetChangedListener(this);
|
||||||
|
getMainActivity().addMusicStateListenerListener(this);
|
||||||
|
|
||||||
setUpRecyclerView();
|
setUpRecyclerView();
|
||||||
|
|
||||||
|
|
@ -76,7 +78,7 @@ public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivit
|
||||||
recyclerView.setAdapter(mAdapter);
|
recyclerView.setAdapter(mAdapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public RecyclerView.Adapter getAdapter() {
|
public A getAdapter() {
|
||||||
return mAdapter;
|
return mAdapter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -93,6 +95,16 @@ public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPlayingMetaChanged() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPlayStateChanged() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void enableViews() {
|
public void enableViews() {
|
||||||
super.enableViews();
|
super.enableViews();
|
||||||
|
|
@ -131,13 +143,13 @@ public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivit
|
||||||
|
|
||||||
protected abstract RecyclerView.LayoutManager createLayoutManager();
|
protected abstract RecyclerView.LayoutManager createLayoutManager();
|
||||||
|
|
||||||
@NonNull
|
protected abstract A createAdapter();
|
||||||
protected abstract RecyclerView.Adapter createAdapter();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroyView() {
|
public void onDestroyView() {
|
||||||
super.onDestroyView();
|
super.onDestroyView();
|
||||||
getMainActivity().removeOnAppBarOffsetChangedListener(this);
|
getMainActivity().removeOnAppBarOffsetChangedListener(this);
|
||||||
|
getMainActivity().removeMusicStateListenerListener(this);
|
||||||
ButterKnife.reset(this);
|
ButterKnife.reset(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ import com.kabouzeid.gramophone.util.Util;
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public class AlbumViewFragment extends AbsMainActivityRecyclerViewFragment {
|
public class AlbumViewFragment extends AbsMainActivityRecyclerViewFragment<AlbumAdapter> {
|
||||||
public static final String TAG = AlbumViewFragment.class.getSimpleName();
|
public static final String TAG = AlbumViewFragment.class.getSimpleName();
|
||||||
|
|
||||||
private GridLayoutManager layoutManager;
|
private GridLayoutManager layoutManager;
|
||||||
|
|
@ -27,8 +27,12 @@ public class AlbumViewFragment extends AbsMainActivityRecyclerViewFragment {
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
protected RecyclerView.Adapter createAdapter() {
|
protected AlbumAdapter createAdapter() {
|
||||||
return new AlbumAdapter(getMainActivity(), AlbumLoader.getAllAlbums(getActivity()), R.layout.item_grid, getMainActivity());
|
return new AlbumAdapter(
|
||||||
|
getMainActivity(),
|
||||||
|
AlbumLoader.getAllAlbums(getActivity()),
|
||||||
|
R.layout.item_grid,
|
||||||
|
getMainActivity());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -40,4 +44,9 @@ public class AlbumViewFragment extends AbsMainActivityRecyclerViewFragment {
|
||||||
layoutManager.setSpanCount(columns);
|
layoutManager.setSpanCount(columns);
|
||||||
layoutManager.requestLayout();
|
layoutManager.requestLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMediaStoreChanged() {
|
||||||
|
getAdapter().swapDataSet(AlbumLoader.getAllAlbums(getActivity()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import com.kabouzeid.gramophone.loader.ArtistLoader;
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public class ArtistViewFragment extends AbsMainActivityRecyclerViewFragment {
|
public class ArtistViewFragment extends AbsMainActivityRecyclerViewFragment<ArtistAdapter> {
|
||||||
|
|
||||||
public static final String TAG = ArtistViewFragment.class.getSimpleName();
|
public static final String TAG = ArtistViewFragment.class.getSimpleName();
|
||||||
|
|
||||||
|
|
@ -23,7 +23,7 @@ public class ArtistViewFragment extends AbsMainActivityRecyclerViewFragment {
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
protected RecyclerView.Adapter createAdapter() {
|
protected ArtistAdapter createAdapter() {
|
||||||
return new ArtistAdapter(
|
return new ArtistAdapter(
|
||||||
getMainActivity(),
|
getMainActivity(),
|
||||||
ArtistLoader.getAllArtists(getActivity()),
|
ArtistLoader.getAllArtists(getActivity()),
|
||||||
|
|
@ -35,4 +35,9 @@ public class ArtistViewFragment extends AbsMainActivityRecyclerViewFragment {
|
||||||
protected int getEmptyMessage() {
|
protected int getEmptyMessage() {
|
||||||
return R.string.no_artists;
|
return R.string.no_artists;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMediaStoreChanged() {
|
||||||
|
getAdapter().swapDataSet(ArtistLoader.getAllArtists(getActivity()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ import java.util.ArrayList;
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public class PlaylistViewFragment extends AbsMainActivityRecyclerViewFragment {
|
public class PlaylistViewFragment extends AbsMainActivityRecyclerViewFragment<PlaylistAdapter> {
|
||||||
|
|
||||||
public static final String TAG = PlaylistViewFragment.class.getSimpleName();
|
public static final String TAG = PlaylistViewFragment.class.getSimpleName();
|
||||||
|
|
||||||
|
|
@ -29,7 +29,21 @@ public class PlaylistViewFragment extends AbsMainActivityRecyclerViewFragment {
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
protected RecyclerView.Adapter createAdapter() {
|
protected PlaylistAdapter createAdapter() {
|
||||||
|
return new PlaylistAdapter(getMainActivity(), getAllPlaylists(), R.layout.item_list_single_row, getMainActivity());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getEmptyMessage() {
|
||||||
|
return R.string.no_playlists;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMediaStoreChanged() {
|
||||||
|
getAdapter().swapDataSet(getAllPlaylists());
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArrayList<Playlist> getAllPlaylists() {
|
||||||
ArrayList<Playlist> playlists = new ArrayList<>();
|
ArrayList<Playlist> playlists = new ArrayList<>();
|
||||||
|
|
||||||
playlists.add(new LastAddedPlaylist(getActivity()));
|
playlists.add(new LastAddedPlaylist(getActivity()));
|
||||||
|
|
@ -38,11 +52,6 @@ public class PlaylistViewFragment extends AbsMainActivityRecyclerViewFragment {
|
||||||
|
|
||||||
playlists.addAll(PlaylistLoader.getAllPlaylists(getActivity()));
|
playlists.addAll(PlaylistLoader.getAllPlaylists(getActivity()));
|
||||||
|
|
||||||
return new PlaylistAdapter(getMainActivity(), playlists, R.layout.item_list_single_row, getMainActivity());
|
return playlists;
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getEmptyMessage() {
|
|
||||||
return R.string.no_playlists;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -11,7 +11,7 @@ import com.kabouzeid.gramophone.loader.SongLoader;
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
public class SongViewFragment extends AbsMainActivityRecyclerViewFragment {
|
public class SongViewFragment extends AbsMainActivityRecyclerViewFragment<SongAdapter> {
|
||||||
|
|
||||||
public static final String TAG = SongViewFragment.class.getSimpleName();
|
public static final String TAG = SongViewFragment.class.getSimpleName();
|
||||||
|
|
||||||
|
|
@ -23,7 +23,7 @@ public class SongViewFragment extends AbsMainActivityRecyclerViewFragment {
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
protected RecyclerView.Adapter createAdapter() {
|
protected SongAdapter createAdapter() {
|
||||||
return new SongAdapter(getMainActivity(), SongLoader.getAllSongs(getActivity()), R.layout.item_list, getMainActivity());
|
return new SongAdapter(getMainActivity(), SongLoader.getAllSongs(getActivity()), R.layout.item_list, getMainActivity());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -31,4 +31,9 @@ public class SongViewFragment extends AbsMainActivityRecyclerViewFragment {
|
||||||
protected int getEmptyMessage() {
|
protected int getEmptyMessage() {
|
||||||
return R.string.no_songs;
|
return R.string.no_songs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMediaStoreChanged() {
|
||||||
|
getAdapter().swapDataSet(SongLoader.getAllSongs(getActivity()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ public class NavigationUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(activity, activity.getResources().getString(R.string.nothing_playing), Toast.LENGTH_SHORT).show();
|
Toast.makeText(activity, activity.getResources().getString(R.string.playing_queue_empty), Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -114,7 +114,7 @@ public class NavigationUtil {
|
||||||
if (dialog != null) {
|
if (dialog != null) {
|
||||||
dialog.show(activity.getSupportFragmentManager(), "PLAY_QUEUE");
|
dialog.show(activity.getSupportFragmentManager(), "PLAY_QUEUE");
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(activity, activity.getResources().getString(R.string.nothing_playing), Toast.LENGTH_SHORT).show();
|
Toast.makeText(activity, activity.getResources().getString(R.string.playing_queue_empty), Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.kabouzeid.gramophone.views;
|
||||||
|
|
||||||
import android.animation.Animator;
|
import android.animation.Animator;
|
||||||
import android.animation.AnimatorListenerAdapter;
|
import android.animation.AnimatorListenerAdapter;
|
||||||
import android.animation.AnimatorSet;
|
|
||||||
import android.animation.ObjectAnimator;
|
import android.animation.ObjectAnimator;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
|
@ -50,7 +49,7 @@ public class PlayPauseDrawable extends Drawable {
|
||||||
private boolean isPlay;
|
private boolean isPlay;
|
||||||
private boolean isPlaySet;
|
private boolean isPlaySet;
|
||||||
|
|
||||||
private AnimatorSet animatorSet;
|
private Animator animator;
|
||||||
|
|
||||||
public PlayPauseDrawable(@NonNull Context context) {
|
public PlayPauseDrawable(@NonNull Context context) {
|
||||||
final Resources res = context.getResources();
|
final Resources res = context.getResources();
|
||||||
|
|
@ -173,40 +172,38 @@ public class PlayPauseDrawable extends Drawable {
|
||||||
return a + (b - a) * t;
|
return a + (b - a) * t;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void animatedPlay() {
|
public void setPlay(boolean animate) {
|
||||||
if (!isPlaySet) {
|
if (animate) {
|
||||||
togglePlayPause();
|
if (!isPlaySet) {
|
||||||
|
togglePlayPause();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
isPlaySet = true;
|
||||||
|
isPlay = true;
|
||||||
|
setProgress(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void animatedPause() {
|
public void setPause(boolean animate) {
|
||||||
if (isPlaySet) {
|
if (animate) {
|
||||||
togglePlayPause();
|
if (isPlaySet) {
|
||||||
|
togglePlayPause();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
isPlaySet = false;
|
||||||
|
isPlay = false;
|
||||||
|
setProgress(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPlay() {
|
|
||||||
isPlaySet = true;
|
|
||||||
isPlay = true;
|
|
||||||
setProgress(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPause() {
|
|
||||||
isPlaySet = false;
|
|
||||||
isPlay = false;
|
|
||||||
setProgress(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void togglePlayPause() {
|
public void togglePlayPause() {
|
||||||
if (animatorSet != null) {
|
if (animator != null) {
|
||||||
animatorSet.cancel();
|
animator.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
animatorSet = new AnimatorSet();
|
animator = getPausePlayAnimator();
|
||||||
final Animator pausePlayAnim = getPausePlayAnimator();
|
animator.setInterpolator(new DecelerateInterpolator());
|
||||||
animatorSet.setInterpolator(new DecelerateInterpolator());
|
animator.setDuration(PLAY_PAUSE_ANIMATION_DURATION);
|
||||||
animatorSet.setDuration(PLAY_PAUSE_ANIMATION_DURATION);
|
animator.start();
|
||||||
animatorSet.playTogether(pausePlayAnim);
|
|
||||||
animatorSet.start();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<android.support.design.widget.FloatingActionButton
|
<android.support.design.widget.FloatingActionButton
|
||||||
android:id="@+id/fab"
|
android:id="@+id/play_pause_fab"
|
||||||
style="@style/PlayPauseFab"
|
style="@style/PlayPauseFab"
|
||||||
android:layout_gravity="end|right|bottom"
|
android:layout_gravity="end|right|bottom"
|
||||||
android:layout_margin="@dimen/fab_margin" />
|
android:layout_margin="@dimen/fab_margin" />
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,7 @@
|
||||||
tools:ignore="RtlHardcoded" />
|
tools:ignore="RtlHardcoded" />
|
||||||
|
|
||||||
<android.support.design.widget.FloatingActionButton
|
<android.support.design.widget.FloatingActionButton
|
||||||
android:id="@+id/fab"
|
android:id="@+id/play_pause_fab"
|
||||||
style="@style/PlayPauseFab"
|
style="@style/PlayPauseFab"
|
||||||
android:layout_gravity="bottom|right|end"
|
android:layout_gravity="bottom|right|end"
|
||||||
android:layout_margin="@dimen/fab_margin"
|
android:layout_margin="@dimen/fab_margin"
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<android.support.design.widget.FloatingActionButton
|
<android.support.design.widget.FloatingActionButton
|
||||||
android:id="@+id/fab"
|
android:id="@+id/play_pause_fab"
|
||||||
style="@style/PlayPauseFab"
|
style="@style/PlayPauseFab"
|
||||||
android:layout_gravity="end|bottom"
|
android:layout_gravity="end|bottom"
|
||||||
android:layout_margin="@dimen/fab_margin" />
|
android:layout_margin="@dimen/fab_margin" />
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||||
|
|
||||||
<android.support.design.widget.FloatingActionButton
|
<android.support.design.widget.FloatingActionButton
|
||||||
android:id="@+id/fab"
|
android:id="@+id/play_pause_fab"
|
||||||
style="@style/PlayPauseFab"
|
style="@style/PlayPauseFab"
|
||||||
android:layout_gravity="end|bottom"
|
android:layout_gravity="end|bottom"
|
||||||
android:layout_margin="@dimen/fab_margin" />
|
android:layout_margin="@dimen/fab_margin" />
|
||||||
|
|
|
||||||
|
|
@ -120,8 +120,8 @@
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_marginEnd="@dimen/tmp_now_playing_skip_rewind_margin"
|
android:layout_marginEnd="@dimen/tmp_now_playing_skip_rewind_margin"
|
||||||
android:layout_marginRight="@dimen/tmp_now_playing_skip_rewind_margin"
|
android:layout_marginRight="@dimen/tmp_now_playing_skip_rewind_margin"
|
||||||
android:layout_toLeftOf="@+id/fab"
|
android:layout_toLeftOf="@+id/play_pause_fab"
|
||||||
android:layout_toStartOf="@+id/fab"
|
android:layout_toStartOf="@+id/play_pause_fab"
|
||||||
android:background="?round_selector"
|
android:background="?round_selector"
|
||||||
android:elevation="8dp"
|
android:elevation="8dp"
|
||||||
android:padding="22dp"
|
android:padding="22dp"
|
||||||
|
|
@ -135,8 +135,8 @@
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_marginLeft="@dimen/tmp_now_playing_skip_rewind_margin"
|
android:layout_marginLeft="@dimen/tmp_now_playing_skip_rewind_margin"
|
||||||
android:layout_marginStart="@dimen/tmp_now_playing_skip_rewind_margin"
|
android:layout_marginStart="@dimen/tmp_now_playing_skip_rewind_margin"
|
||||||
android:layout_toEndOf="@+id/fab"
|
android:layout_toEndOf="@+id/play_pause_fab"
|
||||||
android:layout_toRightOf="@+id/fab"
|
android:layout_toRightOf="@+id/play_pause_fab"
|
||||||
android:background="?round_selector"
|
android:background="?round_selector"
|
||||||
android:elevation="8dp"
|
android:elevation="8dp"
|
||||||
android:padding="22dp"
|
android:padding="22dp"
|
||||||
|
|
@ -174,7 +174,7 @@
|
||||||
android:src="@drawable/ic_shuffle_white_36dp" />
|
android:src="@drawable/ic_shuffle_white_36dp" />
|
||||||
|
|
||||||
<android.support.design.widget.FloatingActionButton
|
<android.support.design.widget.FloatingActionButton
|
||||||
android:id="@+id/fab"
|
android:id="@+id/play_pause_fab"
|
||||||
style="@style/PlayPauseFab"
|
style="@style/PlayPauseFab"
|
||||||
android:layout_centerInParent="true"
|
android:layout_centerInParent="true"
|
||||||
android:layout_margin="0dp" />
|
android:layout_margin="0dp" />
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@
|
||||||
android:textSize="@dimen/empty_text_size" />
|
android:textSize="@dimen/empty_text_size" />
|
||||||
|
|
||||||
<android.support.design.widget.FloatingActionButton
|
<android.support.design.widget.FloatingActionButton
|
||||||
android:id="@+id/fab"
|
android:id="@+id/play_pause_fab"
|
||||||
style="@style/PlayPauseFab"
|
style="@style/PlayPauseFab"
|
||||||
android:layout_gravity="bottom|end"
|
android:layout_gravity="bottom|end"
|
||||||
android:layout_margin="@dimen/fab_margin" />
|
android:layout_margin="@dimen/fab_margin" />
|
||||||
|
|
|
||||||
|
|
@ -174,7 +174,7 @@
|
||||||
tools:ignore="RtlHardcoded" />
|
tools:ignore="RtlHardcoded" />
|
||||||
|
|
||||||
<android.support.design.widget.FloatingActionButton
|
<android.support.design.widget.FloatingActionButton
|
||||||
android:id="@+id/fab"
|
android:id="@+id/play_pause_fab"
|
||||||
style="@style/PlayPauseFab"
|
style="@style/PlayPauseFab"
|
||||||
android:layout_gravity="bottom|right|end"
|
android:layout_gravity="bottom|right|end"
|
||||||
android:layout_margin="@dimen/fab_margin"
|
android:layout_margin="@dimen/fab_margin"
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,6 @@
|
||||||
android:layout_marginRight="16dp"
|
android:layout_marginRight="16dp"
|
||||||
android:fontFamily="sans-serif"
|
android:fontFamily="sans-serif"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:text="@string/nothing_playing"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||||
android:textColor="@android:color/white"
|
android:textColor="@android:color/white"
|
||||||
android:textSize="14sp" />
|
android:textSize="14sp" />
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
<string name="artists">الفنانون</string>
|
<string name="artists">الفنانون</string>
|
||||||
<string name="songs">الأغاني</string>
|
<string name="songs">الأغاني</string>
|
||||||
<string name="playlists">قوائم التشغيل</string>
|
<string name="playlists">قوائم التشغيل</string>
|
||||||
<string name="nothing_playing">لا شيء قيد التشغيل</string>
|
<string name="playing_queue_empty">لا شيء قيد التشغيل</string>
|
||||||
<string name="unplayable_file">عذراً، حصل خطأ أثناء محاولة تشغيل الأغنية</string>
|
<string name="unplayable_file">عذراً، حصل خطأ أثناء محاولة تشغيل الأغنية</string>
|
||||||
<string name="biography_unavailable">عذراً، لم يتم العثور على سيرة ذاتية مطابقة لهذا الفنان</string>
|
<string name="biography_unavailable">عذراً، لم يتم العثور على سيرة ذاتية مطابقة لهذا الفنان</string>
|
||||||
<string name="biography">سيرة ذاتية</string>
|
<string name="biography">سيرة ذاتية</string>
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
<string name="artists">Interpreti</string>
|
<string name="artists">Interpreti</string>
|
||||||
<string name="songs">Skladby</string>
|
<string name="songs">Skladby</string>
|
||||||
<string name="playlists">Playlisty</string>
|
<string name="playlists">Playlisty</string>
|
||||||
<string name="nothing_playing">Nic nehraje</string>
|
<string name="playing_queue_empty">Nic nehraje</string>
|
||||||
<string name="unplayable_file">Omlouváme se, při pokusu přehrát tuto skladbu došlo k chybě</string>
|
<string name="unplayable_file">Omlouváme se, při pokusu přehrát tuto skladbu došlo k chybě</string>
|
||||||
<string name="biography_unavailable">Omlouváme se, k tomuto interpretovi nemůžeme sehnat doplňující informace.</string>
|
<string name="biography_unavailable">Omlouváme se, k tomuto interpretovi nemůžeme sehnat doplňující informace.</string>
|
||||||
<string name="biography">Biografie</string>
|
<string name="biography">Biografie</string>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<string name="artists">Interpreten</string>
|
<string name="artists">Interpreten</string>
|
||||||
<string name="songs">Titel</string>
|
<string name="songs">Titel</string>
|
||||||
<string name="playlists">Wiedergabelisten</string>
|
<string name="playlists">Wiedergabelisten</string>
|
||||||
<string name="nothing_playing">Keine Wiedergabe</string>
|
<string name="playing_queue_empty">Keine Wiedergabe</string>
|
||||||
<string name="unplayable_file">Der Song kann nicht abgespielt werden</string>
|
<string name="unplayable_file">Der Song kann nicht abgespielt werden</string>
|
||||||
<string name="biography_unavailable">Es konnte keine passende Biografie für diesen Interpreten gefunden werden</string>
|
<string name="biography_unavailable">Es konnte keine passende Biografie für diesen Interpreten gefunden werden</string>
|
||||||
<string name="biography">Biografie</string>
|
<string name="biography">Biografie</string>
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
<string name="artists">Καλλιτέχνες</string>
|
<string name="artists">Καλλιτέχνες</string>
|
||||||
<string name="songs">Τραγούδια</string>
|
<string name="songs">Τραγούδια</string>
|
||||||
<string name="playlists">Λίστες αναπαραγωγής</string>
|
<string name="playlists">Λίστες αναπαραγωγής</string>
|
||||||
<string name="nothing_playing">Δεν παίζει τίποτα</string>
|
<string name="playing_queue_empty">Δεν παίζει τίποτα</string>
|
||||||
<string name="unplayable_file">Συγγνώμη - Υπήρξε σφάλμα στην προσπάθεια αναπαραγωγής</string>
|
<string name="unplayable_file">Συγγνώμη - Υπήρξε σφάλμα στην προσπάθεια αναπαραγωγής</string>
|
||||||
<string name="biography_unavailable">Συγγνώμη, δεν βρήκαμε τη βιογραφία αυτού του καλλιτέχνη</string>
|
<string name="biography_unavailable">Συγγνώμη, δεν βρήκαμε τη βιογραφία αυτού του καλλιτέχνη</string>
|
||||||
<string name="biography">Βιογραφία</string>
|
<string name="biography">Βιογραφία</string>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<string name="artists">Artistas</string>
|
<string name="artists">Artistas</string>
|
||||||
<string name="songs">Canciones</string>
|
<string name="songs">Canciones</string>
|
||||||
<string name="playlists">Listas de reproducción</string>
|
<string name="playlists">Listas de reproducción</string>
|
||||||
<string name="nothing_playing">Nada se está reproduciendo</string>
|
<string name="playing_queue_empty">Nada se está reproduciendo</string>
|
||||||
<string name="unplayable_file">Ocurrió un error al reproducir esta canción.</string>
|
<string name="unplayable_file">Ocurrió un error al reproducir esta canción.</string>
|
||||||
<string name="biography_unavailable">Lo sentimos, no encontramos una biografía correspondiente a éste artista</string>
|
<string name="biography_unavailable">Lo sentimos, no encontramos una biografía correspondiente a éste artista</string>
|
||||||
<string name="biography">Biografía</string>
|
<string name="biography">Biografía</string>
|
||||||
|
|
@ -106,6 +106,7 @@
|
||||||
<string name="pref_title_general_theme">Tema general</string>
|
<string name="pref_title_general_theme">Tema general</string>
|
||||||
<string name="pref_header_audio">Audio</string>
|
<string name="pref_header_audio">Audio</string>
|
||||||
<string name="pref_header_general">General</string>
|
<string name="pref_header_general">General</string>
|
||||||
|
<string name="pref_header_images">Imágenes</string>
|
||||||
<string name="pref_header_lockscreen">Pantalla de bloqueo</string>
|
<string name="pref_header_lockscreen">Pantalla de bloqueo</string>
|
||||||
<string name="pref_summary_colored_navigation_bar">Selecciona en qué secciones la barra debe tener color</string>
|
<string name="pref_summary_colored_navigation_bar">Selecciona en qué secciones la barra debe tener color</string>
|
||||||
<string name="pref_title_navigation_bar">Color en la barra de navegación</string>
|
<string name="pref_title_navigation_bar">Color en la barra de navegación</string>
|
||||||
|
|
@ -119,6 +120,7 @@
|
||||||
<string name="pref_title_colored_album_footers">Pie de álbum coloreado</string>
|
<string name="pref_title_colored_album_footers">Pie de álbum coloreado</string>
|
||||||
<string name="pref_title_album_art_on_lockscreen">Arte del álbum en la pantalla de bloqueo</string>
|
<string name="pref_title_album_art_on_lockscreen">Arte del álbum en la pantalla de bloqueo</string>
|
||||||
<string name="pref_title_colored_notification">Notificación coloreada</string>
|
<string name="pref_title_colored_notification">Notificación coloreada</string>
|
||||||
|
<string name="pref_title_ignore_media_store_artwork">Ignorar arte proveniente de almacenamiento</string>
|
||||||
<string name="pref_title_gapless_playback">Quitar silencio entre canciones</string>
|
<string name="pref_title_gapless_playback">Quitar silencio entre canciones</string>
|
||||||
<string name="pref_title_force_square_album_art">Forzar portada de álbum a cuadrado</string>
|
<string name="pref_title_force_square_album_art">Forzar portada de álbum a cuadrado</string>
|
||||||
<string name="pref_title_opaque_toolbar_now_playing">Barra de Reproducción Actual opaca</string>
|
<string name="pref_title_opaque_toolbar_now_playing">Barra de Reproducción Actual opaca</string>
|
||||||
|
|
@ -162,6 +164,7 @@
|
||||||
<string name="pref_summary_larger_title_box_now_playing">La caja detrás de la tapa del álbum donde se encuentra el título de la canción y el artista es mas largo que su altura.</string>
|
<string name="pref_summary_larger_title_box_now_playing">La caja detrás de la tapa del álbum donde se encuentra el título de la canción y el artista es mas largo que su altura.</string>
|
||||||
<string name="pref_summary_alternative_progress_slider_now_playing">Usa una barra de progreso que no cubre la tapa del álbum en vez de la barra normal de progreso.</string>
|
<string name="pref_summary_alternative_progress_slider_now_playing">Usa una barra de progreso que no cubre la tapa del álbum en vez de la barra normal de progreso.</string>
|
||||||
<string name="pref_summary_playback_controller_card_now_playing">Mostrar tarjeta detrás de los botones de control de reproducción (reproducir/pausar, etc).</string>
|
<string name="pref_summary_playback_controller_card_now_playing">Mostrar tarjeta detrás de los botones de control de reproducción (reproducir/pausar, etc).</string>
|
||||||
|
<string name="pref_summary_ignore_media_store_artwork">Si bien la calidad del arte de tapa del almacenamiento tiene mejor calidad, puede tardar más en cargar. Sólo activar si no se quieren artes de tapa de baja resolución.</string>
|
||||||
<string name="could_not_download_album_cover">"No se puede descargar una tapa de álbum coincidente."</string>
|
<string name="could_not_download_album_cover">"No se puede descargar una tapa de álbum coincidente."</string>
|
||||||
<string name="search_hint">Buscar en librería...</string>
|
<string name="search_hint">Buscar en librería...</string>
|
||||||
<string name="rescanning_media">Escaneando contenido...</string>
|
<string name="rescanning_media">Escaneando contenido...</string>
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
<string name="artists">Artistit</string>
|
<string name="artists">Artistit</string>
|
||||||
<string name="songs">Kappaleet</string>
|
<string name="songs">Kappaleet</string>
|
||||||
<string name="playlists">Soittolistat</string>
|
<string name="playlists">Soittolistat</string>
|
||||||
<string name="nothing_playing">Mitään ei toisteta</string>
|
<string name="playing_queue_empty">Mitään ei toisteta</string>
|
||||||
<string name="unplayable_file">Virhe toistettaessa kappaletta</string>
|
<string name="unplayable_file">Virhe toistettaessa kappaletta</string>
|
||||||
<string name="biography_unavailable">Biogtagiaa ei löytynyt tälle artistille</string>
|
<string name="biography_unavailable">Biogtagiaa ei löytynyt tälle artistille</string>
|
||||||
<string name="biography">Biografia</string>
|
<string name="biography">Biografia</string>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<string name="artists">Artistes</string>
|
<string name="artists">Artistes</string>
|
||||||
<string name="songs">Titres</string>
|
<string name="songs">Titres</string>
|
||||||
<string name="playlists">Playlists</string>
|
<string name="playlists">Playlists</string>
|
||||||
<string name="nothing_playing">Aucune lecture en cours</string>
|
<string name="playing_queue_empty">Aucune lecture en cours</string>
|
||||||
<string name="unplayable_file">Une erreur est survenue lors de la tentative de lecture de ce titre.</string>
|
<string name="unplayable_file">Une erreur est survenue lors de la tentative de lecture de ce titre.</string>
|
||||||
<string name="biography_unavailable">Nous n\'avons pas trouvé la biographie correspondant à cet artiste.</string>
|
<string name="biography_unavailable">Nous n\'avons pas trouvé la biographie correspondant à cet artiste.</string>
|
||||||
<string name="biography">Biographie</string>
|
<string name="biography">Biographie</string>
|
||||||
|
|
@ -104,6 +104,7 @@
|
||||||
<string name="pref_title_general_theme">Thème général</string>
|
<string name="pref_title_general_theme">Thème général</string>
|
||||||
<string name="pref_header_audio">Audio</string>
|
<string name="pref_header_audio">Audio</string>
|
||||||
<string name="pref_header_general">Général</string>
|
<string name="pref_header_general">Général</string>
|
||||||
|
<string name="pref_header_images">Images</string>
|
||||||
<string name="pref_header_lockscreen">Écran de vérouillage</string>
|
<string name="pref_header_lockscreen">Écran de vérouillage</string>
|
||||||
<string name="pref_summary_colored_navigation_bar">Dans quelles vues la barre navigation doit être colorée.</string>
|
<string name="pref_summary_colored_navigation_bar">Dans quelles vues la barre navigation doit être colorée.</string>
|
||||||
<string name="pref_title_navigation_bar">Barre de navigation colorée</string>
|
<string name="pref_title_navigation_bar">Barre de navigation colorée</string>
|
||||||
|
|
@ -117,6 +118,7 @@
|
||||||
<string name="pref_title_colored_album_footers">Bas d\'album coloré</string>
|
<string name="pref_title_colored_album_footers">Bas d\'album coloré</string>
|
||||||
<string name="pref_title_album_art_on_lockscreen">Vignette d\'album sur l\'écran de vérouillage</string>
|
<string name="pref_title_album_art_on_lockscreen">Vignette d\'album sur l\'écran de vérouillage</string>
|
||||||
<string name="pref_title_colored_notification">Notification colorée</string>
|
<string name="pref_title_colored_notification">Notification colorée</string>
|
||||||
|
<string name="pref_title_ignore_media_store_artwork">Ignorer stockage des artwork media</string>
|
||||||
<string name="pref_title_gapless_playback">Lecture sans coupure</string>
|
<string name="pref_title_gapless_playback">Lecture sans coupure</string>
|
||||||
<string name="pref_title_force_square_album_art">Vignette carrée</string>
|
<string name="pref_title_force_square_album_art">Vignette carrée</string>
|
||||||
<string name="pref_title_opaque_toolbar_now_playing">Barre d\'outil opaque</string>
|
<string name="pref_title_opaque_toolbar_now_playing">Barre d\'outil opaque</string>
|
||||||
|
|
@ -160,6 +162,7 @@
|
||||||
<string name="pref_summary_larger_title_box_now_playing">La boîte en dessous de la vignette de l\'album où se trouvent le titre de la musique et l\'artiste est plus large dans sa hauteur.</string>
|
<string name="pref_summary_larger_title_box_now_playing">La boîte en dessous de la vignette de l\'album où se trouvent le titre de la musique et l\'artiste est plus large dans sa hauteur.</string>
|
||||||
<string name="pref_summary_alternative_progress_slider_now_playing">Utilise une barre de progression qui ne recouvre pas la vignette de l\'album à la place de la barre de progression normale.</string>
|
<string name="pref_summary_alternative_progress_slider_now_playing">Utilise une barre de progression qui ne recouvre pas la vignette de l\'album à la place de la barre de progression normale.</string>
|
||||||
<string name="pref_summary_playback_controller_card_now_playing">Affiche une carte derrière les boutons de lecture (lecture/pause etc.)</string>
|
<string name="pref_summary_playback_controller_card_now_playing">Affiche une carte derrière les boutons de lecture (lecture/pause etc.)</string>
|
||||||
|
<string name="pref_summary_ignore_media_store_artwork">Countourner le stockage media, ce qui peut augmenter la qualité des images mais peut cause des temps de chargement plus longs. N\'activez que si vous avez des problèmes de basse résolution des images</string>
|
||||||
<string name="could_not_download_album_cover">"Impossible de télécharger la vignette correspondant à l'album."</string>
|
<string name="could_not_download_album_cover">"Impossible de télécharger la vignette correspondant à l'album."</string>
|
||||||
<string name="search_hint">Rechercher votre bibliothèque...</string>
|
<string name="search_hint">Rechercher votre bibliothèque...</string>
|
||||||
<string name="rescanning_media">Réanalyse des médias…</string>
|
<string name="rescanning_media">Réanalyse des médias…</string>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<string name="artists">Izvođači</string>
|
<string name="artists">Izvođači</string>
|
||||||
<string name="songs">Pjesme</string>
|
<string name="songs">Pjesme</string>
|
||||||
<string name="playlists">Popisi pjesama</string>
|
<string name="playlists">Popisi pjesama</string>
|
||||||
<string name="nothing_playing">Ništa se ne reproducira</string>
|
<string name="playing_queue_empty">Ništa se ne reproducira</string>
|
||||||
<string name="unplayable_file">Došlo je do greške prilikom pokušaja reproduciranja ove pjesme</string>
|
<string name="unplayable_file">Došlo je do greške prilikom pokušaja reproduciranja ove pjesme</string>
|
||||||
<string name="biography_unavailable">Nismo mogli pronaći biografiju ovog izvođača</string>
|
<string name="biography_unavailable">Nismo mogli pronaći biografiju ovog izvođača</string>
|
||||||
<string name="biography">Biografija</string>
|
<string name="biography">Biografija</string>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<string name="artists">Artisti</string>
|
<string name="artists">Artisti</string>
|
||||||
<string name="songs">Brani</string>
|
<string name="songs">Brani</string>
|
||||||
<string name="playlists">Playlist</string>
|
<string name="playlists">Playlist</string>
|
||||||
<string name="nothing_playing">Niente in riproduzione</string>
|
<string name="playing_queue_empty">Niente in riproduzione</string>
|
||||||
<string name="unplayable_file">Spiacenti - Si è verificato un errore nel tentativo di riprodurre questa canzone.</string>
|
<string name="unplayable_file">Spiacenti - Si è verificato un errore nel tentativo di riprodurre questa canzone.</string>
|
||||||
<string name="biography_unavailable">Spiacenti - Impossibile trovare una biografia corrispondente a questo artista.</string>
|
<string name="biography_unavailable">Spiacenti - Impossibile trovare una biografia corrispondente a questo artista.</string>
|
||||||
<string name="biography">Biografia</string>
|
<string name="biography">Biografia</string>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<string name="artists">アーティスト</string>
|
<string name="artists">アーティスト</string>
|
||||||
<string name="songs">楽曲</string>
|
<string name="songs">楽曲</string>
|
||||||
<string name="playlists">プレイリスト</string>
|
<string name="playlists">プレイリスト</string>
|
||||||
<string name="nothing_playing">再生中の曲はありません</string>
|
<string name="playing_queue_empty">再生中の曲はありません</string>
|
||||||
<string name="unplayable_file">楽曲の再生時にエラーが発生しました</string>
|
<string name="unplayable_file">楽曲の再生時にエラーが発生しました</string>
|
||||||
<string name="biography_unavailable">バイオグラフィーが見つかりません</string>
|
<string name="biography_unavailable">バイオグラフィーが見つかりません</string>
|
||||||
<string name="biography">バイオグラフィー</string>
|
<string name="biography">バイオグラフィー</string>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<string name="artists">아티스트</string>
|
<string name="artists">아티스트</string>
|
||||||
<string name="songs">노래</string>
|
<string name="songs">노래</string>
|
||||||
<string name="playlists">재생목록</string>
|
<string name="playlists">재생목록</string>
|
||||||
<string name="nothing_playing">재생 중인 노래가 없습니다.</string>
|
<string name="playing_queue_empty">재생 중인 노래가 없습니다.</string>
|
||||||
<string name="unplayable_file">이 노래를 재생하려던 중 오류가 발생했습니다.</string>
|
<string name="unplayable_file">이 노래를 재생하려던 중 오류가 발생했습니다.</string>
|
||||||
<string name="biography_unavailable">이 아티스트와 일치하는 정보를 찾을 수 없습니다.</string>
|
<string name="biography_unavailable">이 아티스트와 일치하는 정보를 찾을 수 없습니다.</string>
|
||||||
<string name="biography">정보</string>
|
<string name="biography">정보</string>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<string name="artists">Artiesten</string>
|
<string name="artists">Artiesten</string>
|
||||||
<string name="songs">Nummers</string>
|
<string name="songs">Nummers</string>
|
||||||
<string name="playlists">Afspeellijsten</string>
|
<string name="playlists">Afspeellijsten</string>
|
||||||
<string name="nothing_playing">Niets wordt afgespeeld</string>
|
<string name="playing_queue_empty">Niets wordt afgespeeld</string>
|
||||||
<string name="unplayable_file">Er is een fout opgetreden bij het afspelen van dit nummer.</string>
|
<string name="unplayable_file">Er is een fout opgetreden bij het afspelen van dit nummer.</string>
|
||||||
<string name="biography_unavailable">Het is niet gelukt een passende biografie te vinden voor deze artiest.</string>
|
<string name="biography_unavailable">Het is niet gelukt een passende biografie te vinden voor deze artiest.</string>
|
||||||
<string name="biography">Biografie</string>
|
<string name="biography">Biografie</string>
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
<string name="artists">Artistar</string>
|
<string name="artists">Artistar</string>
|
||||||
<string name="songs">Songar</string>
|
<string name="songs">Songar</string>
|
||||||
<string name="playlists">Spelelister</string>
|
<string name="playlists">Spelelister</string>
|
||||||
<string name="nothing_playing">Ingenting speler</string>
|
<string name="playing_queue_empty">Ingenting speler</string>
|
||||||
<string name="unplayable_file">Orsak - ein feil oppstod medan spelaren prøvde å spele denne songen</string>
|
<string name="unplayable_file">Orsak - ein feil oppstod medan spelaren prøvde å spele denne songen</string>
|
||||||
<string name="biography_unavailable">Orsak, vi fann ingen passande biografi for denne artisten.</string>
|
<string name="biography_unavailable">Orsak, vi fann ingen passande biografi for denne artisten.</string>
|
||||||
<string name="biography">Biografi</string>
|
<string name="biography">Biografi</string>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<string name="artists">Wykonawcy</string>
|
<string name="artists">Wykonawcy</string>
|
||||||
<string name="songs">Utwory</string>
|
<string name="songs">Utwory</string>
|
||||||
<string name="playlists">Listy odtwarzania</string>
|
<string name="playlists">Listy odtwarzania</string>
|
||||||
<string name="nothing_playing">Nic nie gra</string>
|
<string name="playing_queue_empty">Nic nie gra</string>
|
||||||
<string name="unplayable_file">Wystąpił błąd przy próbie odtworzenia tego utworu</string>
|
<string name="unplayable_file">Wystąpił błąd przy próbie odtworzenia tego utworu</string>
|
||||||
<string name="biography_unavailable">Nie znaleziono pasującej biografii dla tego wykonawcy</string>
|
<string name="biography_unavailable">Nie znaleziono pasującej biografii dla tego wykonawcy</string>
|
||||||
<string name="biography">Biografia</string>
|
<string name="biography">Biografia</string>
|
||||||
|
|
@ -162,6 +162,7 @@
|
||||||
<string name="pref_summary_larger_title_box_now_playing">Zaznacz, a pole nazwy utworu i wykonawcy pod okładką albumu będzie większe</string>
|
<string name="pref_summary_larger_title_box_now_playing">Zaznacz, a pole nazwy utworu i wykonawcy pod okładką albumu będzie większe</string>
|
||||||
<string name="pref_summary_alternative_progress_slider_now_playing">Zaznacz, a w odróżnieniu od domyślnego suwaka, pasek postępu nie zasłoni okładki albumu</string>
|
<string name="pref_summary_alternative_progress_slider_now_playing">Zaznacz, a w odróżnieniu od domyślnego suwaka, pasek postępu nie zasłoni okładki albumu</string>
|
||||||
<string name="pref_summary_playback_controller_card_now_playing">Zaznacz, a pod przyciskami sterującymi odtwarzaczem (odtwarzanie/pauza, itp.) zostanie wyświetlona karta</string>
|
<string name="pref_summary_playback_controller_card_now_playing">Zaznacz, a pod przyciskami sterującymi odtwarzaczem (odtwarzanie/pauza, itp.) zostanie wyświetlona karta</string>
|
||||||
|
<string name="pref_summary_ignore_media_store_artwork">Pomijaj korzystanie z Media Store, polepszy to jakość okładek, ale może spowodować ich wolniejsze ładowanie. Zaznacz tylko wtedy, gdy masz kłopoty z niską jakością grafik</string>
|
||||||
<string name="could_not_download_album_cover">"Nie udało się pobrać okładki pasującej do albumu"</string>
|
<string name="could_not_download_album_cover">"Nie udało się pobrać okładki pasującej do albumu"</string>
|
||||||
<string name="search_hint">Szukaj w bibliotece...</string>
|
<string name="search_hint">Szukaj w bibliotece...</string>
|
||||||
<string name="rescanning_media">Ponowny skan nośnika...</string>
|
<string name="rescanning_media">Ponowny skan nośnika...</string>
|
||||||
|
|
@ -175,7 +176,7 @@
|
||||||
<string name="web_search">Wyszukaj w sieci</string>
|
<string name="web_search">Wyszukaj w sieci</string>
|
||||||
<string name="action_sleep_timer">Wyłącznik czasowy</string>
|
<string name="action_sleep_timer">Wyłącznik czasowy</string>
|
||||||
<string name="action_set">Ustaw</string>
|
<string name="action_set">Ustaw</string>
|
||||||
<string name="cancel_current_timer">Anuluj aktualny wyłącznik czasowy</string>
|
<string name="cancel_current_timer">Anuluj wyłącznik</string>
|
||||||
<string name="sleep_timer_canceled">Wyłącznik czasowy został anulowany</string>
|
<string name="sleep_timer_canceled">Wyłącznik czasowy został anulowany</string>
|
||||||
<string name="sleep_timer_set">Wyłącznik czasowy ustawiony na %d minut od teraz</string>
|
<string name="sleep_timer_set">Wyłącznik czasowy ustawiony na %d minut od teraz</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<string name="artists">Artistas</string>
|
<string name="artists">Artistas</string>
|
||||||
<string name="songs">Músicas</string>
|
<string name="songs">Músicas</string>
|
||||||
<string name="playlists">Playlists</string>
|
<string name="playlists">Playlists</string>
|
||||||
<string name="nothing_playing">Nada em execução</string>
|
<string name="playing_queue_empty">Nada em execução</string>
|
||||||
<string name="unplayable_file">Desculpe - ocorreu um erro ao tentar reproduzir esta faixa</string>
|
<string name="unplayable_file">Desculpe - ocorreu um erro ao tentar reproduzir esta faixa</string>
|
||||||
<string name="biography_unavailable">Desculpe, não conseguimos encontrar a biografia deste artista.</string>
|
<string name="biography_unavailable">Desculpe, não conseguimos encontrar a biografia deste artista.</string>
|
||||||
<string name="biography">Biografia</string>
|
<string name="biography">Biografia</string>
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
<string name="label_track_length">Duração</string>
|
<string name="label_track_length">Duração</string>
|
||||||
<string name="label_bit_rate">Taxa de bits</string>
|
<string name="label_bit_rate">Taxa de bits</string>
|
||||||
<string name="label_sampling_rate">Taxa de amostragem</string>
|
<string name="label_sampling_rate">Taxa de amostragem</string>
|
||||||
<string name="action_go_to_artist">Ir para artista</string>
|
<string name="action_go_to_artist">Ir para o artista</string>
|
||||||
<string name="action_go_to_album">Ir para o álbum</string>
|
<string name="action_go_to_album">Ir para o álbum</string>
|
||||||
<string name="label_current_playing_queue">Lista de reprodução</string>
|
<string name="label_current_playing_queue">Lista de reprodução</string>
|
||||||
<string name="save_as_playlist">Salvar como playlist</string>
|
<string name="save_as_playlist">Salvar como playlist</string>
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
<string name="artists">Artistas</string>
|
<string name="artists">Artistas</string>
|
||||||
<string name="songs">Músicas</string>
|
<string name="songs">Músicas</string>
|
||||||
<string name="playlists">Playlists</string>
|
<string name="playlists">Playlists</string>
|
||||||
<string name="nothing_playing">Nada está sendo reproduzido</string>
|
<string name="playing_queue_empty">Nada está sendo reproduzido</string>
|
||||||
<string name="unplayable_file">Desculpe - ocorreu um erro ao tentar reproduzir essa música</string>
|
<string name="unplayable_file">Desculpe - ocorreu um erro ao tentar reproduzir essa música</string>
|
||||||
<string name="biography_unavailable">Desculpe, mas nós não fomos capazes de encontrar uma biografia para este artista.</string>
|
<string name="biography_unavailable">Desculpe, mas nós não fomos capazes de encontrar uma biografia para este artista.</string>
|
||||||
<string name="biography">Biografia</string>
|
<string name="biography">Biografia</string>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<string name="artists">Artiști</string>
|
<string name="artists">Artiști</string>
|
||||||
<string name="songs">Melodii</string>
|
<string name="songs">Melodii</string>
|
||||||
<string name="playlists">Liste de redare</string>
|
<string name="playlists">Liste de redare</string>
|
||||||
<string name="nothing_playing">Nimic nu este redat</string>
|
<string name="playing_queue_empty">Nimic nu este redat</string>
|
||||||
<string name="unplayable_file">Ne pare rău - a apărut o problemă în încercarea de a reda această melodie.</string>
|
<string name="unplayable_file">Ne pare rău - a apărut o problemă în încercarea de a reda această melodie.</string>
|
||||||
<string name="biography_unavailable">Ne pare rău, nu am putut găsi o biografie potrivită pentru acest artist.</string>
|
<string name="biography_unavailable">Ne pare rău, nu am putut găsi o biografie potrivită pentru acest artist.</string>
|
||||||
<string name="biography">Biografie</string>
|
<string name="biography">Biografie</string>
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
<string name="artists">Исполнители</string>
|
<string name="artists">Исполнители</string>
|
||||||
<string name="songs">Песни</string>
|
<string name="songs">Песни</string>
|
||||||
<string name="playlists">Списки воспроизведения</string>
|
<string name="playlists">Списки воспроизведения</string>
|
||||||
<string name="nothing_playing">Ничего нет для воспроизведения</string>
|
<string name="playing_queue_empty">Ничего нет для воспроизведения</string>
|
||||||
<string name="unplayable_file">Произошла ошибка при попытке проиграть эту песню</string>
|
<string name="unplayable_file">Произошла ошибка при попытке проиграть эту песню</string>
|
||||||
<string name="biography_unavailable">Извините, биография для этого исполнителя не найдена.</string>
|
<string name="biography_unavailable">Извините, биография для этого исполнителя не найдена.</string>
|
||||||
<string name="biography">Биография</string>
|
<string name="biography">Биография</string>
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
<string name="artists">Artister</string>
|
<string name="artists">Artister</string>
|
||||||
<string name="songs">Låtar</string>
|
<string name="songs">Låtar</string>
|
||||||
<string name="playlists">Spellista</string>
|
<string name="playlists">Spellista</string>
|
||||||
<string name="nothing_playing">Ingenting att spela</string>
|
<string name="playing_queue_empty">Ingenting att spela</string>
|
||||||
<string name="unplayable_file">Ursäkta - ett problem uppstod vid spelningen av denna låt</string>
|
<string name="unplayable_file">Ursäkta - ett problem uppstod vid spelningen av denna låt</string>
|
||||||
<string name="biography_unavailable">Ursäkta, vi kunde inte hitta biografin för den här artisten</string>
|
<string name="biography_unavailable">Ursäkta, vi kunde inte hitta biografin för den här artisten</string>
|
||||||
<string name="biography">Biografi</string>
|
<string name="biography">Biografi</string>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<string name="artists">Sanatçılar</string>
|
<string name="artists">Sanatçılar</string>
|
||||||
<string name="songs">Şarkılar</string>
|
<string name="songs">Şarkılar</string>
|
||||||
<string name="playlists">Çalma listeleri</string>
|
<string name="playlists">Çalma listeleri</string>
|
||||||
<string name="nothing_playing">Şu anda çalınan şarkı yok</string>
|
<string name="playing_queue_empty">Şu anda çalınan şarkı yok</string>
|
||||||
<string name="unplayable_file">Bu şarkı oynatılırken bir hata oluştu</string>
|
<string name="unplayable_file">Bu şarkı oynatılırken bir hata oluştu</string>
|
||||||
<string name="biography_unavailable">Bu sanatçı ile ilgili hiçbir biyografi yazısı bulamadık.</string>
|
<string name="biography_unavailable">Bu sanatçı ile ilgili hiçbir biyografi yazısı bulamadık.</string>
|
||||||
<string name="biography">Biyografi</string>
|
<string name="biography">Biyografi</string>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<string name="artists">艺术家</string>
|
<string name="artists">艺术家</string>
|
||||||
<string name="songs">歌曲</string>
|
<string name="songs">歌曲</string>
|
||||||
<string name="playlists">播放列表</string>
|
<string name="playlists">播放列表</string>
|
||||||
<string name="nothing_playing">没有正在播放的曲目</string>
|
<string name="playing_queue_empty">没有正在播放的曲目</string>
|
||||||
<string name="unplayable_file">尝试播放该曲目时发生错误。</string>
|
<string name="unplayable_file">尝试播放该曲目时发生错误。</string>
|
||||||
<string name="biography_unavailable">找不到与该艺术家相匹配的个人简介。</string>
|
<string name="biography_unavailable">找不到与该艺术家相匹配的个人简介。</string>
|
||||||
<string name="biography">歌手简介</string>
|
<string name="biography">歌手简介</string>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<string name="artists">歌手</string>
|
<string name="artists">歌手</string>
|
||||||
<string name="songs">歌曲</string>
|
<string name="songs">歌曲</string>
|
||||||
<string name="playlists">音樂清單</string>
|
<string name="playlists">音樂清單</string>
|
||||||
<string name="nothing_playing">沒有正在播放的歌曲</string>
|
<string name="playing_queue_empty">沒有正在播放的歌曲</string>
|
||||||
<string name="unplayable_file">嘗試播放歌曲時發生錯誤</string>
|
<string name="unplayable_file">嘗試播放歌曲時發生錯誤</string>
|
||||||
<string name="biography_unavailable">無法找到與這位歌手相符的個人簡介</string>
|
<string name="biography_unavailable">無法找到與這位歌手相符的個人簡介</string>
|
||||||
<string name="biography">個人簡介</string>
|
<string name="biography">個人簡介</string>
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@
|
||||||
<string name="artists">Artists</string>
|
<string name="artists">Artists</string>
|
||||||
<string name="songs">Songs</string>
|
<string name="songs">Songs</string>
|
||||||
<string name="playlists">Playlists</string>
|
<string name="playlists">Playlists</string>
|
||||||
|
<string name="playing_queue_empty">Playing queue is empty</string>
|
||||||
<string name="nothing_playing">Nothing is playing</string>
|
<string name="nothing_playing">Nothing is playing</string>
|
||||||
<string name="unplayable_file">An error occurred while attempting to play this song</string>
|
<string name="unplayable_file">An error occurred while attempting to play this song</string>
|
||||||
<string name="biography_unavailable">Could not find a matching biography for this artist</string>
|
<string name="biography_unavailable">Could not find a matching biography for this artist</string>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue