Switched from Picasso to Ion
Much better performance. Not well tested yet but it should work.
This commit is contained in:
parent
c1b258dadd
commit
a11535c8a3
39 changed files with 733 additions and 419 deletions
|
|
@ -50,7 +50,7 @@ dependencies {
|
|||
compile('com.crashlytics.sdk.android:crashlytics:2.2.1@aar') {
|
||||
transitive = true;
|
||||
}
|
||||
compile 'com.afollestad:material-dialogs:0.7.2.1'
|
||||
compile 'com.afollestad:material-dialogs:0.7.2.2'
|
||||
compile 'com.android.support:appcompat-v7:22.0.0'
|
||||
compile 'com.android.support:recyclerview-v7:22.0.0'
|
||||
compile 'com.android.support:gridlayout-v7:22.0.0'
|
||||
|
|
@ -64,11 +64,11 @@ dependencies {
|
|||
compile 'com.melnykov:floatingactionbutton:1.3.0'
|
||||
compile 'com.github.ksoichiro:android-observablescrollview:1.5.0'
|
||||
compile 'com.mcxiaoke.volley:library:1.0.15'
|
||||
compile 'com.squareup.picasso:picasso:2.5.2'
|
||||
compile 'com.squareup:otto:1.3.6'
|
||||
compile 'com.squareup.okhttp:okhttp:2.2.0'
|
||||
compile 'asia.ivity.android:drag-sort-listview:1.0'
|
||||
compile 'de.hdodenhof:circleimageview:1.2.2'
|
||||
compile 'com.jpardogo.materialtabstrip:library:1.0.9'
|
||||
compile 'com.android.support:support-v4:22.0.0'
|
||||
compile 'com.koushikdutta.ion:ion:2.1.3'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
android:allowBackup="true"
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/Theme.MaterialMusic" >
|
||||
android:theme="@style/Theme.MaterialMusic.Light" >
|
||||
<activity
|
||||
android:name=".ui.activities.MainActivity"
|
||||
android:label="@string/app_name" >
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package com.kabouzeid.gramophone.adapter;
|
|||
|
||||
import android.app.Activity;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.graphics.Palette;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
|
|
@ -17,16 +16,19 @@ import com.kabouzeid.gramophone.R;
|
|||
import com.kabouzeid.gramophone.loader.AlbumLoader;
|
||||
import com.kabouzeid.gramophone.model.Album;
|
||||
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.model.UiPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
import com.koushikdutta.async.future.Future;
|
||||
import com.koushikdutta.async.future.FutureCallback;
|
||||
import com.koushikdutta.ion.ImageViewBitmapInfo;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
import com.koushikdutta.ion.bitmap.BitmapInfo;
|
||||
import com.squareup.otto.Subscribe;
|
||||
import com.squareup.picasso.Callback;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -45,36 +47,51 @@ public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder>
|
|||
return new ViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewRecycled(ViewHolder holder) {
|
||||
super.onViewRecycled(holder);
|
||||
Object tag = holder.image.getTag();
|
||||
if (tag instanceof Future) {
|
||||
((Future) tag).cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||
final Album album = dataSet.get(position);
|
||||
|
||||
resetColors(holder.title, holder.artist, holder.footer);
|
||||
Picasso.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(album.id))
|
||||
.placeholder(R.drawable.default_album_art)
|
||||
.into(holder.image, new Callback.EmptyCallback() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
super.onSuccess();
|
||||
if (usePalette) {
|
||||
final Bitmap bitmap = ((BitmapDrawable) holder.image.getDrawable()).getBitmap();
|
||||
if (bitmap != null)
|
||||
applyPalette(bitmap, holder.title, holder.artist, holder.footer);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError() {
|
||||
super.onError();
|
||||
if (usePalette) {
|
||||
paletteBlackAndWhite(holder.title, holder.artist, holder.footer);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
holder.title.setText(album.title);
|
||||
holder.artist.setText(album.artistName);
|
||||
holder.image.setTag(
|
||||
Ion.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(album.id).toString())
|
||||
.withBitmap()
|
||||
.resize(holder.image.getWidth(), holder.image.getHeight())
|
||||
.centerCrop()
|
||||
.intoImageView(holder.image)
|
||||
.withBitmapInfo()
|
||||
.setCallback(new FutureCallback<ImageViewBitmapInfo>() {
|
||||
@Override
|
||||
public void onCompleted(Exception e, ImageViewBitmapInfo result) {
|
||||
if(result != null){
|
||||
BitmapInfo info = result.getBitmapInfo();
|
||||
if(info != null){
|
||||
Bitmap bitmap = info.bitmap;
|
||||
if (bitmap != null) {
|
||||
if (usePalette)
|
||||
applyPalette(bitmap, holder.title, holder.artist, holder.footer);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
holder.image.setImageResource(R.drawable.default_album_art);
|
||||
if (usePalette)
|
||||
paletteBlackAndWhite(holder.title, holder.artist, holder.footer);
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -173,9 +190,9 @@ public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder>
|
|||
}
|
||||
|
||||
@Subscribe
|
||||
public void onUIChangeEvent(UIPreferenceChangedEvent event) {
|
||||
public void onUIChangeEvent(UiPreferenceChangedEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case UIPreferenceChangedEvent.ALBUM_OVERVIEW_PALETTE_CHANGED:
|
||||
case UiPreferenceChangedEvent.ALBUM_OVERVIEW_PALETTE_CHANGED:
|
||||
usePalette = (boolean) event.getValue();
|
||||
notifyDataSetChanged();
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.kabouzeid.gramophone.adapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.graphics.Bitmap;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
|
|
@ -17,8 +18,9 @@ import com.kabouzeid.gramophone.model.Artist;
|
|||
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.koushikdutta.async.future.FutureCallback;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
import com.squareup.otto.Subscribe;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -54,12 +56,20 @@ public class ArtistAdapter extends RecyclerView.Adapter<ArtistAdapter.ViewHolder
|
|||
|
||||
LastFMArtistThumbnailUrlLoader.loadArtistThumbnailUrl(activity, artist.name, false, new LastFMArtistThumbnailUrlLoader.ArtistThumbnailUrlLoaderCallback() {
|
||||
@Override
|
||||
public void onArtistThumbnailUrlLoaded(String url) {
|
||||
Picasso.with(activity)
|
||||
public void onArtistThumbnailUrlLoaded(final String url) {
|
||||
Ion.with(activity)
|
||||
.load(url)
|
||||
.noFade()
|
||||
.placeholder(R.drawable.default_artist_image)
|
||||
.into(holder.artistImage);
|
||||
.asBitmap()
|
||||
.setCallback(new FutureCallback<Bitmap>() {
|
||||
@Override
|
||||
public void onCompleted(Exception e, Bitmap result) {
|
||||
if (result != null)
|
||||
holder.artistImage.setImageBitmap(result);
|
||||
else {
|
||||
holder.artistImage.setImageResource(R.drawable.default_artist_image);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import com.kabouzeid.gramophone.model.Album;
|
|||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -48,10 +48,13 @@ public class ArtistAlbumAdapter extends RecyclerView.Adapter<ArtistAlbumAdapter.
|
|||
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||
final Album album = dataSet.get(position);
|
||||
|
||||
Picasso.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(album.id))
|
||||
.placeholder(R.drawable.default_album_art)
|
||||
.into(holder.image);
|
||||
Ion.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(album.id).toString())
|
||||
.withBitmap()
|
||||
.resize(holder.albumArt.getWidth(), holder.albumArt.getHeight())
|
||||
.centerCrop()
|
||||
.error(R.drawable.default_album_art)
|
||||
.intoImageView(holder.albumArt);
|
||||
|
||||
holder.title.setText(album.title);
|
||||
holder.year.setText(String.valueOf(album.year));
|
||||
|
|
@ -72,13 +75,13 @@ public class ArtistAlbumAdapter extends RecyclerView.Adapter<ArtistAlbumAdapter.
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
ImageView image;
|
||||
ImageView albumArt;
|
||||
TextView title;
|
||||
TextView year;
|
||||
|
||||
public ViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
image = (ImageView) itemView.findViewById(R.id.album_art);
|
||||
albumArt = (ImageView) itemView.findViewById(R.id.album_art);
|
||||
title = (TextView) itemView.findViewById(R.id.album_title);
|
||||
year = (TextView) itemView.findViewById(R.id.album_year);
|
||||
itemView.setOnClickListener(this);
|
||||
|
|
@ -87,12 +90,12 @@ public class ArtistAlbumAdapter extends RecyclerView.Adapter<ArtistAlbumAdapter.
|
|||
@Override
|
||||
public void onClick(View v) {
|
||||
Pair[] albumPairs = new Pair[]{
|
||||
Pair.create(image,
|
||||
Pair.create(albumArt,
|
||||
activity.getResources().getString(R.string.transition_album_cover)
|
||||
)};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, dataSet.get(getPosition()).id, albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).id, albumPairs);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
|
|
@ -11,24 +10,15 @@ import android.widget.ArrayAdapter;
|
|||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.helper.AddToPlaylistDialogHelper;
|
||||
import com.kabouzeid.gramophone.helper.DeleteSongsDialogHelper;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.SongDetailDialogHelper;
|
||||
import com.kabouzeid.gramophone.loader.SongFilePathLoader;
|
||||
import com.kabouzeid.gramophone.misc.AppKeys;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
|
@ -56,10 +46,13 @@ public class ArtistSongAdapter extends ArrayAdapter<Song> {
|
|||
songTitle.setText(song.title);
|
||||
songInfo.setText(song.albumName);
|
||||
|
||||
Picasso.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId))
|
||||
.placeholder(R.drawable.default_album_art)
|
||||
.into(albumArt);
|
||||
Ion.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId).toString())
|
||||
.withBitmap()
|
||||
.resize(albumArt.getWidth(), albumArt.getHeight())
|
||||
.centerCrop()
|
||||
.error(R.drawable.default_album_art)
|
||||
.intoImageView(albumArt);
|
||||
|
||||
final ImageView overflowButton = (ImageView) convertView.findViewById(R.id.menu);
|
||||
overflowButton.setOnClickListener(new View.OnClickListener() {
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
|||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -43,6 +43,11 @@ public class PlaylistSongAdapter extends RecyclerView.Adapter<PlaylistSongAdapte
|
|||
return new ViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewRecycled(ViewHolder holder) {
|
||||
super.onViewRecycled(holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||
final Song song = dataSet.get(position);
|
||||
|
|
@ -50,10 +55,15 @@ public class PlaylistSongAdapter extends RecyclerView.Adapter<PlaylistSongAdapte
|
|||
holder.songTitle.setText(song.title);
|
||||
holder.songInfo.setText(song.artistName);
|
||||
|
||||
Picasso.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId))
|
||||
.placeholder(R.drawable.default_album_art)
|
||||
.into(holder.albumArt);
|
||||
holder.albumArt.setTag(
|
||||
Ion.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId).toString())
|
||||
.withBitmap()
|
||||
.resize(holder.albumArt.getWidth(), holder.albumArt.getHeight())
|
||||
.centerCrop()
|
||||
.error(R.drawable.default_album_art)
|
||||
.intoImageView(holder.albumArt)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Typeface;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
|
|
@ -15,25 +14,18 @@ import android.widget.TextView;
|
|||
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.helper.AddToPlaylistDialogHelper;
|
||||
import com.kabouzeid.gramophone.helper.DeleteSongsDialogHelper;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.SongDetailDialogHelper;
|
||||
import com.kabouzeid.gramophone.loader.SongFilePathLoader;
|
||||
import com.kabouzeid.gramophone.loader.SongLoader;
|
||||
import com.kabouzeid.gramophone.misc.AppKeys;
|
||||
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
import com.squareup.otto.Subscribe;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
|
@ -75,10 +67,13 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
|
|||
holder.songTitle.setText(song.title);
|
||||
holder.songInfo.setText(song.artistName);
|
||||
|
||||
Picasso.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId))
|
||||
.placeholder(R.drawable.default_album_art)
|
||||
.into(holder.albumArt);
|
||||
Ion.with(activity)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId).toString())
|
||||
.withBitmap()
|
||||
.resize(holder.albumArt.getWidth(), holder.albumArt.getHeight())
|
||||
.centerCrop()
|
||||
.error(R.drawable.default_album_art)
|
||||
.intoImageView(holder.albumArt);
|
||||
} else {
|
||||
int accentColor = Util.resolveColor(activity, R.attr.colorAccent);
|
||||
holder.songTitle.setText(activity.getResources().getString(R.string.shuffle_all).toUpperCase());
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import android.appwidget.AppWidgetProvider;
|
|||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.graphics.Bitmap;
|
||||
import android.widget.RemoteViews;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
|
|
@ -15,41 +15,73 @@ import com.kabouzeid.gramophone.model.Song;
|
|||
import com.kabouzeid.gramophone.service.MusicService;
|
||||
import com.kabouzeid.gramophone.ui.activities.MusicControllerActivity;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.koushikdutta.async.future.Future;
|
||||
import com.koushikdutta.async.future.FutureCallback;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
|
||||
/**
|
||||
* Implementation of App Widget functionality.
|
||||
*/
|
||||
public class MusicPlayerWidget extends AppWidgetProvider {
|
||||
private static RemoteViews widgetLayout;
|
||||
private static Future albumArtTask;
|
||||
|
||||
@Override
|
||||
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
|
||||
update(context, appWidgetManager, appWidgetIds);
|
||||
updateWidgets(context, MusicPlayerRemote.getCurrentSong(), MusicPlayerRemote.isPlaying());
|
||||
for (int widgetId : appWidgetIds) {
|
||||
appWidgetManager.updateAppWidget(widgetId, widgetLayout);
|
||||
}
|
||||
}
|
||||
|
||||
public static void update(Context context, AppWidgetManager manager, int[] ids) {
|
||||
final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.music_player_widget);
|
||||
linkButtons(context, views);
|
||||
final Song song = MusicPlayerRemote.getCurrentSong();
|
||||
|
||||
public static void updateWidgets(final Context context, final Song song, boolean isPlaying) {
|
||||
widgetLayout = new RemoteViews(context.getPackageName(), R.layout.music_player_widget);
|
||||
linkButtons(context, widgetLayout);
|
||||
if (song.id != -1) {
|
||||
views.setTextViewText(R.id.song_title, song.title);
|
||||
widgetLayout.setTextViewText(R.id.song_title, song.title);
|
||||
}
|
||||
updateWidgetsPlayState(context, isPlaying);
|
||||
loadAlbumArt(context, song);
|
||||
}
|
||||
|
||||
Picasso.with(context)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId))
|
||||
.error(R.drawable.default_album_art)
|
||||
.into(views, R.id.album_art, ids);
|
||||
|
||||
int playPauseRes = MusicPlayerRemote.isPlaying() ? R.drawable.ic_pause_black_36dp : R.drawable.ic_play_arrow_black_36dp;
|
||||
views.setImageViewResource(R.id.button_toggle_play_pause, playPauseRes);
|
||||
public static void updateWidgetsPlayState(final Context context, boolean isPlaying) {
|
||||
if (widgetLayout == null)
|
||||
widgetLayout = new RemoteViews(context.getPackageName(), R.layout.music_player_widget);
|
||||
int playPauseRes = isPlaying ? R.drawable.ic_pause_black_36dp : R.drawable.ic_play_arrow_black_36dp;
|
||||
widgetLayout.setImageViewResource(R.id.button_toggle_play_pause, playPauseRes);
|
||||
updateWidgets(context);
|
||||
}
|
||||
|
||||
private static void updateWidgets(final Context context) {
|
||||
AppWidgetManager man = AppWidgetManager.getInstance(context);
|
||||
int[] ids = man.getAppWidgetIds(
|
||||
new ComponentName(context, MusicPlayerWidget.class));
|
||||
for (int widgetId : ids) {
|
||||
manager.updateAppWidget(widgetId, views);
|
||||
man.updateAppWidget(widgetId, widgetLayout);
|
||||
}
|
||||
}
|
||||
|
||||
private static void loadAlbumArt(final Context context, final Song song) {
|
||||
if (albumArtTask != null) albumArtTask.cancel();
|
||||
albumArtTask = Ion.with(context)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId).toString())
|
||||
.asBitmap()
|
||||
.setCallback(new FutureCallback<Bitmap>() {
|
||||
@Override
|
||||
public void onCompleted(Exception e, Bitmap result) {
|
||||
if (result != null) setAlbumArt(context, result);
|
||||
else resetAlbumArt(context);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void resetAlbumArt(final Context context) {
|
||||
widgetLayout.setImageViewResource(R.id.album_art, R.drawable.default_album_art);
|
||||
updateWidgets(context);
|
||||
}
|
||||
|
||||
private static void setAlbumArt(final Context context, final Bitmap albumArt) {
|
||||
widgetLayout.setImageViewBitmap(R.id.album_art, albumArt);
|
||||
updateWidgets(context);
|
||||
}
|
||||
|
||||
private static void linkButtons(final Context context, final RemoteViews views) {
|
||||
views.setOnClickPendingIntent(R.id.album_art, retrievePlaybackActions(context, 0));
|
||||
views.setOnClickPendingIntent(R.id.button_toggle_play_pause, retrievePlaybackActions(context, 1));
|
||||
|
|
@ -84,13 +116,6 @@ public class MusicPlayerWidget extends AppWidgetProvider {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void updateWidgets(Context context) {
|
||||
AppWidgetManager man = AppWidgetManager.getInstance(context);
|
||||
int[] ids = man.getAppWidgetIds(
|
||||
new ComponentName(context, MusicPlayerWidget.class));
|
||||
update(context, man, ids);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import android.app.TaskStackBuilder;
|
|||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.widget.RemoteViews;
|
||||
|
||||
|
|
@ -19,7 +20,9 @@ import com.kabouzeid.gramophone.model.Song;
|
|||
import com.kabouzeid.gramophone.service.MusicService;
|
||||
import com.kabouzeid.gramophone.ui.activities.MusicControllerActivity;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.koushikdutta.async.future.Future;
|
||||
import com.koushikdutta.async.future.FutureCallback;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
|
||||
public class PlayingNotificationHelper {
|
||||
public static final String TAG = PlayingNotificationHelper.class.getSimpleName();
|
||||
|
|
@ -33,6 +36,8 @@ public class PlayingNotificationHelper {
|
|||
private RemoteViews notificationLayout;
|
||||
private RemoteViews notificationLayoutExpanded;
|
||||
|
||||
private Future albumArtTask;
|
||||
|
||||
public PlayingNotificationHelper(final MusicService service) {
|
||||
this.service = service;
|
||||
notificationManager = (NotificationManager) service
|
||||
|
|
@ -146,15 +151,17 @@ public class PlayingNotificationHelper {
|
|||
}
|
||||
|
||||
private void loadAlbumArt(final Song song) {
|
||||
resetAlbumArt();
|
||||
Picasso.with(service)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId))
|
||||
.error(R.drawable.default_album_art)
|
||||
.into(notificationLayoutExpanded, R.id.album_art, NOTIFICATION_ID, notification);
|
||||
Picasso.with(service)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId))
|
||||
.error(R.drawable.default_album_art)
|
||||
.into(notificationLayout, R.id.album_art, NOTIFICATION_ID, notification);
|
||||
if (albumArtTask != null) albumArtTask.cancel();
|
||||
albumArtTask = Ion.with(service)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId).toString())
|
||||
.asBitmap()
|
||||
.setCallback(new FutureCallback<Bitmap>() {
|
||||
@Override
|
||||
public void onCompleted(Exception e, Bitmap result) {
|
||||
if (result != null) setAlbumArt(result);
|
||||
else resetAlbumArt();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void resetAlbumArt() {
|
||||
|
|
@ -163,7 +170,11 @@ public class PlayingNotificationHelper {
|
|||
notificationManager.notify(NOTIFICATION_ID, notification);
|
||||
}
|
||||
|
||||
;
|
||||
private void setAlbumArt(Bitmap albumArt) {
|
||||
notificationLayout.setImageViewBitmap(R.id.album_art, albumArt);
|
||||
notificationLayoutExpanded.setImageViewBitmap(R.id.album_art, albumArt);
|
||||
notificationManager.notify(NOTIFICATION_ID, notification);
|
||||
}
|
||||
|
||||
public void killNotification() {
|
||||
service.stopForeground(true);
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import android.widget.ImageView;
|
|||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
|
||||
/**
|
||||
* Created by karim on 22.11.14.
|
||||
|
|
@ -48,11 +48,19 @@ public class Album implements SearchEntry {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void loadImage(Context context, ImageView imageView) {
|
||||
public void loadImage(final Context context, final ImageView imageView) {
|
||||
imageView.setImageResource(R.drawable.default_album_art);
|
||||
Picasso.with(context)
|
||||
.load(MusicUtil.getAlbumArtUri(id))
|
||||
.placeholder(R.drawable.default_album_art)
|
||||
.into(imageView);
|
||||
imageView.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Ion.with(context)
|
||||
.load(MusicUtil.getAlbumArtUri(id).toString())
|
||||
.withBitmap()
|
||||
.resize(imageView.getWidth(), imageView.getHeight())
|
||||
.centerCrop()
|
||||
.error(R.drawable.default_album_art)
|
||||
.intoImageView(imageView);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import android.widget.ImageView;
|
|||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.lastfm.artist.LastFMArtistThumbnailUrlLoader;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
|
||||
/**
|
||||
* Created by karim on 29.12.14.
|
||||
|
|
@ -45,10 +45,19 @@ public class Artist implements SearchEntry {
|
|||
imageView.setImageResource(R.drawable.default_artist_image);
|
||||
LastFMArtistThumbnailUrlLoader.loadArtistThumbnailUrl(context, name, false, new LastFMArtistThumbnailUrlLoader.ArtistThumbnailUrlLoaderCallback() {
|
||||
@Override
|
||||
public void onArtistThumbnailUrlLoaded(String url) {
|
||||
Picasso.with(context)
|
||||
.load(url)
|
||||
.into(imageView);
|
||||
public void onArtistThumbnailUrlLoaded(final String url) {
|
||||
imageView.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Ion.with(context)
|
||||
.load(url)
|
||||
.withBitmap()
|
||||
.resize(imageView.getWidth(), imageView.getHeight())
|
||||
.centerCrop()
|
||||
.error(R.drawable.default_artist_image)
|
||||
.intoImageView(imageView);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package com.kabouzeid.gramophone.model;
|
|||
/**
|
||||
* Created by karim on 28.03.15.
|
||||
*/
|
||||
public class UIPreferenceChangedEvent {
|
||||
public class UiPreferenceChangedEvent {
|
||||
public static final int THEME_CHANGED = 0;
|
||||
public static final int ALBUM_OVERVIEW_PALETTE_CHANGED = 1;
|
||||
public static final int COLORED_NAVIGATION_BAR_ARTIST_CHANGED = 2;
|
||||
|
|
@ -14,7 +14,7 @@ public class UIPreferenceChangedEvent {
|
|||
private int action;
|
||||
private Object value;
|
||||
|
||||
public UIPreferenceChangedEvent(int action, Object value) {
|
||||
public UiPreferenceChangedEvent(int action, Object value) {
|
||||
this.action = action;
|
||||
this.value = value;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import android.content.Context;
|
|||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.media.AudioManager;
|
||||
import android.media.MediaMetadataRetriever;
|
||||
import android.media.MediaPlayer;
|
||||
|
|
@ -33,8 +32,9 @@ import com.kabouzeid.gramophone.model.MusicRemoteEvent;
|
|||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.util.InternalStorageUtil;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.squareup.picasso.Target;
|
||||
import com.koushikdutta.async.future.Future;
|
||||
import com.koushikdutta.async.future.FutureCallback;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -80,6 +80,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
private PlayingNotificationHelper playingNotificationHelper;
|
||||
private AudioManager audioManager;
|
||||
private RemoteControlClient remoteControlClient;
|
||||
private Future remoteControlClientAlbumArtTask;
|
||||
|
||||
public MusicService() {
|
||||
}
|
||||
|
|
@ -215,7 +216,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
player = null;
|
||||
}
|
||||
playingNotificationHelper.updatePlayState(isPlaying());
|
||||
MusicPlayerWidget.updateWidgets(this);
|
||||
MusicPlayerWidget.updateWidgetsPlayState(this, isPlaying());
|
||||
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_STOPPED);
|
||||
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.STOP);
|
||||
}
|
||||
|
|
@ -265,7 +266,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
if (isLastTrack() && getRepeatMode() == REPEAT_MODE_NONE) {
|
||||
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.QUEUE_COMPLETED);
|
||||
playingNotificationHelper.updatePlayState(isPlaying());
|
||||
MusicPlayerWidget.updateWidgets(this);
|
||||
MusicPlayerWidget.updateWidgetsPlayState(this, isPlaying());
|
||||
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_STOPPED);
|
||||
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.STOP);
|
||||
} else {
|
||||
|
|
@ -293,10 +294,6 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
try {
|
||||
Uri trackUri = getCurrentPositionTrackUri();
|
||||
player.setDataSource(getApplicationContext(), trackUri);
|
||||
currentSongId = playingQueue.get(getPosition()).id;
|
||||
updateNotification();
|
||||
MusicPlayerWidget.updateWidgets(this);
|
||||
updateRemoteControlClient();
|
||||
player.prepareAsync();
|
||||
} catch (Exception e) {
|
||||
Log.e("MUSIC SERVICE", "Error setting data source", e);
|
||||
|
|
@ -305,14 +302,16 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
Toast.makeText(getApplicationContext(), getResources().getString(R.string.unplayable_file), Toast.LENGTH_SHORT).show();
|
||||
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.STOP);
|
||||
playingNotificationHelper.updatePlayState(false);
|
||||
MusicPlayerWidget.updateWidgets(this);
|
||||
MusicPlayerWidget.updateWidgetsPlayState(this, false);
|
||||
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_STOPPED);
|
||||
try {
|
||||
updateNotification();
|
||||
updateRemoteControlClient();
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
updateNotification();
|
||||
updateRemoteControlClient();
|
||||
return;
|
||||
}
|
||||
currentSongId = playingQueue.get(getPosition()).id;
|
||||
updateNotification();
|
||||
updateWidgets();
|
||||
updateRemoteControlClient();
|
||||
}
|
||||
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.TRACK_CHANGED);
|
||||
}
|
||||
|
|
@ -348,29 +347,19 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, song.title)
|
||||
.putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, song.duration)
|
||||
.apply();
|
||||
Picasso.with(this)
|
||||
.cancelRequest(remoteAlbumArt);
|
||||
Picasso.with(this)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId))
|
||||
.into(remoteAlbumArt);
|
||||
|
||||
if (remoteControlClientAlbumArtTask != null) remoteControlClientAlbumArtTask.cancel();
|
||||
remoteControlClientAlbumArtTask = Ion.with(this)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId).toString())
|
||||
.asBitmap()
|
||||
.setCallback(new FutureCallback<Bitmap>() {
|
||||
@Override
|
||||
public void onCompleted(Exception e, Bitmap result) {
|
||||
updateRemoteControlClientBitmap(result);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private Target remoteAlbumArt = new Target() {
|
||||
@Override
|
||||
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
|
||||
updateRemoteControlClientBitmap(bitmap.copy(bitmap.getConfig(), true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBitmapFailed(Drawable errorDrawable) {
|
||||
updateRemoteControlClientBitmap(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrepareLoad(Drawable placeHolderDrawable) {
|
||||
}
|
||||
};
|
||||
|
||||
private void updateRemoteControlClientBitmap(final Bitmap albumArt) {
|
||||
remoteControlClient
|
||||
.editMetadata(false)
|
||||
|
|
@ -395,6 +384,10 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
playingNotificationHelper.buildNotification(playingQueue.get(position), isPlaying());
|
||||
}
|
||||
|
||||
private void updateWidgets(){
|
||||
MusicPlayerWidget.updateWidgets(this, playingQueue.get(position), isPlaying());
|
||||
}
|
||||
|
||||
private Uri getCurrentPositionTrackUri() {
|
||||
return ContentUris.withAppendedId(android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, playingQueue.get(position).id);
|
||||
}
|
||||
|
|
@ -469,7 +462,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
isPlayerPrepared = true;
|
||||
openAudioEffectSession();
|
||||
playingNotificationHelper.updatePlayState(isPlaying());
|
||||
MusicPlayerWidget.updateWidgets(this);
|
||||
MusicPlayerWidget.updateWidgetsPlayState(this, isPlaying());
|
||||
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING);
|
||||
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.PLAY);
|
||||
savePosition();
|
||||
|
|
@ -632,7 +625,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
if (isPlaying()) {
|
||||
player.pause();
|
||||
playingNotificationHelper.updatePlayState(isPlaying());
|
||||
MusicPlayerWidget.updateWidgets(this);
|
||||
MusicPlayerWidget.updateWidgetsPlayState(this, isPlaying());
|
||||
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PAUSED);
|
||||
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.PAUSE);
|
||||
}
|
||||
|
|
@ -644,7 +637,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
if (isPlayerPrepared) {
|
||||
player.start();
|
||||
playingNotificationHelper.updatePlayState(isPlaying());
|
||||
MusicPlayerWidget.updateWidgets(this);
|
||||
MusicPlayerWidget.updateWidgetsPlayState(this, isPlaying());
|
||||
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING);
|
||||
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.RESUME);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import android.annotation.TargetApi;
|
|||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.util.Pair;
|
||||
|
|
@ -16,7 +15,6 @@ import android.view.MenuItem;
|
|||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView;
|
||||
import com.kabouzeid.gramophone.App;
|
||||
|
|
@ -30,7 +28,7 @@ import com.kabouzeid.gramophone.misc.AppKeys;
|
|||
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
|
||||
import com.kabouzeid.gramophone.model.Album;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.model.UiPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
|
|
@ -38,10 +36,10 @@ import com.kabouzeid.gramophone.util.NavigationUtil;
|
|||
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
import com.koushikdutta.async.future.FutureCallback;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
import com.nineoldandroids.view.ViewHelper;
|
||||
import com.squareup.otto.Subscribe;
|
||||
import com.squareup.picasso.Callback;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -112,7 +110,8 @@ public class AlbumDetailActivity extends AbsFabActivity {
|
|||
App.bus.register(this);
|
||||
|
||||
if (Util.hasLollipopSDK()) postponeEnterTransition();
|
||||
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarAlbumEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
|
||||
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarAlbumEnabled())
|
||||
getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
|
||||
|
||||
Bundle intentExtras = getIntent().getExtras();
|
||||
int albumId = -1;
|
||||
|
|
@ -128,8 +127,6 @@ public class AlbumDetailActivity extends AbsFabActivity {
|
|||
setUpObservableListViewParams();
|
||||
setUpToolBar();
|
||||
setUpViews();
|
||||
|
||||
if (Util.hasLollipopSDK()) startPostponedEnterTransition();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -157,28 +154,37 @@ public class AlbumDetailActivity extends AbsFabActivity {
|
|||
|
||||
private void setUpViews() {
|
||||
albumTitleView.setText(album.title);
|
||||
|
||||
ViewUtil.addOnGlobalLayoutListener(albumArtImageView, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
setUpAlbumArtAndApplyPalette();
|
||||
}
|
||||
});
|
||||
setUpListView();
|
||||
setUpSongsAdapter();
|
||||
setUpAlbumArtAndApplyPalette();
|
||||
}
|
||||
|
||||
private void setUpAlbumArtAndApplyPalette() {
|
||||
Picasso.with(this).load(MusicUtil.getAlbumArtUri(album.id))
|
||||
.placeholder(R.drawable.default_album_art)
|
||||
.into(albumArtImageView, new Callback.EmptyCallback() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
super.onSuccess();
|
||||
final Bitmap bitmap = ((BitmapDrawable) albumArtImageView.getDrawable()).getBitmap();
|
||||
if (bitmap != null) applyPalette(bitmap);
|
||||
}
|
||||
});
|
||||
albumArtImageView.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Ion.with(AlbumDetailActivity.this)
|
||||
.load(MusicUtil.getAlbumArtUri(album.id).toString())
|
||||
.noCache()
|
||||
.withBitmap()
|
||||
.resize(albumArtImageView.getWidth(), albumArtImageView.getHeight())
|
||||
.centerCrop()
|
||||
.asBitmap()
|
||||
.setCallback(new FutureCallback<Bitmap>() {
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
@Override
|
||||
public void onCompleted(Exception e, Bitmap result) {
|
||||
if (result != null) {
|
||||
albumArtImageView.setImageBitmap(result);
|
||||
applyPalette(result);
|
||||
} else {
|
||||
albumArtImageView.setImageResource(R.drawable.default_album_art);
|
||||
}
|
||||
if (Util.hasLollipopSDK()) startPostponedEnterTransition();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void applyPalette(Bitmap bitmap) {
|
||||
|
|
@ -199,8 +205,8 @@ public class AlbumDetailActivity extends AbsFabActivity {
|
|||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
private void setNavigationBarColored(boolean colored){
|
||||
if (colored){
|
||||
private void setNavigationBarColored(boolean colored) {
|
||||
if (colored) {
|
||||
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(toolbarColor);
|
||||
} else {
|
||||
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(Color.BLACK);
|
||||
|
|
@ -216,8 +222,8 @@ public class AlbumDetailActivity extends AbsFabActivity {
|
|||
public void run() {
|
||||
songsBackgroundView.getLayoutParams().height = contentView.getHeight();
|
||||
observableScrollViewCallbacks.onScrollChanged(-(albumArtViewHeight + titleViewHeight), false, false);
|
||||
recyclerView.scrollBy(0,1);
|
||||
recyclerView.scrollBy(0,-1);
|
||||
recyclerView.scrollBy(0, 1);
|
||||
recyclerView.scrollBy(0, -1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -291,9 +297,10 @@ public class AlbumDetailActivity extends AbsFabActivity {
|
|||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Subscribe public void onUIPreferenceChanged(UIPreferenceChangedEvent event){
|
||||
switch (event.getAction()){
|
||||
case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ALBUM_CHANGED:
|
||||
@Subscribe
|
||||
public void onUIPreferenceChanged(UiPreferenceChangedEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case UiPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ALBUM_CHANGED:
|
||||
setNavigationBarColored((boolean) event.getValue());
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package com.kabouzeid.gramophone.ui.activities;
|
|||
import android.annotation.TargetApi;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.graphics.Palette;
|
||||
|
|
@ -39,16 +38,16 @@ import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
|
|||
import com.kabouzeid.gramophone.model.Album;
|
||||
import com.kabouzeid.gramophone.model.Artist;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.model.UiPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
import com.koushikdutta.async.future.FutureCallback;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
import com.nineoldandroids.view.ViewHelper;
|
||||
import com.squareup.otto.Subscribe;
|
||||
import com.squareup.picasso.Callback;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -70,7 +69,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
|
||||
private ObservableListView songListView;
|
||||
private View statusBar;
|
||||
private ImageView artistIv;
|
||||
private ImageView artistImage;
|
||||
private View songsBackgroundView;
|
||||
private TextView artistNameTv;
|
||||
private Toolbar toolbar;
|
||||
|
|
@ -93,7 +92,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
float flexibleRange = artistImageViewHeight - headerOffset;
|
||||
|
||||
// Translate album cover
|
||||
ViewHelper.setTranslationY(artistIv, Math.max(-artistImageViewHeight, -scrollY / 2));
|
||||
ViewHelper.setTranslationY(artistImage, Math.max(-artistImageViewHeight, -scrollY / 2));
|
||||
|
||||
// Translate list background
|
||||
ViewHelper.setTranslationY(songsBackgroundView, Math.max(0, -scrollY + artistImageViewHeight));
|
||||
|
|
@ -127,7 +126,8 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
App.bus.register(this);
|
||||
|
||||
if (Util.hasLollipopSDK()) postponeEnterTransition();
|
||||
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
|
||||
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled())
|
||||
getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
|
||||
|
||||
getIntentExtras();
|
||||
initViews();
|
||||
|
|
@ -140,7 +140,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
}
|
||||
|
||||
private void initViews() {
|
||||
artistIv = (ImageView) findViewById(R.id.artist_image);
|
||||
artistImage = (ImageView) findViewById(R.id.artist_image);
|
||||
toolbar = (Toolbar) findViewById(R.id.toolbar);
|
||||
songListView = (ObservableListView) findViewById(R.id.list);
|
||||
artistNameTv = (TextView) findViewById(R.id.artist_name);
|
||||
|
|
@ -168,7 +168,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
private void setUpViews() {
|
||||
artistNameTv.setText(artist.name);
|
||||
|
||||
ViewUtil.addOnGlobalLayoutListener(artistIv, new Runnable() {
|
||||
ViewUtil.addOnGlobalLayoutListener(artistImage, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
setUpArtistImageAndApplyPalette(false);
|
||||
|
|
@ -180,8 +180,8 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
private void setNavigationBarColored(boolean colored){
|
||||
if (colored){
|
||||
private void setNavigationBarColored(boolean colored) {
|
||||
if (colored) {
|
||||
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(toolbarColor);
|
||||
} else {
|
||||
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(Color.BLACK);
|
||||
|
|
@ -248,18 +248,30 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
private void setUpArtistImageAndApplyPalette(final boolean forceDownload) {
|
||||
LastFMArtistImageUrlLoader.loadArtistImageUrl(this, artist.name, forceDownload, new LastFMArtistImageUrlLoader.ArtistImageUrlLoaderCallback() {
|
||||
@Override
|
||||
public void onArtistImageUrlLoaded(String url) {
|
||||
Picasso.with(ArtistDetailActivity.this)
|
||||
.load(url)
|
||||
.placeholder(R.drawable.default_artist_image)
|
||||
.into(artistIv, new Callback.EmptyCallback() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
super.onSuccess();
|
||||
final Bitmap bitmap = ((BitmapDrawable) artistIv.getDrawable()).getBitmap();
|
||||
if (bitmap != null) applyPalette(bitmap);
|
||||
}
|
||||
});
|
||||
public void onArtistImageUrlLoaded(final String url) {
|
||||
artistImage.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Ion.with(ArtistDetailActivity.this)
|
||||
.load(url)
|
||||
.withBitmap()
|
||||
.resize(artistImage.getWidth(), artistImage.getHeight())
|
||||
.centerCrop()
|
||||
.asBitmap()
|
||||
.setCallback(new FutureCallback<Bitmap>() {
|
||||
@Override
|
||||
public void onCompleted(Exception e, Bitmap result) {
|
||||
if (result != null) {
|
||||
artistImage.setImageBitmap(result);
|
||||
applyPalette(result);
|
||||
} else {
|
||||
artistImage.setImageResource(R.drawable.default_artist_image);
|
||||
resetColors();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -277,14 +289,14 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(ArtistDetailActivity.this).coloredNavigationBarArtistEnabled())
|
||||
getWindow().setNavigationBarColor(swatch.getRgb());
|
||||
} else {
|
||||
setStandardColors();
|
||||
resetColors();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
private void setStandardColors() {
|
||||
private void resetColors() {
|
||||
int titleTextColor = Util.resolveColor(this, R.attr.title_text_color);
|
||||
int defaultBarColor = Util.resolveColor(this, R.attr.default_bar_color);
|
||||
|
||||
|
|
@ -292,7 +304,8 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
artistNameTv.setBackgroundColor(defaultBarColor);
|
||||
artistNameTv.setTextColor(titleTextColor);
|
||||
|
||||
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
|
||||
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled())
|
||||
getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
|
||||
}
|
||||
|
||||
private void setUpToolBar() {
|
||||
|
|
@ -398,9 +411,9 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
}
|
||||
|
||||
@Subscribe
|
||||
public void onUIPreferenceChanged(UIPreferenceChangedEvent event){
|
||||
switch (event.getAction()){
|
||||
case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ARTIST_CHANGED:
|
||||
public void onUIPreferenceChanged(UiPreferenceChangedEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case UiPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ARTIST_CHANGED:
|
||||
setNavigationBarColored((boolean) event.getValue());
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ import com.kabouzeid.gramophone.loader.ArtistSongLoader;
|
|||
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
||||
import com.kabouzeid.gramophone.model.MusicRemoteEvent;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.model.UiPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.ui.fragments.NavigationDrawerFragment;
|
||||
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment;
|
||||
|
|
@ -42,7 +42,7 @@ import com.kabouzeid.gramophone.util.NavigationUtil;
|
|||
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -174,11 +174,12 @@ public class MainActivity extends AbsFabActivity
|
|||
if (navigationDrawerFragment != null) {
|
||||
Song song = MusicPlayerRemote.getCurrentSong();
|
||||
if (song.id != -1) {
|
||||
Picasso.with(this)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId))
|
||||
.error(R.drawable.default_album_art)
|
||||
.placeholder(R.drawable.default_album_art)
|
||||
.into(navigationDrawerFragment.getAlbumArtImageView());
|
||||
Ion.with(this)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId).toString())
|
||||
.withBitmap()
|
||||
.resize(navigationDrawerFragment.getAlbumArtImageView().getWidth(), navigationDrawerFragment.getAlbumArtImageView().getHeight())
|
||||
.centerCrop()
|
||||
.intoImageView(navigationDrawerFragment.getAlbumArtImageView());
|
||||
navigationDrawerFragment.getSongTitle().setText(song.title);
|
||||
navigationDrawerFragment.getSongArtist().setText(song.artistName);
|
||||
}
|
||||
|
|
@ -295,10 +296,10 @@ public class MainActivity extends AbsFabActivity
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) {
|
||||
public void onUIPreferenceChangedEvent(UiPreferenceChangedEvent event) {
|
||||
super.onUIPreferenceChangedEvent(event);
|
||||
switch (event.getAction()) {
|
||||
case UIPreferenceChangedEvent.TOOLBAR_TRANSPARENT_CHANGED:
|
||||
case UiPreferenceChangedEvent.TOOLBAR_TRANSPARENT_CHANGED:
|
||||
setToolBarTransparent((boolean) event.getValue());
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,12 +3,11 @@ package com.kabouzeid.gramophone.ui.activities;
|
|||
import android.annotation.TargetApi;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.graphics.Palette;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
|
@ -30,7 +29,7 @@ import com.kabouzeid.gramophone.loader.SongFilePathLoader;
|
|||
import com.kabouzeid.gramophone.misc.AppKeys;
|
||||
import com.kabouzeid.gramophone.model.MusicRemoteEvent;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.model.UiPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.service.MusicService;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
|
||||
|
|
@ -39,10 +38,10 @@ import com.kabouzeid.gramophone.util.NavigationUtil;
|
|||
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
import com.koushikdutta.async.future.FutureCallback;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
import com.nineoldandroids.view.ViewPropertyAnimator;
|
||||
import com.squareup.otto.Subscribe;
|
||||
import com.squareup.picasso.Callback;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
|
|
@ -71,6 +70,7 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
|
||||
private boolean killThreads = false;
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
setUpTranslucence(true, false);
|
||||
|
|
@ -258,23 +258,30 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
}
|
||||
|
||||
private void setUpAlbumArtAndApplyPalette() {
|
||||
Picasso.with(this)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId))
|
||||
.placeholder(R.drawable.default_album_art)
|
||||
.into(albumArt, new Callback.EmptyCallback() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
super.onSuccess();
|
||||
final Bitmap bitmap = ((BitmapDrawable) albumArt.getDrawable()).getBitmap();
|
||||
if (bitmap != null) applyPalette(bitmap);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError() {
|
||||
super.onError();
|
||||
setStandardColors();
|
||||
}
|
||||
});
|
||||
albumArt.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Ion.with(MusicControllerActivity.this)
|
||||
.load(MusicUtil.getAlbumArtUri(song.albumId).toString())
|
||||
.withBitmap()
|
||||
.resize(albumArt.getWidth(), albumArt.getHeight())
|
||||
.centerCrop()
|
||||
.asBitmap()
|
||||
.setCallback(new FutureCallback<Bitmap>() {
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
@Override
|
||||
public void onCompleted(Exception e, Bitmap result) {
|
||||
if (result != null) {
|
||||
albumArt.setImageBitmap(result);
|
||||
applyPalette(result);
|
||||
} else {
|
||||
albumArt.setImageResource(R.drawable.default_album_art);
|
||||
resetColors();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void applyPalette(Bitmap bitmap) {
|
||||
|
|
@ -287,13 +294,13 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
songTitle.setTextColor(swatch.getTitleTextColor());
|
||||
songArtist.setTextColor(swatch.getBodyTextColor());
|
||||
} else {
|
||||
setStandardColors();
|
||||
resetColors();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void setStandardColors() {
|
||||
private void resetColors() {
|
||||
int songTitleTextColor = Util.resolveColor(this, R.attr.title_text_color);
|
||||
int artistNameTextColor = Util.resolveColor(this, R.attr.caption_text_color);
|
||||
int defaultBarColor = Util.resolveColor(this, R.attr.default_bar_color);
|
||||
|
|
@ -322,11 +329,9 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
LastFMArtistImageUrlLoader.loadArtistImageUrl(this, song.artistName, false, new LastFMArtistImageUrlLoader.ArtistImageUrlLoaderCallback() {
|
||||
@Override
|
||||
public void onArtistImageUrlLoaded(String url) {
|
||||
Picasso.with(MusicControllerActivity.this)
|
||||
.load(url)
|
||||
.placeholder(R.drawable.default_artist_image)
|
||||
Ion.with(artistArt)
|
||||
.error(R.drawable.default_artist_image)
|
||||
.into(artistArt);
|
||||
.load(url);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -467,9 +472,9 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
}
|
||||
|
||||
@Subscribe
|
||||
public void onUIPrefsChanged(UIPreferenceChangedEvent event) {
|
||||
public void onUIPrefsChanged(UiPreferenceChangedEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case UIPreferenceChangedEvent.PLAYBACK_CONTROLLER_CARD_CHANGED:
|
||||
case UiPreferenceChangedEvent.PLAYBACK_CONTROLLER_CARD_CHANGED:
|
||||
setUpBox((boolean) event.getValue());
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import android.view.MenuItem;
|
|||
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.model.UiPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
|
||||
|
|
@ -57,7 +57,7 @@ public class SettingsActivity extends AbsBaseActivity {
|
|||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object o) {
|
||||
setSummary(generalTheme, o);
|
||||
App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.THEME_CHANGED, o));
|
||||
App.bus.post(new UiPreferenceChangedEvent(UiPreferenceChangedEvent.THEME_CHANGED, o));
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
|
@ -65,7 +65,7 @@ public class SettingsActivity extends AbsBaseActivity {
|
|||
findPreference("transparent_toolbar").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object o) {
|
||||
App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.TOOLBAR_TRANSPARENT_CHANGED, o));
|
||||
App.bus.post(new UiPreferenceChangedEvent(UiPreferenceChangedEvent.TOOLBAR_TRANSPARENT_CHANGED, o));
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
|
@ -73,7 +73,7 @@ public class SettingsActivity extends AbsBaseActivity {
|
|||
findPreference("colored_album_footers").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object o) {
|
||||
App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.ALBUM_OVERVIEW_PALETTE_CHANGED, o));
|
||||
App.bus.post(new UiPreferenceChangedEvent(UiPreferenceChangedEvent.ALBUM_OVERVIEW_PALETTE_CHANGED, o));
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
|
@ -81,7 +81,7 @@ public class SettingsActivity extends AbsBaseActivity {
|
|||
findPreference("colored_navigation_bar_artist").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object o) {
|
||||
App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ARTIST_CHANGED, o));
|
||||
App.bus.post(new UiPreferenceChangedEvent(UiPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ARTIST_CHANGED, o));
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
|
@ -89,7 +89,7 @@ public class SettingsActivity extends AbsBaseActivity {
|
|||
findPreference("colored_navigation_bar_album").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object o) {
|
||||
App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ALBUM_CHANGED, o));
|
||||
App.bus.post(new UiPreferenceChangedEvent(UiPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ALBUM_CHANGED, o));
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
|
@ -97,7 +97,7 @@ public class SettingsActivity extends AbsBaseActivity {
|
|||
findPreference("playback_controller_card").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object o) {
|
||||
App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.PLAYBACK_CONTROLLER_CARD_CHANGED, o));
|
||||
App.bus.post(new UiPreferenceChangedEvent(UiPreferenceChangedEvent.PLAYBACK_CONTROLLER_CARD_CHANGED, o));
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import com.crashlytics.android.Crashlytics;
|
|||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
|
||||
import com.kabouzeid.gramophone.misc.AppKeys;
|
||||
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.model.UiPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.squareup.otto.Subscribe;
|
||||
|
|
@ -22,7 +22,7 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
|
|||
private boolean areViewsEnabled;
|
||||
private Object uiPreferenceChangeListener = new Object() {
|
||||
@Subscribe
|
||||
public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) {
|
||||
public void onUIPreferenceChangedEvent(UiPreferenceChangedEvent event) {
|
||||
AbsBaseActivity.this.onUIPreferenceChangedEvent(event);
|
||||
}
|
||||
};
|
||||
|
|
@ -54,9 +54,9 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
|
|||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) {
|
||||
public void onUIPreferenceChangedEvent(UiPreferenceChangedEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case UIPreferenceChangedEvent.THEME_CHANGED:
|
||||
case UiPreferenceChangedEvent.THEME_CHANGED:
|
||||
recreate();
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
|||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
import com.melnykov.fab.FloatingActionButton;
|
||||
import com.nineoldandroids.view.ViewHelper;
|
||||
import com.nineoldandroids.view.ViewPropertyAnimator;
|
||||
|
|
@ -335,6 +336,11 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
|||
}
|
||||
if (deleteArtwork) {
|
||||
MusicUtil.deleteAlbumArt(AbsTagEditorActivity.this, getId());
|
||||
Ion.getDefault(AbsTagEditorActivity.this).getBitmapCache().clear();
|
||||
Ion.getDefault(AbsTagEditorActivity.this).getCache().clear();
|
||||
} else if (artwork != null){
|
||||
Ion.getDefault(AbsTagEditorActivity.this).getBitmapCache().clear();
|
||||
Ion.getDefault(AbsTagEditorActivity.this).getCache().clear();
|
||||
}
|
||||
progressDialog.dismiss();
|
||||
rescanMedia();
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package com.kabouzeid.gramophone.ui.activities.tageditor;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.text.Editable;
|
||||
|
|
@ -16,8 +15,8 @@ import com.kabouzeid.gramophone.loader.AlbumSongLoader;
|
|||
import com.kabouzeid.gramophone.loader.SongFilePathLoader;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.squareup.picasso.Target;
|
||||
import com.koushikdutta.async.future.FutureCallback;
|
||||
import com.koushikdutta.ion.Ion;
|
||||
|
||||
import org.jaudiotagger.tag.FieldKey;
|
||||
import org.jaudiotagger.tag.images.Artwork;
|
||||
|
|
@ -96,36 +95,30 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
|
|||
LastFMAlbumImageUrlLoader.loadAlbumImageUrl(this, albumTitleStr, albumArtistNameStr, new LastFMAlbumImageUrlLoader.AlbumImageUrlLoaderCallback() {
|
||||
@Override
|
||||
public void onAlbumImageUrlLoaded(String url) {
|
||||
Picasso.with(AlbumTagEditorActivity.this)
|
||||
Ion.with(AlbumTagEditorActivity.this)
|
||||
.load(url)
|
||||
.withBitmap()
|
||||
.resize(500, 500)
|
||||
.centerCrop()
|
||||
.onlyScaleDown()
|
||||
.into(new Target() {
|
||||
.asBitmap()
|
||||
.setCallback(new FutureCallback<Bitmap>() {
|
||||
@Override
|
||||
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
|
||||
albumArtBitmap = bitmap;
|
||||
setImageBitmap(albumArtBitmap);
|
||||
deleteAlbumArt = false;
|
||||
dataChanged();
|
||||
Toast.makeText(AlbumTagEditorActivity.this, "Success.", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBitmapFailed(Drawable errorDrawable) {
|
||||
Toast.makeText(AlbumTagEditorActivity.this, "Failed.", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrepareLoad(Drawable placeHolderDrawable) {
|
||||
|
||||
public void onCompleted(Exception e, Bitmap result) {
|
||||
if(result != null) {
|
||||
albumArtBitmap = result;
|
||||
setImageBitmap(albumArtBitmap);
|
||||
deleteAlbumArt = false;
|
||||
dataChanged();
|
||||
} else {
|
||||
//TODO Toast failed message
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError() {
|
||||
Toast.makeText(AlbumTagEditorActivity.this, "Failed.", Toast.LENGTH_SHORT).show();
|
||||
//TODO Toast failed message
|
||||
}
|
||||
}
|
||||
);
|
||||
|
|
@ -192,28 +185,21 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
|
|||
|
||||
@Override
|
||||
protected void loadImageFromFile(final Uri selectedFileUri) {
|
||||
Picasso.with(this)
|
||||
.load(selectedFileUri)
|
||||
Ion.with(this)
|
||||
.load(selectedFileUri.toString())
|
||||
.withBitmap()
|
||||
.resize(500, 500)
|
||||
.centerCrop()
|
||||
.onlyScaleDown()
|
||||
.into(new Target() {
|
||||
.asBitmap()
|
||||
.setCallback(new FutureCallback<Bitmap>() {
|
||||
@Override
|
||||
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
|
||||
albumArtBitmap = bitmap;
|
||||
setImageBitmap(albumArtBitmap);
|
||||
deleteAlbumArt = false;
|
||||
dataChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBitmapFailed(Drawable errorDrawable) {
|
||||
//TODO Toast could not read file
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrepareLoad(Drawable placeHolderDrawable) {
|
||||
|
||||
public void onCompleted(Exception e, Bitmap result) {
|
||||
if (result != null) {
|
||||
albumArtBitmap = result;
|
||||
setImageBitmap(albumArtBitmap);
|
||||
deleteAlbumArt = false;
|
||||
dataChanged();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ public final class PreferenceUtils {
|
|||
}
|
||||
|
||||
public int getGeneralTheme() {
|
||||
int value = Integer.parseInt(mPreferences.getString(GENERAL_THEME, "1"));
|
||||
int value = Integer.parseInt(mPreferences.getString(GENERAL_THEME, "0"));
|
||||
switch (value) {
|
||||
case 0:
|
||||
return R.style.Theme_MaterialMusic_Light;
|
||||
|
|
|
|||
|
|
@ -31,20 +31,19 @@
|
|||
android:paddingBottom="8dp"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:paddingTop="8dp">
|
||||
android:paddingTop="8dp"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/album_title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:gravity="center_vertical"
|
||||
android:hint="Album"
|
||||
android:paddingBottom="8dp"
|
||||
android:paddingTop="8dp"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Title"
|
||||
android:textColor="@color/white"/>
|
||||
android:textColor="@color/white"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
|
@ -53,6 +52,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/header"
|
||||
android:background="?android:attr/colorBackground"
|
||||
android:orientation="vertical"
|
||||
android:padding="16dp">
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:focusable="true"
|
||||
|
|
@ -32,14 +31,14 @@
|
|||
android:paddingBottom="8dp"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:paddingTop="8dp">
|
||||
android:paddingTop="8dp"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/title1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:gravity="center_vertical"
|
||||
android:hint="Song"
|
||||
android:paddingBottom="8dp"
|
||||
android:paddingTop="8dp"
|
||||
|
|
@ -52,7 +51,6 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:gravity="center_vertical"
|
||||
android:hint="Album"
|
||||
android:paddingBottom="8dp"
|
||||
android:paddingTop="8dp"
|
||||
|
|
@ -67,6 +65,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/header"
|
||||
android:background="?android:attr/colorBackground"
|
||||
android:orientation="vertical"
|
||||
android:padding="16dp">
|
||||
|
||||
|
|
|
|||
28
app/src/main/res/values-ar/strings.xml
Normal file
28
app/src/main/res/values-ar/strings.xml
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="action_settings">الإعدادات</string>
|
||||
<string name="action_about">عنّا</string>
|
||||
<string name="action_current_playing">يتم تشغيل</string>
|
||||
<string name="action_playing_queue">قائمة الانتظار</string>
|
||||
<string name="action_search">بحث</string>
|
||||
<string name="action_play_next">استمع لاحقاً</string>
|
||||
<string name="action_add_to_playing_queue">أضف إلى قائمة الانتظار</string>
|
||||
<string name="action_remove_from_playing_queue">أزل من قائمة الانتظار</string>
|
||||
<string name="action_add_to_playlist">أضف إلى قائمة تشغيل</string>
|
||||
<string name="action_tag_editor">تعديل معلومات الموسيقى</string>
|
||||
<string name="action_delete_from_disk">حذف</string>
|
||||
<string name="action_details">التفاصيل</string>
|
||||
<string name="action_go_to">اذهب إلى...</string>
|
||||
<string name="albums">الألبومات</string>
|
||||
<string name="artists">الفنانون</string>
|
||||
<string name="genres">الأنواع</string>
|
||||
<string name="songs">الأغاني</string>
|
||||
<string name="playlists">قوائم التشغيل</string>
|
||||
<string name="unknown_artist">فنان غير معروف</string>
|
||||
<string name="unknown_album">ألبوم غير معروف</string>
|
||||
<string name="untitled_song">أغنية بدون عنوان</string>
|
||||
<string name="nothing_playing">لا شيء قيد الاستماع</string>
|
||||
<string name="unplayable_file">عذراً، حصل خطأ أثناء محاولة تشغيل الأغنية</string>
|
||||
<string name="biography_unavailable">عذراً، لم يتم العثور على سيرة ذاتية مطابقة للفنان</string>
|
||||
<string name="biography">سيرة ذاتية</string>
|
||||
</resources>
|
||||
79
app/src/main/res/values-el/strings.xml
Normal file
79
app/src/main/res/values-el/strings.xml
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="action_settings">"Ρυθμίσεις "</string>
|
||||
<string name="action_about">Για εμάς</string>
|
||||
<string name="action_current_playing">Παίζει τώρα</string>
|
||||
<string name="action_playing_queue">Σειρά τραγουδιών</string>
|
||||
<string name="action_search">Αναζήτηση</string>
|
||||
<string name="action_play_next">Παίζει στη συνέχεια</string>
|
||||
<string name="action_add_to_playing_queue">Προσθήκη στη σειρά τραγουδιών</string>
|
||||
<string name="action_remove_from_playing_queue">Διαγραφή από την σειρά τραγουδιών</string>
|
||||
<string name="action_add_to_playlist">Προσθήκη στην λίστα</string>
|
||||
<string name="action_tag_editor">Επεξεργασία ετικετών</string>
|
||||
<string name="action_delete_from_disk">Διαγραφή απο τον δίσκο</string>
|
||||
<string name="action_details">Πληροφορίες</string>
|
||||
<string name="action_go_to">Πήγαινε στο</string>
|
||||
<string name="albums">Λευκώματα</string>
|
||||
<string name="artists">Καλλιτέχνες</string>
|
||||
<string name="genres">Είδη</string>
|
||||
<string name="songs">Τραγούδια</string>
|
||||
<string name="playlists">Λίστες</string>
|
||||
<string name="unknown_artist">Άγνωστος καλλιτέχνης</string>
|
||||
<string name="unknown_album">Άγνωστο λεύκωμα</string>
|
||||
<string name="untitled_song">Τραγουδι χωρίς τίτλο</string>
|
||||
<string name="nothing_playing">Δεν παίζει τίποτα</string>
|
||||
<string name="unplayable_file">Συγνώμη - Υπήρξε σφάλμα όταν έπαιξε το τραγούδι</string>
|
||||
<string name="biography_unavailable">Συγνώμη, δεν μπορούμε βιογραφία που να ταιριάζει με αυτόν τον καλλιτέχνη</string>
|
||||
<string name="biography">Βιογραφία</string>
|
||||
<string name="audio_focus_denied">Δεν μπορούμε να πάρουμε συγκέντρωση του ήχου</string>
|
||||
<string name="tag_editor">Επεξεργασία ετικετών</string>
|
||||
<string name="song">Τραγούδι</string>
|
||||
<string name="album">Λεύκωμα</string>
|
||||
<string name="artist">Καλλιτέχνης</string>
|
||||
<string name="genre">Είδος</string>
|
||||
<string name="album_artist">Καλλιτέχνης λευκώματος</string>
|
||||
<string name="year">Έτος</string>
|
||||
<string name="track">Κομάτι</string>
|
||||
<string name="track_hint">I don\'t know this</string>
|
||||
<string name="album_or_artist_empty">Το πεδιο τιτλος του άλμπουμ ή ο καλλιτέχνης του άλμπουμ είναι άδειο</string>
|
||||
<string name="writing_file_number">Φ</string>
|
||||
<string name="saving_changes">Ι</string>
|
||||
<string name="label_details">Η</string>
|
||||
<string name="label_file_name">Ξ</string>
|
||||
<string name="label_file_path">Ξ</string>
|
||||
<string name="label_file_size">Ν</string>
|
||||
<string name="label_file_format">Ε</string>
|
||||
<string name="label_track_length">Ρ</string>
|
||||
<string name="label_bit_rate">Ρ</string>
|
||||
<string name="label_sampling_rate">Ε</string>
|
||||
<string name="ok">Ένταξη</string>
|
||||
<string name="action_go_to_artist">Ι</string>
|
||||
<string name="action_go_to_album">Θ</string>
|
||||
<string name="label_current_playing_queue">Υ</string>
|
||||
<string name="close">Ε</string>
|
||||
<string name="save_as_playlist">Γ</string>
|
||||
<string name="credits_3">Ρ</string>
|
||||
<string name="credits_1">Τ</string>
|
||||
<string name="title_activity_search">Φ</string>
|
||||
<string name="more">Γ</string>
|
||||
<string name="no_results">Υ</string>
|
||||
<string name="action_re_download_artist_image">Η</string>
|
||||
<string name="updated_artist_image_for">Ρ</string>
|
||||
<string name="updating">Φ</string>
|
||||
<string name="loading">Φ</string>
|
||||
<string name="added_title_to_playing_queue">Η</string>
|
||||
<string name="added_titles_to_playing_queue_1">Τ</string>
|
||||
<string name="added_titles_to_playing_queue_2">\u0397</string>
|
||||
<string name="action_delete_from_playlist">Σ</string>
|
||||
<string name="inserted_titles_to_playlist_1">\u03a1</string>
|
||||
<string name="inserted_titles_to_playlist_2">\u03a1</string>
|
||||
<string name="action_new_playlist">Ε</string>
|
||||
<string name="action_grid_columns">Δ</string>
|
||||
<string name="action_grid_columns_land">Ζ</string>
|
||||
<string name="cancel">Σ</string>
|
||||
<string name="created_playlist">\u0395</string>
|
||||
<string name="deleted_playlist">\u03c2</string>
|
||||
<string name="create_playlist_failed">" \u03a1"</string>
|
||||
<string name="delete_playlist">\u03a6</string>
|
||||
<string name="rename_playlist">\u0395</string>
|
||||
</resources>
|
||||
|
|
@ -8,11 +8,11 @@
|
|||
<string name="action_play_next">"Siguiente "</string>
|
||||
<string name="action_add_to_playing_queue">Agregar a reproducción actual</string>
|
||||
<string name="action_remove_from_playing_queue">Eliminar de reproducción actual</string>
|
||||
<string name="action_add_to_playlist">"Añadir a lista de reproducción "</string>
|
||||
<string name="action_add_to_playlist">Añadir a lista de reproducción...</string>
|
||||
<string name="action_tag_editor">Editor de etiquetas</string>
|
||||
<string name="action_delete_from_disk">Borrar del disco</string>
|
||||
<string name="action_details">Detalles</string>
|
||||
<string name="action_go_to">Ir a</string>
|
||||
<string name="action_go_to">Ir a...</string>
|
||||
<string name="albums">Álbumes</string>
|
||||
<string name="artists">Artistas</string>
|
||||
<string name="genres">Géneros</string>
|
||||
|
|
@ -23,9 +23,9 @@
|
|||
<string name="untitled_song">Canción sin título</string>
|
||||
<string name="nothing_playing">Nada se está reproduciendo</string>
|
||||
<string name="unplayable_file">Disculpe, un error ha ocurrido intentando 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="audio_focus_denied">"No podemos encontrar el foco de audio "</string>
|
||||
<string name="audio_focus_denied">No podemos encontrar el foco de audio</string>
|
||||
<string name="tag_editor">Editor de etiquetas</string>
|
||||
<string name="song">Canción</string>
|
||||
<string name="album">Álbum</string>
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
<string name="album_artist">Artista del álbum</string>
|
||||
<string name="year">Año</string>
|
||||
<string name="track">Canción</string>
|
||||
<string name="track_hint">"Pista () "</string>
|
||||
<string name="track_hint">Pista (2 for track 2 or 3004 for CD3 track 4)</string>
|
||||
<string name="album_or_artist_empty">El campo título del álbum o el artista del álbum está vacío</string>
|
||||
<string name="writing_file_number">Escribiendo archivo</string>
|
||||
<string name="saving_changes">Guardando cambios...</string>
|
||||
|
|
@ -52,7 +52,9 @@
|
|||
<string name="label_current_playing_queue">Reproducción actual</string>
|
||||
<string name="close">Cerrar</string>
|
||||
<string name="save_as_playlist">Guardar como lista de reproducción</string>
|
||||
<string name="title_activity_search">Buscar Actividad</string>
|
||||
<string name="credits_3">Icono por</string>
|
||||
<string name="credits_1">Gramophone es un reproductor de música gratuito con diseño material por</string>
|
||||
<string name="title_activity_search">Buscar</string>
|
||||
<string name="more">más</string>
|
||||
<string name="no_results">Sin resultados</string>
|
||||
<string name="action_re_download_artist_image">Actualizar imagen del artista</string>
|
||||
|
|
@ -63,8 +65,8 @@
|
|||
<string name="added_titles_to_playing_queue_1">Añadido</string>
|
||||
<string name="added_titles_to_playing_queue_2">t\u00edtulos a la reproducci\u00f3n actual</string>
|
||||
<string name="action_delete_from_playlist">Borrar de la lista de reproducción</string>
|
||||
<string name="inserted_titles_to_playlist_1">Insertado</string>
|
||||
<string name="inserted_titles_to_playlist_2">t\u00edtulos a lista de reproducci\u00f3n</string>
|
||||
<string name="inserted_titles_to_playlist_1">A\u00f1adido</string>
|
||||
<string name="inserted_titles_to_playlist_2">t\u00edtulos a lista de reproducci\u00f3n.</string>
|
||||
<string name="action_new_playlist">Nueva lista de reproducción</string>
|
||||
<string name="action_grid_columns">Columnas de la cuadrícula</string>
|
||||
<string name="action_grid_columns_land">Columnas de la cuadrícula (apaisado)</string>
|
||||
|
|
@ -98,4 +100,5 @@
|
|||
<string name="no_audio_id">Sin id de audio, toca algo e intenta nuevamente</string>
|
||||
<string name="navigation_drawer_open">Abrir cajón de navegación</string>
|
||||
<string name="navigation_drawer_close">"Cerrar la barra de navegación "</string>
|
||||
<string name="delete">Borrar</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@
|
|||
"</string>
|
||||
<string name="album_or_artist_empty">El campo del título del álbum o del artista del álbum está vacío</string>
|
||||
<string name="writing_file_number">Escribiendo archivo</string>
|
||||
<string name="saving_changes">Guardando cambios</string>
|
||||
<string name="saving_changes">Guardando cambios...</string>
|
||||
<string name="title_activity_album_tag_editor">Editor de las etiquetas del álbum activo</string>
|
||||
<string name="label_details">Detalles</string>
|
||||
<string name="label_file_name">Nombre de archivo</string>
|
||||
|
|
@ -80,7 +80,7 @@
|
|||
<string name="delete_songs_1">Borrar</string>
|
||||
<string name="delete_songs_2">Canciones?</string>
|
||||
<string name="delete_warning">"Advertencia: Esta operación es irreversible."</string>
|
||||
<string name="shuffle_all">Mezclar todas</string>
|
||||
<string name="shuffle_all">Aleatorio</string>
|
||||
<string name="last_opened">Abierto recientemente</string>
|
||||
<string name="title_setting_start_page">Página de inicio</string>
|
||||
<string name="light_theme_name">Claro</string>
|
||||
|
|
|
|||
|
|
@ -52,6 +52,8 @@
|
|||
<string name="label_current_playing_queue">File de lecture</string>
|
||||
<string name="close">Fermer</string>
|
||||
<string name="save_as_playlist">Sauvegarder en tant que playlist</string>
|
||||
<string name="credits_3">Logo fourni par</string>
|
||||
<string name="credits_1">Gramophone est un lecteur de musique matériel et entièrement gratuit créé par</string>
|
||||
<string name="title_activity_search">Dernières recherches</string>
|
||||
<string name="more">Plus</string>
|
||||
<string name="no_results">Aucun résultat</string>
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
<string name="saving_changes">Sto salvando le modifiche</string>
|
||||
<string name="title_activity_album_tag_editor">AttivitàModificaTagAlbum</string>
|
||||
<string name="label_details">Dettagli</string>
|
||||
<string name="label_file_name">Nome file</string>
|
||||
<string name="label_file_name">Nome del file</string>
|
||||
<string name="label_file_size">Dimensione</string>
|
||||
<string name="label_file_format">Formato</string>
|
||||
<string name="label_track_length">Lunghezza</string>
|
||||
|
|
@ -52,7 +52,7 @@
|
|||
<string name="label_current_playing_queue">Riproduci coda</string>
|
||||
<string name="close">Chiudi</string>
|
||||
<string name="save_as_playlist">Salva come playlist</string>
|
||||
<string name="title_activity_search">AttivitàCerca</string>
|
||||
<string name="title_activity_search">Cerca</string>
|
||||
<string name="more">Altro</string>
|
||||
<string name="no_results">Nessun risultato</string>
|
||||
<string name="action_re_download_artist_image">Aggiorna immagine artista</string>
|
||||
|
|
|
|||
|
|
@ -1,32 +1,32 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="action_settings">Instellingen</string>
|
||||
<string name="action_about">Omtrent</string>
|
||||
<string name="action_about">Over</string>
|
||||
<string name="action_current_playing">Momenteel spelend</string>
|
||||
<string name="action_playing_queue">Afspeellijst</string>
|
||||
<string name="action_search">Zoek</string>
|
||||
<string name="action_play_next">Speel volgende af</string>
|
||||
<string name="action_add_to_playing_queue">Voeg toe aan afspeellijst\"</string>
|
||||
<string name="action_remove_from_playing_queue">Verwijder van afspeellijst</string>
|
||||
<string name="action_add_to_playlist">Voeg toe aan afspeellijst...\"</string>
|
||||
<string name="action_tag_editor">Label Bewerker\"</string>
|
||||
<string name="action_delete_from_disk">Verwijder van schijf\"</string>
|
||||
<string name="action_playing_queue">Afspeelwachtrij</string>
|
||||
<string name="action_search">Zoeken</string>
|
||||
<string name="action_play_next">Speel af als volgende</string>
|
||||
<string name="action_add_to_playing_queue">Toevoegen aan wachtrij</string>
|
||||
<string name="action_remove_from_playing_queue">Verwijderen uit wachtrij</string>
|
||||
<string name="action_add_to_playlist">Toevoegen aan afspeellijst...</string>
|
||||
<string name="action_tag_editor">Label bewerker</string>
|
||||
<string name="action_delete_from_disk">Verwijderen van apparaat</string>
|
||||
<string name="action_details">Details</string>
|
||||
<string name="action_go_to">Ga naar...</string>
|
||||
<string name="albums">Albums</string>
|
||||
<string name="artists">Artiesten</string>
|
||||
<string name="genres">Genres</string>
|
||||
<string name="songs">Nummers</string>
|
||||
<string name="playlists">Afspeellijst</string>
|
||||
<string name="unknown_artist">Onbekende artiest</string>
|
||||
<string name="playlists">Afspeellijsten</string>
|
||||
<string name="unknown_artist">Onbekende Artiest</string>
|
||||
<string name="unknown_album">Onbekend Album</string>
|
||||
<string name="untitled_song">Ongetiteld Nummer</string>
|
||||
<string name="nothing_playing">Er wordt niets afgespeeld.</string>
|
||||
<string name="unplayable_file">Sorry - er is een probleem ontstaan tijdens het afspelen van dit nummer</string>
|
||||
<string name="biography_unavailable">Sorry, het is ons niet gelukt om een passende biografie voor deze artiest te vinden.</string>
|
||||
<string name="nothing_playing">Niets wordt afgespeeld</string>
|
||||
<string name="unplayable_file">Sorry - er is een probleem ontstaan tijdens het afspelen van dit nummer.</string>
|
||||
<string name="biography_unavailable">Sorry, het is ons niet gelukt om een passende biografie te vinden voor deze artiest.</string>
|
||||
<string name="biography">Biografie</string>
|
||||
<string name="audio_focus_denied">Het is niet gelukt om audio focus te krijgen.</string>
|
||||
<string name="tag_editor">Label Bewerker</string>
|
||||
<string name="tag_editor">Label bewerker</string>
|
||||
<string name="song">Nummer</string>
|
||||
<string name="album">Album</string>
|
||||
<string name="artist">Artiest</string>
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
<string name="album_artist">Album artiest</string>
|
||||
<string name="year">Jaar</string>
|
||||
<string name="track">Nummer</string>
|
||||
<string name="track_hint">Nummer (2 voor nummer 2 of 3004 voor CD3 nummer 4)</string>
|
||||
<string name="track_hint">Nummer (2 voor nummer 2, of 3004 voor CD3 nummer 4)</string>
|
||||
<string name="album_or_artist_empty">Album titel of album artiest tekstveld is leeg.</string>
|
||||
<string name="writing_file_number">Bestand wegschrijven</string>
|
||||
<string name="saving_changes">Wijzigingen opslaan...</string>
|
||||
|
|
@ -49,55 +49,56 @@
|
|||
<string name="ok">Oké</string>
|
||||
<string name="action_go_to_artist">Ga naar artiest</string>
|
||||
<string name="action_go_to_album">Ga naar album</string>
|
||||
<string name="label_current_playing_queue">Afspeellijst</string>
|
||||
<string name="close">Sluit</string>
|
||||
<string name="label_current_playing_queue">Afspeelwachtrij</string>
|
||||
<string name="close">Sluiten</string>
|
||||
<string name="save_as_playlist">Sla op als afspeellijst</string>
|
||||
<string name="credits_3">Icoon door</string>
|
||||
<string name="credits_1">Gramophone is een volledig gratis muziekspeler in material design door</string>
|
||||
<string name="title_activity_search">ZoekActiviteit</string>
|
||||
<string name="title_activity_search">Zoeken</string>
|
||||
<string name="more">meer</string>
|
||||
<string name="no_results">Geen resultaten</string>
|
||||
<string name="action_re_download_artist_image">Vernieuw artiest afbeelding</string>
|
||||
<string name="updated_artist_image_for">Artiest afbeelding gewijzigd</string>
|
||||
<string name="updating">Wijzigen...</string>
|
||||
<string name="action_re_download_artist_image">Artiest afbeelding bijwerken</string>
|
||||
<string name="updated_artist_image_for">Artiest afbeelding bijgewerkt</string>
|
||||
<string name="updating">Bijwerken...</string>
|
||||
<string name="loading">Laden...</string>
|
||||
<string name="added_title_to_playing_queue">1 titel toegevoegd aan de afspeellijst.</string>
|
||||
<string name="added_title_to_playing_queue">1 titel toegevoegd aan de afspeelwachtrij.</string>
|
||||
<string name="added_titles_to_playing_queue_1">Toegevoegd</string>
|
||||
<string name="added_titles_to_playing_queue_2">" titels naar de afspeellijst"</string>
|
||||
<string name="action_delete_from_playlist">Verwijder van afspeellijst</string>
|
||||
<string name="inserted_titles_to_playlist_1">"Ingevoegd "</string>
|
||||
<string name="inserted_titles_to_playlist_2">" titels naar de afspeellijst "</string>
|
||||
<string name="added_titles_to_playing_queue_2">" titels naar de afspeelwachtrij"</string>
|
||||
<string name="action_delete_from_playlist">Verwijderen van afspeellijst</string>
|
||||
<string name="inserted_titles_to_playlist_1">"Toegevoegd "</string>
|
||||
<string name="inserted_titles_to_playlist_2">" titels naar de afspeellijst."</string>
|
||||
<string name="action_new_playlist">Nieuwe afspeellijst</string>
|
||||
<string name="action_grid_columns">Rasterkolommen</string>
|
||||
<string name="action_grid_columns_land">Rasterkolommen (Land)</string>
|
||||
<string name="cancel">Annuleer</string>
|
||||
<string name="cancel">Annuleren</string>
|
||||
<string name="created_playlist">"Afspeellijst aangemaakt "</string>
|
||||
<string name="deleted_playlist">"Afspeellijst verwijderd "</string>
|
||||
<string name="create_playlist_failed">"Kan afspeellijst niet verwijderen "</string>
|
||||
<string name="create_playlist_failed">"Kan afspeellijst niet aanmaken "</string>
|
||||
<string name="delete_playlist">"Verwijder afspeellijst "</string>
|
||||
<string name="rename_playlist">"Hernoem afspeellijst "</string>
|
||||
<string name="delete_songs_1">"Verwijder "</string>
|
||||
<string name="delete_songs_2">" nummers? "</string>
|
||||
<string name="delete_warning">"Waarschuwing: Deze actie kan niet ongedaan worden gemaakt. "</string>
|
||||
<string name="shuffle_all">Shuffle allemaal</string>
|
||||
<string name="delete_warning">"Waarschuwing: Deze handeling kan niet ongedaan gemaakt worden."</string>
|
||||
<string name="shuffle_all">Shuffle alles</string>
|
||||
<string name="last_opened">Laatst geopend</string>
|
||||
<string name="title_setting_start_page">Start pagina</string>
|
||||
<string name="title_setting_start_page">Startpagina</string>
|
||||
<string name="light_theme_name">Licht</string>
|
||||
<string name="dark_theme_name">Donker</string>
|
||||
<string name="equalizer">Equalizer</string>
|
||||
<string name="pref_header_ui">UI</string>
|
||||
<string name="pref_header_ui">Uiterlijk</string>
|
||||
<string name="pref_title_general_theme">Standaard thema</string>
|
||||
<string name="pref_header_audio">Audio</string>
|
||||
<string name="pref_header_general">Algemeen</string>
|
||||
<string name="pref_title_set_default_start_page">Stel in als start pagina</string>
|
||||
<string name="pref_title_set_default_start_page">Instellen als startpagina</string>
|
||||
<string name="title_activity_settings">Instellingen</string>
|
||||
<string name="pref_title_transparent_toolbar">Semi-transparante toolbaar</string>
|
||||
<string name="pref_title_transparent_toolbar">Semi-transparante toolbar</string>
|
||||
<string name="pref_title_show_playback_controller_card">Afspeelknoppen kaart</string>
|
||||
<string name="pref_title_colored_navigation_bar_artists">Gekleurde navigatiebalk artiesten weergave</string>
|
||||
<string name="pref_title_colored_navigation_bar_albums">Gekleurde navigatiebalk album weergave</string>
|
||||
<string name="pref_title_colored_album_footers">Gekleurde album footers</string>
|
||||
<string name="no_equalizer">Geen equalizer gevonden</string>
|
||||
<string name="no_audio_id">Geen audio id, speel wat af en probeer het opnieuw</string>
|
||||
<string name="no_audio_id">Geen audio ID, speel iets af en probeer het nogmaals.</string>
|
||||
<string name="navigation_drawer_open">Open navigatiebalk</string>
|
||||
<string name="navigation_drawer_close">Sluit navigatiebalk</string>
|
||||
<string name="delete">verwijder</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -6,11 +6,11 @@
|
|||
<string name="action_playing_queue">Kolejka odtwarzania</string>
|
||||
<string name="action_search">Szukaj</string>
|
||||
<string name="action_play_next">Odtwarzaj następny</string>
|
||||
<string name="action_add_to_playing_queue">Dodaj do kolejki odtwarzania\'\'</string>
|
||||
<string name="action_add_to_playing_queue">Dodaj do kolejki odtwarzania</string>
|
||||
<string name="action_remove_from_playing_queue">Usuń z kolejki odtwarzania</string>
|
||||
<string name="action_add_to_playlist">Dodaj do listy odtwarzania...\'\'</string>
|
||||
<string name="action_tag_editor">Edytor Tagów\'\'</string>
|
||||
<string name="action_delete_from_disk">Usuń z urządzenia\'\'</string>
|
||||
<string name="action_add_to_playlist">Dodaj do listy odtwarzania...</string>
|
||||
<string name="action_tag_editor">Edytor Tagów</string>
|
||||
<string name="action_delete_from_disk">Usuń z urządzenia</string>
|
||||
<string name="action_details">Szczegóły</string>
|
||||
<string name="action_go_to">Przejdź do...</string>
|
||||
<string name="albums">Albumy</string>
|
||||
|
|
@ -18,12 +18,12 @@
|
|||
<string name="genres">Gatunki</string>
|
||||
<string name="songs">Utwory</string>
|
||||
<string name="playlists">Listy odtwarzania</string>
|
||||
<string name="unknown_artist">Nieznany Wykonawca</string>
|
||||
<string name="unknown_album">Nieznany Album</string>
|
||||
<string name="unknown_artist">Nieznany wykonawca</string>
|
||||
<string name="unknown_album">Nieznany album</string>
|
||||
<string name="untitled_song">Utwór bez nazwy</string>
|
||||
<string name="nothing_playing">Nic nie gra</string>
|
||||
<string name="unplayable_file">Niestety - wystąpił błąd przy próbie odtworzenia tej piosenki</string>
|
||||
<string name="biography_unavailable">Niestety nie byliśmy w stanie znaleźć biografii dla tego wykonawcy.</string>
|
||||
<string name="unplayable_file">Niestety - wystąpił błąd przy próbie zagrania tej piosenki</string>
|
||||
<string name="biography_unavailable">Niestety nie byliśmy w stanie znaleźć pasującej biografii dla tego wykonawcy.</string>
|
||||
<string name="biography">Biografia</string>
|
||||
<string name="audio_focus_denied">We were not able to gain audio focus.</string>
|
||||
<string name="title_activity_tag_editor">TagEditorActivity</string>
|
||||
|
|
@ -49,12 +49,14 @@
|
|||
<string name="label_bit_rate">Bitrate</string>
|
||||
<string name="label_sampling_rate">Częstotliwość próbkowania</string>
|
||||
<string name="ok">Ok</string>
|
||||
<string name="action_go_to_artist">Przejdź do Wykonawcy</string>
|
||||
<string name="action_go_to_artist">Przejdź do wykonawcy</string>
|
||||
<string name="action_go_to_album">Przejdź do albumu</string>
|
||||
<string name="label_current_playing_queue">Kolejka odtwarzania</string>
|
||||
<string name="close">Zamknij</string>
|
||||
<string name="save_as_playlist">Zapisz jako listę odtwarzania</string>
|
||||
<string name="title_activity_search">SearchActivity</string>
|
||||
<string name="credits_3">Ikona</string>
|
||||
<string name="credits_1">Gramophone to całkowicie darmowy odtwarzacz muzyczny, utrzymany w stylistyce Material Design, zaprojektowany przez</string>
|
||||
<string name="title_activity_search">Szukaj</string>
|
||||
<string name="more">więcej</string>
|
||||
<string name="no_results">Brak wyników</string>
|
||||
<string name="action_re_download_artist_image">Zaktualizuj zdjęcie wykonawcy</string>
|
||||
|
|
@ -62,11 +64,11 @@
|
|||
<string name="updating">Aktualizowanie...</string>
|
||||
<string name="loading">Ładowanie...</string>
|
||||
<string name="added_title_to_playing_queue">Dodano 1 tytuł do kolejki odtwarzania</string>
|
||||
<string name="added_titles_to_playing_queue_1">Dodane</string>
|
||||
<string name="added_titles_to_playing_queue_2">" tytu\u0142\u00f3w do kolejki odtwarzania."</string>
|
||||
<string name="added_titles_to_playing_queue_1">"Dodano "</string>
|
||||
<string name="added_titles_to_playing_queue_2">" tytu\u0142y do kolejki odtwarzania."</string>
|
||||
<string name="action_delete_from_playlist">Usuń z listy odtwarzania</string>
|
||||
<string name="inserted_titles_to_playlist_1">"Inserted "</string>
|
||||
<string name="inserted_titles_to_playlist_2">" tytu\u0142\u00f3w do listy odtwarzania "</string>
|
||||
<string name="inserted_titles_to_playlist_1">"Dodano "</string>
|
||||
<string name="inserted_titles_to_playlist_2">" tytu\u0142y do listy odtwarzania."</string>
|
||||
<string name="action_new_playlist">Nowa lista odtwarzania</string>
|
||||
<string name="action_grid_columns">Siatka kolumn</string>
|
||||
<string name="action_grid_columns_land">Siatka kolumn (poziomo)</string>
|
||||
|
|
@ -78,7 +80,7 @@
|
|||
<string name="rename_playlist">"Zmie\u0144 nazw\u0119 listy odtwarzania "</string>
|
||||
<string name="delete_songs_1">"Usu\u0144 "</string>
|
||||
<string name="delete_songs_2">" utwor\u00f3w?"</string>
|
||||
<string name="delete_warning">"Ostrzeżenie: Ta operacja może być cofnięta."</string>
|
||||
<string name="delete_warning">"Ostrzeżenie: Ta operacja nie może być cofnięta."</string>
|
||||
<string name="shuffle_all">Wszystkie losowo</string>
|
||||
<string name="last_opened">Ostatnio otwarte</string>
|
||||
<string name="title_setting_start_page">Strona startowa</string>
|
||||
|
|
@ -86,13 +88,13 @@
|
|||
<string name="dark_theme_name">Ciemny</string>
|
||||
<string name="equalizer">Korektor</string>
|
||||
<string name="pref_header_ui">Wygląd</string>
|
||||
<string name="pref_title_general_theme">General theme</string>
|
||||
<string name="pref_header_audio">Audio</string>
|
||||
<string name="pref_header_general">General</string>
|
||||
<string name="pref_title_general_theme">Główny motyw</string>
|
||||
<string name="pref_header_audio">Dźwięk</string>
|
||||
<string name="pref_header_general">Ogólne</string>
|
||||
<string name="pref_title_set_default_start_page">Ustaw domyślną stronę startową</string>
|
||||
<string name="title_activity_settings">Ustawienia</string>
|
||||
<string name="pref_title_transparent_toolbar">Półprzeźroczysty pasek narzędzi</string>
|
||||
<string name="pref_title_show_playback_controller_card">Playback controller card</string>
|
||||
<string name="pref_title_show_playback_controller_card">Karta kontrolera odtwarzania</string>
|
||||
<string name="pref_title_colored_navigation_bar_artists">Kolorowy pasek nawigacyjny wykonawcy</string>
|
||||
<string name="pref_title_colored_navigation_bar_albums">Kolorowy pasek nawigacyjny albumu</string>
|
||||
<string name="pref_title_colored_album_footers">Kolorowe stopki albumu</string>
|
||||
|
|
@ -100,4 +102,5 @@
|
|||
<string name="no_audio_id">Brak ID dźwięku, puść coś i spróbuj ponownie.</string>
|
||||
<string name="navigation_drawer_open">Otwórz pasek nawigacji</string>
|
||||
<string name="navigation_drawer_close">Zamknij pasek nawigacji</string>
|
||||
<string name="delete">usuń</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -52,7 +52,9 @@
|
|||
<string name="label_current_playing_queue">Reproduzindo lista</string>
|
||||
<string name="close">Fechar</string>
|
||||
<string name="save_as_playlist">Salvar como uma playlist</string>
|
||||
<string name="title_activity_search">Buscar atividade</string>
|
||||
<string name="credits_3">Ícone por</string>
|
||||
<string name="credits_1">Gramophone é um player de música completamente grátis com Material Design feito por</string>
|
||||
<string name="title_activity_search">Pesquisar</string>
|
||||
<string name="more">mais</string>
|
||||
<string name="no_results">Nenhum resultado</string>
|
||||
<string name="action_re_download_artist_image">Atualizar imagem do artista</string>
|
||||
|
|
@ -60,11 +62,11 @@
|
|||
<string name="updating">Atualizando...</string>
|
||||
<string name="loading">Carregando...</string>
|
||||
<string name="added_title_to_playing_queue">Adicionada uma música para a fila atual de músicas.</string>
|
||||
<string name="added_titles_to_playing_queue_1">Adicionado</string>
|
||||
<string name="added_titles_to_playing_queue_1">"Adicionado "</string>
|
||||
<string name="added_titles_to_playing_queue_2">" m\u00fasicas para a fila atual."</string>
|
||||
<string name="action_delete_from_playlist">Apagar da playlist</string>
|
||||
<string name="inserted_titles_to_playlist_1">Inserido</string>
|
||||
<string name="inserted_titles_to_playlist_2">" m\u00fasicas para playlist "</string>
|
||||
<string name="inserted_titles_to_playlist_1">"Inserido "</string>
|
||||
<string name="inserted_titles_to_playlist_2">" m\u00fasicas para playlist."</string>
|
||||
<string name="action_new_playlist">Nova playlist</string>
|
||||
<string name="action_grid_columns">Colunas da grade</string>
|
||||
<string name="action_grid_columns_land">Colunas da grade (Paisagem)</string>
|
||||
|
|
@ -98,4 +100,5 @@
|
|||
<string name="no_audio_id">Nenhuma identificação de áudio, reproduza algo e tente novamente.</string>
|
||||
<string name="navigation_drawer_open">Abrir área de navegação</string>
|
||||
<string name="navigation_drawer_close">Fechar área de navegação</string>
|
||||
<string name="delete">excluir</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -52,6 +52,8 @@
|
|||
<string name="label_current_playing_queue">Lista de redare</string>
|
||||
<string name="close">Închide</string>
|
||||
<string name="save_as_playlist">Salvează ca și playlist</string>
|
||||
<string name="credits_3">Iconița de</string>
|
||||
<string name="credits_1">Gramophone este o aplicație complet gratuită bazată pe Material Design făcută de</string>
|
||||
<string name="title_activity_search">ActivitateaDeCăutare</string>
|
||||
<string name="more">mai mult</string>
|
||||
<string name="no_results">Niciun rezultat</string>
|
||||
|
|
@ -98,4 +100,5 @@
|
|||
<string name="no_audio_id">Nicio identificare audio, redă ceva şi încearcă din nou.</string>
|
||||
<string name="navigation_drawer_open">Deschide sertarul de navigație</string>
|
||||
<string name="navigation_drawer_close">Închide sertarul de navigație</string>
|
||||
<string name="delete">șterge</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -21,15 +21,19 @@
|
|||
<string name="unknown_artist">Неизвестный исполнитель</string>
|
||||
<string name="unknown_album">Неизвестный исполнитель</string>
|
||||
<string name="untitled_song">Неизвестная песня</string>
|
||||
<string name="nothing_playing">Ничего нет для воспроизведения</string>
|
||||
<string name="unplayable_file">Произошла ошибка при попытке проиграть эту песню</string>
|
||||
<string name="biography_unavailable">Извините, биография для этого исполнителя не найдена.</string>
|
||||
<string name="biography">Биография</string>
|
||||
<string name="tag_editor">Редактор тэгов</string>
|
||||
<string name="song">Песня</string>
|
||||
<string name="album">Альбом</string>
|
||||
<string name="artist">Исполнитель</string>
|
||||
<string name="genre">Жанр</string>
|
||||
<string name="album_artist">Альбом исполнителя</string>
|
||||
<string name="year">Год</string>
|
||||
<string name="track">Трек</string>
|
||||
<string name="album_or_artist_empty">Поля название альбома или альбом исполнителя пусты</string>
|
||||
<string name="writing_file_number">Запись файла</string>
|
||||
<string name="saving_changes">Сохранение изменений...</string>
|
||||
<string name="label_details">Подробнее</string>
|
||||
|
|
@ -39,35 +43,52 @@
|
|||
<string name="label_file_format">Формат</string>
|
||||
<string name="label_track_length">Длина</string>
|
||||
<string name="label_bit_rate">Битрейт</string>
|
||||
<string name="label_sampling_rate">Частота выборки</string>
|
||||
<string name="action_go_to_artist">Перейти к исполнителю</string>
|
||||
<string name="action_go_to_album">Перейти к альбому</string>
|
||||
<string name="label_current_playing_queue">Очередь воспроизведения</string>
|
||||
<string name="close">Закрыть</string>
|
||||
<string name="save_as_playlist">Сохранить как список воспроизведения</string>
|
||||
<string name="title_activity_search">Поиск</string>
|
||||
<string name="more">ещё</string>
|
||||
<string name="no_results">Нет результатов</string>
|
||||
<string name="action_re_download_artist_image">Обновить изображение исполнителя</string>
|
||||
<string name="updated_artist_image_for">Обновлено изображение исполнителя для</string>
|
||||
<string name="updating">Обновление...</string>
|
||||
<string name="loading">Загрузка...</string>
|
||||
<string name="added_title_to_playing_queue">Добавлена 1 композиция в очередь воспроизведения</string>
|
||||
<string name="added_titles_to_playing_queue_1">Добавлено</string>
|
||||
<string name="added_titles_to_playing_queue_2">" \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f"</string>
|
||||
<string name="action_delete_from_playlist">Удалить из списка воспроизведения</string>
|
||||
<string name="inserted_titles_to_playlist_1">"\u0412\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e "</string>
|
||||
<string name="inserted_titles_to_playlist_2">" \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f"</string>
|
||||
<string name="action_new_playlist">Новый список воспроизведения</string>
|
||||
<string name="action_grid_columns">Столбцы сетки</string>
|
||||
<string name="action_grid_columns_land">Столбцы сетки (ландшафт)</string>
|
||||
<string name="cancel">Отмена</string>
|
||||
<string name="created_playlist">"\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d "</string>
|
||||
<string name="deleted_playlist">"\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0443\u0434\u0430\u043b\u0451\u043d "</string>
|
||||
<string name="create_playlist_failed">"\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f "</string>
|
||||
<string name="delete_playlist">"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f "</string>
|
||||
<string name="rename_playlist">"\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f "</string>
|
||||
<string name="delete_songs_1">"\u0423\u0434\u0430\u043b\u0438\u0442\u044c "</string>
|
||||
<string name="delete_songs_2">" \u043f\u0435\u0441\u043d\u0438?"</string>
|
||||
<string name="delete_warning">"Внимание ! Эта операция необратима."</string>
|
||||
<string name="shuffle_all">Перемешать всё</string>
|
||||
<string name="last_opened">Последнее открытое</string>
|
||||
<string name="title_setting_start_page">Начальная страница</string>
|
||||
<string name="light_theme_name">Светлая</string>
|
||||
<string name="dark_theme_name">Тёмная</string>
|
||||
<string name="equalizer">Эквалайзер</string>
|
||||
<string name="pref_header_ui">Пользовательский интерфейс</string>
|
||||
<string name="pref_title_general_theme">Общая тема</string>
|
||||
<string name="pref_header_audio">Аудио</string>
|
||||
<string name="pref_header_general">Общая</string>
|
||||
<string name="pref_title_set_default_start_page">Установить начальную страницу</string>
|
||||
<string name="title_activity_settings">Настройки</string>
|
||||
<string name="pref_title_transparent_toolbar">Полупрозрачная панель инструментов</string>
|
||||
<string name="no_equalizer">Эквалайзер не найден</string>
|
||||
<string name="navigation_drawer_open">Открыть панель навигации</string>
|
||||
<string name="navigation_drawer_close">Закрыть панель навигации</string>
|
||||
<string name="delete">удалить</string>
|
||||
</resources>
|
||||
|
|
|
|||
5
app/src/main/res/values-tr/strings.xml
Normal file
5
app/src/main/res/values-tr/strings.xml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="action_settings">Ayarlar</string>
|
||||
<string name="action_about">Hakkında</string>
|
||||
</resources>
|
||||
|
|
@ -6,13 +6,13 @@
|
|||
<string name="action_playing_queue">播放队列</string>
|
||||
<string name="action_search">搜索</string>
|
||||
<string name="action_play_next">下一首</string>
|
||||
<string name="action_add_to_playing_queue">加入播放队列“</string>
|
||||
<string name="action_add_to_playing_queue">加入播放队列</string>
|
||||
<string name="action_remove_from_playing_queue">从播放队列移除</string>
|
||||
<string name="action_add_to_playlist">加入播放列表...\"</string>
|
||||
<string name="action_add_to_playlist">加入播放列表</string>
|
||||
<string name="action_tag_editor">音乐标签编辑器</string>
|
||||
<string name="action_delete_from_disk">从储存中删除</string>
|
||||
<string name="action_details">详情</string>
|
||||
<string name="action_go_to">打开...</string>
|
||||
<string name="action_go_to">打开</string>
|
||||
<string name="albums">专辑</string>
|
||||
<string name="artists">艺术家</string>
|
||||
<string name="genres">流派</string>
|
||||
|
|
@ -22,22 +22,22 @@
|
|||
<string name="unknown_album">未知专辑</string>
|
||||
<string name="untitled_song">未命名歌曲</string>
|
||||
<string name="nothing_playing">没有正在播放的曲目</string>
|
||||
<string name="unplayable_file">抱歉-尝试播放该曲目时发生错误</string>
|
||||
<string name="biography_unavailable">抱歉,不能找到与该艺术家匹配的档案。</string>
|
||||
<string name="unplayable_file">抱歉 - 尝试播放该曲目时发生错误</string>
|
||||
<string name="biography_unavailable">抱歉,不能找到与该艺术家匹配的个人简介。</string>
|
||||
<string name="biography">歌手简介</string>
|
||||
<string name="audio_focus_denied">无法获取音频焦点。</string>
|
||||
<string name="tag_editor">音频信息编辑器</string>
|
||||
<string name="song">曲目</string>
|
||||
<string name="tag_editor">音频标签编辑器</string>
|
||||
<string name="song">歌曲</string>
|
||||
<string name="album">专辑</string>
|
||||
<string name="artist">艺术家</string>
|
||||
<string name="genre">流派</string>
|
||||
<string name="album_artist">专辑创作者</string>
|
||||
<string name="year">年份</string>
|
||||
<string name="track">音轨</string>
|
||||
<string name="track_hint">音轨</string>
|
||||
<string name="track_hint">音轨(用2表示第2首歌或用3004表示CD3的第4首歌)</string>
|
||||
<string name="album_or_artist_empty">专辑名称或专辑创作者栏为空</string>
|
||||
<string name="writing_file_number">写作目录</string>
|
||||
<string name="saving_changes">保存更改</string>
|
||||
<string name="writing_file_number">正在写入文档</string>
|
||||
<string name="saving_changes">正在保存更改</string>
|
||||
<string name="label_details">详情</string>
|
||||
<string name="label_file_name">文件名</string>
|
||||
<string name="label_file_path">文件路径</string>
|
||||
|
|
@ -47,8 +47,8 @@
|
|||
<string name="label_bit_rate">比特率</string>
|
||||
<string name="label_sampling_rate">采样率</string>
|
||||
<string name="ok">完成</string>
|
||||
<string name="action_go_to_artist">艺术家</string>
|
||||
<string name="action_go_to_album">专辑</string>
|
||||
<string name="action_go_to_artist">打开艺术家</string>
|
||||
<string name="action_go_to_album">打开专辑</string>
|
||||
<string name="label_current_playing_queue">播放队列</string>
|
||||
<string name="close">关闭</string>
|
||||
<string name="save_as_playlist">保存为播放列表</string>
|
||||
|
|
@ -58,9 +58,47 @@
|
|||
<string name="more">更多</string>
|
||||
<string name="no_results">没有找到结果</string>
|
||||
<string name="action_re_download_artist_image">更新歌手图片</string>
|
||||
<string name="updated_artist_image_for">为更新歌手图片</string>
|
||||
<string name="updating">更新中……</string>
|
||||
<string name="loading">加载中……</string>
|
||||
<string name="updated_artist_image_for">更新歌手图片</string>
|
||||
<string name="updating">正在更新…</string>
|
||||
<string name="loading">加载中…</string>
|
||||
<string name="added_title_to_playing_queue">该曲目已加入播放队列</string>
|
||||
<string name="added_titles_to_playing_queue_1">已添加</string>
|
||||
<string name="added_titles_to_playing_queue_2">\u66f2\u76ee\u5230\u64ad\u653e\u961f\u5217</string>
|
||||
<string name="action_delete_from_playlist">从播放列表中删除</string>
|
||||
<string name="inserted_titles_to_playlist_1">\u5df2\u6dfb\u52a0</string>
|
||||
<string name="inserted_titles_to_playlist_2">\u66f2\u76ee\u5230\u64ad\u653e\u5217\u8868</string>
|
||||
<string name="action_new_playlist">新建播放列表</string>
|
||||
<string name="action_grid_columns">专辑列数</string>
|
||||
<string name="action_grid_columns_land">专辑列数(横屏)</string>
|
||||
<string name="cancel">取消</string>
|
||||
<string name="created_playlist">\u64ad\u653e\u5217\u8868\u5df2\u521b\u5efa</string>
|
||||
<string name="deleted_playlist">\u64ad\u653e\u5217\u8868\u5df2\u5220\u9664</string>
|
||||
<string name="create_playlist_failed">\u65e0\u6cd5\u521b\u5efa\u64ad\u653e\u5217\u8868</string>
|
||||
<string name="delete_playlist">\u5220\u9664\u64ad\u653e\u5217\u8868</string>
|
||||
<string name="rename_playlist">\u91cd\u547d\u540d\u64ad\u653e\u5217\u8868</string>
|
||||
<string name="delete_songs_1">\u5220\u9664</string>
|
||||
<string name="delete_songs_2">\u66f2\u76ee\uff1f</string>
|
||||
<string name="delete_warning">"警告:该操作无法撤销。"</string>
|
||||
<string name="shuffle_all">随机播放全部曲目</string>
|
||||
<string name="last_opened">最后打开</string>
|
||||
<string name="title_setting_start_page">起始页</string>
|
||||
<string name="light_theme_name">Light</string>
|
||||
<string name="dark_theme_name">Dark</string>
|
||||
<string name="equalizer">均衡器</string>
|
||||
<string name="pref_header_ui">界面</string>
|
||||
<string name="pref_title_general_theme">全局主题</string>
|
||||
<string name="pref_header_audio">声音</string>
|
||||
<string name="pref_header_general">通用</string>
|
||||
<string name="pref_title_set_default_start_page">设置默认起始页</string>
|
||||
<string name="title_activity_settings">设置</string>
|
||||
<string name="pref_title_transparent_toolbar">半透明工具栏</string>
|
||||
<string name="pref_title_show_playback_controller_card">卡片式播放控制面板</string>
|
||||
<string name="pref_title_colored_navigation_bar_artists">在艺术家界面使用变色导航栏</string>
|
||||
<string name="pref_title_colored_navigation_bar_albums">在专辑详情界面使用变色导航栏</string>
|
||||
<string name="pref_title_colored_album_footers">使用变色的专辑标签</string>
|
||||
<string name="no_equalizer">没有找到均衡器</string>
|
||||
<string name="no_audio_id">没有音频ID,请播放曲目并重试。</string>
|
||||
<string name="navigation_drawer_open">弹出导航抽屉</string>
|
||||
<string name="navigation_drawer_close">关闭导航抽屉</string>
|
||||
<string name="delete">删除</string>
|
||||
</resources>
|
||||
|
|
|
|||
37
app/src/main/res/values-zh-rTW/strings.xml
Normal file
37
app/src/main/res/values-zh-rTW/strings.xml
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="action_settings">設定</string>
|
||||
<string name="action_about">關於</string>
|
||||
<string name="action_current_playing">現在播放</string>
|
||||
<string name="action_playing_queue">播放列表</string>
|
||||
<string name="action_search">搜尋</string>
|
||||
<string name="action_play_next">下一首</string>
|
||||
<string name="action_add_to_playing_queue">加入播放列表</string>
|
||||
<string name="action_remove_from_playing_queue">從播放列表移除</string>
|
||||
<string name="action_add_to_playlist">加入音樂清單…</string>
|
||||
<string name="action_tag_editor">編輯音樂標籤</string>
|
||||
<string name="action_delete_from_disk">從硬碟刪除</string>
|
||||
<string name="action_details">詳細資訊</string>
|
||||
<string name="action_go_to">打開…</string>
|
||||
<string name="albums">專輯</string>
|
||||
<string name="artists">歌手</string>
|
||||
<string name="genres">音樂類型</string>
|
||||
<string name="songs">歌曲</string>
|
||||
<string name="playlists">音樂清單</string>
|
||||
<string name="unknown_artist">未知的歌手</string>
|
||||
<string name="unknown_album">未知的專輯</string>
|
||||
<string name="untitled_song">無標題歌曲</string>
|
||||
<string name="nothing_playing">沒有正在播放的歌曲</string>
|
||||
<string name="unplayable_file">對不起,嘗試播放歌曲時發生錯誤</string>
|
||||
<string name="biography_unavailable">對不起,無法找到與這位歌手相符的個人簡介</string>
|
||||
<string name="biography">個人簡介</string>
|
||||
<string name="audio_focus_denied">無法獲得音訊焦點</string>
|
||||
<string name="tag_editor">編輯音樂標籤</string>
|
||||
<string name="song">歌曲</string>
|
||||
<string name="album">專輯</string>
|
||||
<string name="artist">歌手</string>
|
||||
<string name="genre">音樂類型</string>
|
||||
<string name="album_artist">專輯歌手</string>
|
||||
<string name="year">年代</string>
|
||||
<string name="track">曲目</string>
|
||||
</resources>
|
||||
Loading…
Add table
Add a link
Reference in a new issue