Switched from Volley to RetroFit + OkHttp for performance and simplicity
This commit is contained in:
parent
b9209781b7
commit
cdba76c933
55 changed files with 1702 additions and 571 deletions
|
|
@ -37,8 +37,9 @@ import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
|||
import com.kabouzeid.gramophone.helper.bitmapblur.StackBlurManager;
|
||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||
import com.kabouzeid.gramophone.interfaces.PaletteColorHolder;
|
||||
import com.kabouzeid.gramophone.lastfm.artist.LastFMArtistBiographyLoader;
|
||||
import com.kabouzeid.gramophone.lastfm.artist.LastFMArtistImageUrlLoader;
|
||||
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.ArtistAlbumLoader;
|
||||
import com.kabouzeid.gramophone.loader.ArtistLoader;
|
||||
import com.kabouzeid.gramophone.loader.ArtistSongLoader;
|
||||
|
|
@ -62,9 +63,14 @@ import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListene
|
|||
import com.squareup.otto.Subscribe;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.InjectView;
|
||||
import hugo.weaving.DebugLog;
|
||||
import retrofit.Callback;
|
||||
import retrofit.RetrofitError;
|
||||
import retrofit.client.Response;
|
||||
|
||||
/**
|
||||
* A lot of hackery is done in this activity. Changing things may will brake the whole activity.
|
||||
|
|
@ -108,6 +114,10 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
|
|||
private ArrayList<Song> songs;
|
||||
private ArrayList<Album> albums;
|
||||
|
||||
private LastFMRestClient lastFMRestClient;
|
||||
|
||||
private StackBlurManager defaultArtistImageBlurManager;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
setStatusBarTransparent();
|
||||
|
|
@ -123,6 +133,8 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
|
|||
setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
|
||||
}
|
||||
|
||||
lastFMRestClient = new LastFMRestClient(this);
|
||||
|
||||
getIntentExtras();
|
||||
initViews();
|
||||
setUpObservableListViewParams();
|
||||
|
|
@ -261,15 +273,21 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
|
|||
}
|
||||
|
||||
private void loadBiography() {
|
||||
LastFMArtistBiographyLoader.loadArtistBio(this, artist.name, new LastFMArtistBiographyLoader.ArtistBioLoaderCallback() {
|
||||
lastFMRestClient.getApiService().getArtistInfo(artist.name, null, new Callback<ArtistInfo>() {
|
||||
@Override
|
||||
public void onArtistBioLoaded(String bio) {
|
||||
public void success(ArtistInfo artistInfo, Response response) {
|
||||
String bio = artistInfo.getArtist().getBio().getContent();
|
||||
if (bio != null && !bio.trim().equals("")) {
|
||||
biography = Html.fromHtml(bio);
|
||||
} else {
|
||||
biography = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failure(RetrofitError error) {
|
||||
biography = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -284,36 +302,68 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
|
|||
private void setUpArtistImageAndApplyPalette(final boolean forceDownload) {
|
||||
BitmapFactory.Options options = new BitmapFactory.Options();
|
||||
options.inSampleSize = 2;
|
||||
final StackBlurManager defaultArtistImageBlurManager = new StackBlurManager(BitmapFactory.decodeResource(getResources(), R.drawable.default_artist_image, options));
|
||||
LastFMArtistImageUrlLoader.loadArtistImageUrl(this, artist.name, forceDownload, new LastFMArtistImageUrlLoader.ArtistImageUrlLoaderCallback() {
|
||||
if (defaultArtistImageBlurManager == null) {
|
||||
defaultArtistImageBlurManager = new StackBlurManager(BitmapFactory.decodeResource(getResources(), R.drawable.default_artist_image, options));
|
||||
}
|
||||
lastFMRestClient.getApiService().getArtistInfo(artist.name, forceDownload ? "no-cache" : null, new Callback<ArtistInfo>() {
|
||||
@DebugLog
|
||||
@Override
|
||||
public void onArtistImageUrlLoaded(final String url) {
|
||||
ImageLoader.getInstance().displayImage(url,
|
||||
artistImage,
|
||||
new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.cacheOnDisk(true)
|
||||
.showImageOnFail(R.drawable.default_artist_image)
|
||||
.resetViewBeforeLoading(true)
|
||||
.build(),
|
||||
new SimpleImageLoadingListener() {
|
||||
@Override
|
||||
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
|
||||
applyPalette(null);
|
||||
artistImageBackground.setImageBitmap(defaultArtistImageBlurManager.process(10));
|
||||
}
|
||||
public void success(ArtistInfo artistInfo, Response response) {
|
||||
if (artistInfo.getArtist() != null) {
|
||||
List<Image> images = artistInfo.getArtist().getImage();
|
||||
int lastElementIndex = images.size() - 1;
|
||||
ImageLoader.getInstance().displayImage(images.get(lastElementIndex).getText(),
|
||||
artistImage,
|
||||
new DisplayImageOptions.Builder()
|
||||
.cacheInMemory(true)
|
||||
.cacheOnDisk(true)
|
||||
.showImageOnFail(R.drawable.default_artist_image)
|
||||
.resetViewBeforeLoading(true)
|
||||
.build(),
|
||||
new SimpleImageLoadingListener() {
|
||||
@DebugLog
|
||||
@Override
|
||||
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
|
||||
resetPaletteAndArtistImageBackground();
|
||||
toastUpdatedArtistImageIfDownloadWasForced();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
|
||||
applyPalette(loadedImage);
|
||||
artistImageBackground.setImageBitmap(new StackBlurManager(loadedImage).process(10));
|
||||
@DebugLog
|
||||
@Override
|
||||
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
|
||||
applyPalette(loadedImage);
|
||||
artistImageBackground.setImageBitmap(new StackBlurManager(loadedImage).process(10));
|
||||
toastUpdatedArtistImageIfDownloadWasForced();
|
||||
}
|
||||
|
||||
private void toastUpdatedArtistImageIfDownloadWasForced() {
|
||||
if (forceDownload) {
|
||||
Toast.makeText(ArtistDetailActivity.this, getString(R.string.updated_artist_image), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@DebugLog
|
||||
@Override
|
||||
public void failure(RetrofitError error) {
|
||||
if (forceDownload) {
|
||||
Toast.makeText(ArtistDetailActivity.this, getString(R.string.could_not_update_artist_image), Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
artistImage.setImageResource(R.drawable.default_artist_image);
|
||||
resetPaletteAndArtistImageBackground();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void resetPaletteAndArtistImageBackground() {
|
||||
applyPalette(null);
|
||||
artistImageBackground.setImageBitmap(defaultArtistImageBlurManager.process(10));
|
||||
}
|
||||
|
||||
private void applyPalette(Bitmap bitmap) {
|
||||
if (bitmap != null) {
|
||||
Palette.from(bitmap)
|
||||
|
|
|
|||
|
|
@ -11,7 +11,9 @@ import android.widget.EditText;
|
|||
import android.widget.Toast;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.lastfm.album.LastFMAlbumImageUrlLoader;
|
||||
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.loader.SongFilePathLoader;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
|
|
@ -35,6 +37,9 @@ import java.util.Map;
|
|||
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.InjectView;
|
||||
import retrofit.Callback;
|
||||
import retrofit.RetrofitError;
|
||||
import retrofit.client.Response;
|
||||
|
||||
public class AlbumTagEditorActivity extends AbsTagEditorActivity implements TextWatcher {
|
||||
|
||||
|
|
@ -51,12 +56,15 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
|
|||
|
||||
private Bitmap albumArtBitmap;
|
||||
private boolean deleteAlbumArt;
|
||||
private LastFMRestClient lastFMRestClient;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
ButterKnife.inject(this);
|
||||
|
||||
lastFMRestClient = new LastFMRestClient(this);
|
||||
|
||||
setUpViews();
|
||||
}
|
||||
|
||||
|
|
@ -95,36 +103,44 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
|
|||
Toast.makeText(this, getResources().getString(R.string.album_or_artist_empty), Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
LastFMAlbumImageUrlLoader.loadAlbumImageUrl(this, albumTitleStr, albumArtistNameStr, new LastFMAlbumImageUrlLoader.AlbumImageUrlLoaderCallback() {
|
||||
@Override
|
||||
public void onAlbumImageUrlLoaded(String url) {
|
||||
ImageLoader.getInstance().loadImage(url,
|
||||
new ImageSize(500, 500),
|
||||
new SimpleImageLoadingListener() {
|
||||
@Override
|
||||
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
|
||||
Toast.makeText(AlbumTagEditorActivity.this,
|
||||
R.string.failed_to_download_album_art, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
lastFMRestClient.getApiService().getAlbumInfo(albumTitleStr, albumArtistNameStr, new Callback<AlbumInfo>() {
|
||||
@Override
|
||||
public void success(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),
|
||||
new SimpleImageLoadingListener() {
|
||||
@Override
|
||||
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
|
||||
toastLoadingFailed();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
|
||||
albumArtBitmap = loadedImage;
|
||||
setImageBitmap(albumArtBitmap);
|
||||
deleteAlbumArt = false;
|
||||
dataChanged();
|
||||
setResult(RESULT_OK);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError() {
|
||||
Toast.makeText(AlbumTagEditorActivity.this,
|
||||
R.string.failed_to_download_album_art, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
@Override
|
||||
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
|
||||
albumArtBitmap = loadedImage;
|
||||
setImageBitmap(albumArtBitmap);
|
||||
deleteAlbumArt = false;
|
||||
dataChanged();
|
||||
setResult(RESULT_OK);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
toastLoadingFailed();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failure(RetrofitError error) {
|
||||
toastLoadingFailed();
|
||||
}
|
||||
|
||||
private void toastLoadingFailed() {
|
||||
Toast.makeText(AlbumTagEditorActivity.this,
|
||||
R.string.could_not_download_album_cover, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -190,7 +206,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
|
|||
@Override
|
||||
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
|
||||
Toast.makeText(AlbumTagEditorActivity.this,
|
||||
R.string.failed_to_download_album_art, Toast.LENGTH_SHORT).show();
|
||||
R.string.could_not_download_album_cover, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue