Replaced Ion with Glide. Big performance boost, and should also fix the FCs many people get because of recycled bitmaps. Fixed the ripple flickering by using ?selectableItemBackground on Lollipop again instead of custom ripple. Search is broken for now, remake in progress.

This commit is contained in:
Karim Abou Zeid 2015-04-22 21:17:38 +02:00
commit ee2b661eb4
34 changed files with 448 additions and 667 deletions

View file

@ -22,6 +22,10 @@ import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.Request;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.appwidget.MusicPlayerWidget;
@ -32,9 +36,6 @@ 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.koushikdutta.async.future.Future;
import com.koushikdutta.async.future.FutureCallback;
import com.koushikdutta.ion.Ion;
import java.io.IOException;
import java.util.ArrayList;
@ -79,7 +80,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
private PlayingNotificationHelper playingNotificationHelper;
private AudioManager audioManager;
private RemoteControlClient remoteControlClient;
private Future remoteControlClientAlbumArtTask;
private Request remoteControlClientAlbumArtRequest;
private PowerManager.WakeLock wakeLock;
public MusicService() {
@ -357,17 +358,26 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
.putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, song.duration)
.apply();
if (remoteControlClientAlbumArtTask != null) remoteControlClientAlbumArtTask.cancel();
remoteControlClientAlbumArtTask = Ion.with(this)
.load(MusicUtil.getAlbumArtUri(song.albumId).toString())
.noCache()
if (remoteControlClientAlbumArtRequest != null) remoteControlClientAlbumArtRequest.clear();
remoteControlClientAlbumArtRequest = Glide.with(this)
.loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId))
.asBitmap()
.setCallback(new FutureCallback<Bitmap>() {
.skipMemoryCache(true)
.listener(new RequestListener<Uri, Bitmap>() {
@Override
public void onCompleted(Exception e, Bitmap result) {
updateRemoteControlClientBitmap(result);
public boolean onException(Exception e, Uri model, Target<Bitmap> target, boolean isFirstResource) {
updateRemoteControlClientBitmap(null);
return false;
}
});
@Override
public boolean onResourceReady(Bitmap resource, Uri model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {
updateRemoteControlClientBitmap(resource);
return false;
}
})
.into(-1, -1)
.getRequest();
}
private void updateRemoteControlClientBitmap(final Bitmap albumArt) {