Switched from Volley to RetroFit + OkHttp for performance and simplicity

This commit is contained in:
Karim Abou Zeid 2015-06-29 21:38:09 +02:00
commit cdba76c933
55 changed files with 1702 additions and 571 deletions

View file

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

View file

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