Fixed low res artist and album images from last.fm due to a slight api change from them. New implementation should be safe upon future api changes like this.
This commit is contained in:
parent
73f3214b23
commit
3e8e34a95c
4 changed files with 106 additions and 14 deletions
|
|
@ -7,10 +7,10 @@ import android.support.annotation.Nullable;
|
|||
|
||||
import com.kabouzeid.gramophone.lastfm.rest.LastFMRestClient;
|
||||
import com.kabouzeid.gramophone.lastfm.rest.model.artistinfo.ArtistInfo;
|
||||
import com.kabouzeid.gramophone.lastfm.rest.model.artistinfo.Image;
|
||||
import com.kabouzeid.gramophone.loader.AlbumSongLoader;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.util.ImageUtil;
|
||||
import com.kabouzeid.gramophone.util.LastFMUtil;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
|
||||
|
|
@ -22,7 +22,6 @@ import java.io.FileNotFoundException;
|
|||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
|
|
@ -64,8 +63,7 @@ public class PhonographImageDownloader extends BaseImageDownloader {
|
|||
}
|
||||
|
||||
ArtistInfo artistInfo = lastFMRestClient.getApiService().getArtistInfo(artistName, data[0].equals("") ? null : data[0]);
|
||||
List<Image> images = artistInfo.getArtist().getImage();
|
||||
return super.getStream(images.get(images.size() - 1).getText(), extra);
|
||||
return super.getStream(LastFMUtil.getLargestArtistImageUrl(artistInfo.getArtist().getImage()), extra);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.kabouzeid.gramophone.ui.activities.tageditor;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Point;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
|
|
@ -14,14 +15,18 @@ import android.widget.Toast;
|
|||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.lastfm.rest.LastFMRestClient;
|
||||
import com.kabouzeid.gramophone.lastfm.rest.model.albuminfo.AlbumInfo;
|
||||
import com.kabouzeid.gramophone.lastfm.rest.model.albuminfo.Image;
|
||||
import com.kabouzeid.gramophone.loader.AlbumSongLoader;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.util.ImageUtil;
|
||||
import com.kabouzeid.gramophone.util.LastFMUtil;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||
import com.nostra13.universalimageloader.core.assist.FailReason;
|
||||
import com.nostra13.universalimageloader.core.assist.ImageSize;
|
||||
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
|
||||
import com.nostra13.universalimageloader.core.process.BitmapProcessor;
|
||||
|
||||
import org.jaudiotagger.tag.FieldKey;
|
||||
import org.jaudiotagger.tag.images.Artwork;
|
||||
|
|
@ -102,10 +107,18 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
|
|||
@Override
|
||||
public void success(@NonNull AlbumInfo albumInfo, Response response) {
|
||||
if (albumInfo.getAlbum() != null) {
|
||||
List<Image> images = albumInfo.getAlbum().getImage();
|
||||
int lastIndexOfImages = images.size() - 1;
|
||||
ImageLoader.getInstance().loadImage(images.get(lastIndexOfImages).getText(),
|
||||
new ImageSize(500, 500),
|
||||
Point size = Util.getScreenSize(AlbumTagEditorActivity.this);
|
||||
final int screenWidth = Math.min(size.x, size.y);
|
||||
ImageLoader.getInstance().loadImage(LastFMUtil.getLargestAlbumImageUrl(albumInfo.getAlbum().getImage()),
|
||||
new DisplayImageOptions.Builder()
|
||||
.preProcessor(new BitmapProcessor() {
|
||||
@Override
|
||||
public Bitmap process(Bitmap bitmap) {
|
||||
//noinspection SuspiciousNameCombination
|
||||
return ImageUtil.getResizedBitmap(bitmap, screenWidth, screenWidth, true);
|
||||
}
|
||||
})
|
||||
.build(),
|
||||
new SimpleImageLoadingListener() {
|
||||
@Override
|
||||
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
|
||||
|
|
@ -114,6 +127,10 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
|
|||
|
||||
@Override
|
||||
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
|
||||
if (loadedImage == null) {
|
||||
onLoadingFailed(imageUri, view, null);
|
||||
return;
|
||||
}
|
||||
albumArtBitmap = loadedImage;
|
||||
setImageBitmap(albumArtBitmap);
|
||||
deleteAlbumArt = false;
|
||||
|
|
|
|||
|
|
@ -7,8 +7,6 @@ import android.graphics.Matrix;
|
|||
import android.graphics.Point;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.view.Display;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import org.jaudiotagger.audio.AudioFile;
|
||||
import org.jaudiotagger.audio.AudioFileIO;
|
||||
|
|
@ -93,9 +91,7 @@ public class ImageUtil {
|
|||
}
|
||||
|
||||
private static int getSmallerScreenSize(@NonNull Context c) {
|
||||
Display display = ((WindowManager) c.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
|
||||
Point size = new Point();
|
||||
display.getSize(size);
|
||||
Point size = Util.getScreenSize(c);
|
||||
return Math.min(size.x, size.y);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,81 @@
|
|||
package com.kabouzeid.gramophone.util;
|
||||
|
||||
import com.kabouzeid.gramophone.lastfm.rest.model.artistinfo.Image;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class LastFMUtil {
|
||||
public enum ImageSize {
|
||||
SMALL, MEDIUM, LARGE, EXTRALARGE, MEGA, UNKNOWN
|
||||
}
|
||||
|
||||
public static String getLargestArtistImageUrl(List<Image> images) {
|
||||
Map<ImageSize, String> imageUrls = new HashMap<>();
|
||||
for (Image image : images) {
|
||||
ImageSize size = null;
|
||||
final String attribute = image.getSize();
|
||||
if (attribute == null) {
|
||||
size = ImageSize.UNKNOWN;
|
||||
} else {
|
||||
try {
|
||||
size = ImageSize.valueOf(attribute.toUpperCase(Locale.ENGLISH));
|
||||
} catch (final IllegalArgumentException e) {
|
||||
// if they suddenly again introduce a new image size
|
||||
}
|
||||
}
|
||||
if (size != null) {
|
||||
imageUrls.put(size, image.getText());
|
||||
}
|
||||
}
|
||||
return getLargestImageUrl(imageUrls);
|
||||
}
|
||||
|
||||
public static String getLargestAlbumImageUrl(List<com.kabouzeid.gramophone.lastfm.rest.model.albuminfo.Image> images) {
|
||||
Map<ImageSize, String> imageUrls = new HashMap<>();
|
||||
for (com.kabouzeid.gramophone.lastfm.rest.model.albuminfo.Image image : images) {
|
||||
ImageSize size = null;
|
||||
final String attribute = image.getSize();
|
||||
if (attribute == null) {
|
||||
size = ImageSize.UNKNOWN;
|
||||
} else {
|
||||
try {
|
||||
size = ImageSize.valueOf(attribute.toUpperCase(Locale.ENGLISH));
|
||||
} catch (final IllegalArgumentException e) {
|
||||
// if they suddenly again introduce a new image size
|
||||
}
|
||||
}
|
||||
if (size != null) {
|
||||
imageUrls.put(size, image.getText());
|
||||
}
|
||||
}
|
||||
return getLargestImageUrl(imageUrls);
|
||||
}
|
||||
|
||||
private static String getLargestImageUrl(Map<ImageSize, String> imageUrls) {
|
||||
if (imageUrls.containsKey(ImageSize.MEGA)) {
|
||||
return imageUrls.get(ImageSize.MEGA);
|
||||
}
|
||||
if (imageUrls.containsKey(ImageSize.EXTRALARGE)) {
|
||||
return imageUrls.get(ImageSize.EXTRALARGE);
|
||||
}
|
||||
if (imageUrls.containsKey(ImageSize.LARGE)) {
|
||||
return imageUrls.get(ImageSize.LARGE);
|
||||
}
|
||||
if (imageUrls.containsKey(ImageSize.MEDIUM)) {
|
||||
return imageUrls.get(ImageSize.MEDIUM);
|
||||
}
|
||||
if (imageUrls.containsKey(ImageSize.SMALL)) {
|
||||
return imageUrls.get(ImageSize.SMALL);
|
||||
}
|
||||
if (imageUrls.containsKey(ImageSize.UNKNOWN)) {
|
||||
return imageUrls.get(ImageSize.UNKNOWN);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue