From c7125b13861fc82ce939fab53854f483e56e48bf Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Tue, 19 May 2015 18:45:57 +0200 Subject: [PATCH] Replaced Glide with UIL. Should finally fix all image loading problems. --- app/build.gradle | 2 +- .../java/com/kabouzeid/gramophone/App.java | 5 +- .../gramophone/adapter/AlbumAdapter.java | 45 ++++++------ .../gramophone/adapter/ArtistAdapter.java | 19 +++-- .../adapter/ArtistAlbumAdapter.java | 22 +++--- .../gramophone/adapter/SearchAdapter.java | 35 +++++---- .../songadapter/ArtistSongAdapter.java | 21 +++--- .../songadapter/PlaylistSongAdapter.java | 21 +++--- .../adapter/songadapter/SongAdapter.java | 21 +++--- .../appwidget/MusicPlayerWidget.java | 51 ++++++------- .../helper/PlayingNotificationHelper.java | 51 ++++++------- .../gramophone/service/MusicService.java | 48 ++++++------- .../ui/activities/AlbumDetailActivity.java | 41 +++++------ .../ui/activities/ArtistDetailActivity.java | 34 ++++----- .../ui/activities/MainActivity.java | 41 +++-------- .../activities/MusicControllerActivity.java | 53 +++++++------- .../tageditor/AbsTagEditorActivity.java | 10 +-- .../tageditor/AlbumTagEditorActivity.java | 71 ++++++++----------- 18 files changed, 275 insertions(+), 316 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b846ff97..95c15b0f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -67,7 +67,7 @@ dependencies { compile 'com.mcxiaoke.volley:library:1.0.15' compile 'com.squareup:otto:1.3.6' compile 'de.hdodenhof:circleimageview:1.2.2' - compile 'com.github.bumptech.glide:glide:3.6.0' + compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3' compile 'com.afollestad:material-dialogs:0.7.4.1' compile 'com.jpardogo.materialtabstrip:library:1.0.9' diff --git a/app/src/main/java/com/kabouzeid/gramophone/App.java b/app/src/main/java/com/kabouzeid/gramophone/App.java index 1d7eb3f4..a1a5b0a9 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/App.java +++ b/app/src/main/java/com/kabouzeid/gramophone/App.java @@ -7,6 +7,8 @@ import com.android.volley.RequestQueue; import com.android.volley.toolbox.Volley; import com.crashlytics.android.Crashlytics; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.squareup.otto.Bus; import com.squareup.otto.ThreadEnforcer; @@ -26,7 +28,8 @@ public class App extends Application { super.onCreate(); Fabric.with(this, new Crashlytics()); MusicPlayerRemote.init(this); - //Picasso.with(this).setIndicatorsEnabled(true);// debug only + ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this).build(); + ImageLoader.getInstance().init(config); } public void addToVolleyRequestQueue(Request request) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java index 068dde83..9d263429 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java @@ -2,7 +2,6 @@ package com.kabouzeid.gramophone.adapter; import android.app.Activity; import android.graphics.Bitmap; -import android.net.Uri; import android.support.v4.util.Pair; import android.support.v7.graphics.Palette; import android.support.v7.widget.RecyclerView; @@ -13,13 +12,6 @@ import android.widget.ImageView; import android.widget.TextView; import com.afollestad.materialdialogs.util.DialogUtils; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.bitmap.GlideBitmapDrawable; -import com.bumptech.glide.load.resource.drawable.GlideDrawable; -import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.target.Target; -import com.bumptech.glide.signature.StringSignature; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.loader.AlbumLoader; @@ -31,6 +23,10 @@ import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.PreferenceUtils; import com.kabouzeid.gramophone.util.ViewUtil; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.FailReason; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; import com.squareup.otto.Subscribe; import java.util.List; @@ -59,28 +55,27 @@ public class AlbumAdapter extends RecyclerView.Adapter holder.title.setText(album.title); holder.artist.setText(album.artistName); - Glide.with(activity) - .loadFromMediaStore(MusicUtil.getAlbumArtUri(album.id)) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .signature(new StringSignature(album.albumArtPath)) - .error(R.drawable.default_album_art) - .placeholder(R.drawable.default_album_art) - .listener(new RequestListener() { + + ImageLoader.getInstance().displayImage( + MusicUtil.getAlbumArtUri(album.id).toString(), + holder.albumArt, + new DisplayImageOptions.Builder() + .cacheInMemory(true) + .showImageOnFail(R.drawable.default_album_art) + .resetViewBeforeLoading(true) + .build(), + new SimpleImageLoadingListener() { @Override - public boolean onException(Exception e, Uri model, Target target, boolean isFirstResource) { - if (usePalette) - applyPalette(null, holder.title, holder.artist, holder.footer); - return false; + public void onLoadingFailed(String imageUri, View view, FailReason failReason) { + paletteBlackAndWhite(holder.title, holder.artist, holder.footer); } @Override - public boolean onResourceReady(GlideDrawable resource, Uri model, Target target, boolean isFromMemoryCache, boolean isFirstResource) { - if (usePalette) - applyPalette(((GlideBitmapDrawable) resource).getBitmap(), holder.title, holder.artist, holder.footer); - return false; + public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + applyPalette(loadedImage, holder.title, holder.artist, holder.footer); } - }) - .into(holder.albumArt); + } + ); } @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAdapter.java index 1fe9358a..ab70f0d1 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAdapter.java @@ -9,7 +9,6 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import com.bumptech.glide.Glide; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.lastfm.artist.LastFMArtistThumbnailUrlLoader; @@ -19,6 +18,8 @@ import com.kabouzeid.gramophone.model.DataBaseChangedEvent; import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.NavigationUtil; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; import com.squareup.otto.Subscribe; import java.util.List; @@ -51,16 +52,20 @@ public class ArtistAdapter extends RecyclerView.Adapter { songTitle.setText(song.title); songInfo.setText(song.albumName); - Glide.with(activity) - .loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .signature(new StringSignature(String.valueOf(song.dateModified))) - .error(R.drawable.default_album_art) - .placeholder(R.drawable.default_album_art) - .into(albumArt); + ImageLoader.getInstance().displayImage( + MusicUtil.getAlbumArtUri(song.albumId).toString(), + albumArt, + new DisplayImageOptions.Builder() + .cacheInMemory(true) + .showImageOnFail(R.drawable.default_album_art) + .resetViewBeforeLoading(true) + .build() + ); final ImageView overflowButton = (ImageView) convertView.findViewById(R.id.menu); overflowButton.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java index 8929a8dc..f97cab2a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java @@ -11,9 +11,6 @@ import android.widget.ImageView; import android.widget.PopupMenu; import android.widget.TextView; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.signature.StringSignature; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.helper.MenuItemClickHelper; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; @@ -23,6 +20,8 @@ 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.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; import java.util.ArrayList; import java.util.List; @@ -53,13 +52,15 @@ public class PlaylistSongAdapter extends RecyclerView.Adapter { holder.songTitle.setText(song.title); holder.songInfo.setText(song.artistName); - Glide.with(activity) - .loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .signature(new StringSignature(String.valueOf(song.dateModified))) - .error(R.drawable.default_album_art) - .placeholder(R.drawable.default_album_art) - .into(holder.albumArt); + ImageLoader.getInstance().displayImage( + MusicUtil.getAlbumArtUri(song.albumId).toString(), + holder.albumArt, + new DisplayImageOptions.Builder() + .cacheInMemory(true) + .showImageOnFail(R.drawable.default_album_art) + .resetViewBeforeLoading(true) + .build() + ); } else { holder.songTitle.setText(activity.getResources().getString(R.string.shuffle_all).toUpperCase()); holder.songTitle.setTextColor(ThemeSingleton.get().positiveColor); diff --git a/app/src/main/java/com/kabouzeid/gramophone/appwidget/MusicPlayerWidget.java b/app/src/main/java/com/kabouzeid/gramophone/appwidget/MusicPlayerWidget.java index 3b603456..5ae0127c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appwidget/MusicPlayerWidget.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appwidget/MusicPlayerWidget.java @@ -7,24 +7,25 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; -import android.net.Uri; +import android.view.View; import android.widget.RemoteViews; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.request.Request; -import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.target.Target; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; 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.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.FailReason; +import com.nostra13.universalimageloader.core.assist.ImageSize; +import com.nostra13.universalimageloader.core.assist.ViewScaleType; +import com.nostra13.universalimageloader.core.imageaware.NonViewAware; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; public class MusicPlayerWidget extends AppWidgetProvider { private static RemoteViews widgetLayout; - private static Request albumArtRequest; + private static String currentAlbumArtUri; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { @@ -62,28 +63,22 @@ public class MusicPlayerWidget extends AppWidgetProvider { } private static void loadAlbumArt(final Context context, final Song song) { - if (albumArtRequest != null) albumArtRequest.clear(); - final int notificationAlbumArtSize = context.getResources().getDimensionPixelSize(R.dimen.app_widget_small_artwork_height); - albumArtRequest = Glide.with(context) - .loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) - .asBitmap() - .diskCacheStrategy(DiskCacheStrategy.NONE) - .skipMemoryCache(true) - .listener(new RequestListener() { - @Override - public boolean onException(Exception e, Uri model, Target target, boolean isFirstResource) { - setAlbumArt(context, null); - return false; - } + if (song != null) { + currentAlbumArtUri = MusicUtil.getAlbumArtUri(song.albumId).toString(); + ImageLoader.getInstance().displayImage(currentAlbumArtUri, new NonViewAware(new ImageSize(-1, -1), ViewScaleType.CROP), new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + if (currentAlbumArtUri.equals(imageUri)) + setAlbumArt(context, loadedImage); + } - @Override - public boolean onResourceReady(Bitmap resource, Uri model, Target target, boolean isFromMemoryCache, boolean isFirstResource) { - setAlbumArt(context, resource); - return false; - } - }) - .into(notificationAlbumArtSize, notificationAlbumArtSize) - .getRequest(); + @Override + public void onLoadingFailed(String imageUri, View view, FailReason failReason) { + if (currentAlbumArtUri.equals(imageUri)) + setAlbumArt(context, null); + } + }); + } } private static void setAlbumArt(final Context context, final Bitmap albumArt) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java index 25bbac05..97845581 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java @@ -12,20 +12,21 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; -import android.net.Uri; import android.support.v4.app.NotificationCompat; +import android.view.View; import android.widget.RemoteViews; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.request.Request; -import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.target.Target; import com.kabouzeid.gramophone.R; 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.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.FailReason; +import com.nostra13.universalimageloader.core.assist.ImageSize; +import com.nostra13.universalimageloader.core.assist.ViewScaleType; +import com.nostra13.universalimageloader.core.imageaware.NonViewAware; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; public class PlayingNotificationHelper { @@ -40,8 +41,8 @@ public class PlayingNotificationHelper { private RemoteViews notificationLayout; private RemoteViews notificationLayoutExpanded; - private Request albumArtRequest; private Song currentSong; + private String currentAlbumArtUri; public PlayingNotificationHelper(final MusicService service) { this.service = service; @@ -161,30 +162,20 @@ public class PlayingNotificationHelper { } private void loadAlbumArt() { - if (currentSong != null) { - if (albumArtRequest != null) albumArtRequest.clear(); - final int notificationAlbumArtSize = service.getResources().getDimensionPixelSize(R.dimen.notification_albumart_size); - albumArtRequest = Glide.with(service) - .loadFromMediaStore(MusicUtil.getAlbumArtUri(currentSong.albumId)) - .asBitmap() - .diskCacheStrategy(DiskCacheStrategy.NONE) - .skipMemoryCache(true) - .listener(new RequestListener() { - @Override - public boolean onException(Exception e, Uri model, Target target, boolean isFirstResource) { - setAlbumArt(null); - return false; - } + currentAlbumArtUri = MusicUtil.getAlbumArtUri(currentSong.albumId).toString(); + ImageLoader.getInstance().displayImage(currentAlbumArtUri, new NonViewAware(new ImageSize(-1, -1), ViewScaleType.CROP), new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + if (currentAlbumArtUri.equals(imageUri)) + setAlbumArt(loadedImage); + } - @Override - public boolean onResourceReady(Bitmap resource, Uri model, Target target, boolean isFromMemoryCache, boolean isFirstResource) { - setAlbumArt(resource); - return false; - } - }) - .into(notificationAlbumArtSize, notificationAlbumArtSize) - .getRequest(); - } + @Override + public void onLoadingFailed(String imageUri, View view, FailReason failReason) { + if (currentAlbumArtUri.equals(imageUri)) + setAlbumArt(null); + } + }); } private void setAlbumArt(Bitmap albumArt) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java index d841eb31..36eac243 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java @@ -20,13 +20,9 @@ import android.os.IBinder; import android.os.PowerManager; import android.preference.PreferenceManager; import android.util.Log; +import android.view.View; import android.widget.Toast; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -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; @@ -37,6 +33,12 @@ 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.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.FailReason; +import com.nostra13.universalimageloader.core.assist.ImageSize; +import com.nostra13.universalimageloader.core.assist.ViewScaleType; +import com.nostra13.universalimageloader.core.imageaware.NonViewAware; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; import java.io.IOException; import java.util.ArrayList; @@ -81,8 +83,8 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe private PlayingNotificationHelper playingNotificationHelper; private AudioManager audioManager; private RemoteControlClient remoteControlClient; - private Request remoteControlClientAlbumArtRequest; private PowerManager.WakeLock wakeLock; + private String currentAlbumArtUri; public MusicService() { } @@ -358,28 +360,20 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe .putString(MediaMetadataRetriever.METADATA_KEY_TITLE, song.title) .putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, song.duration) .apply(); + currentAlbumArtUri = MusicUtil.getAlbumArtUri(song.albumId).toString(); + ImageLoader.getInstance().displayImage(currentAlbumArtUri, new NonViewAware(new ImageSize(-1, -1), ViewScaleType.CROP), new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + if (currentAlbumArtUri.equals(imageUri)) + updateRemoteControlClientBitmap(loadedImage); + } - if (remoteControlClientAlbumArtRequest != null) remoteControlClientAlbumArtRequest.clear(); - remoteControlClientAlbumArtRequest = Glide.with(this) - .loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) - .asBitmap() - .diskCacheStrategy(DiskCacheStrategy.NONE) - .skipMemoryCache(true) - .listener(new RequestListener() { - @Override - public boolean onException(Exception e, Uri model, Target target, boolean isFirstResource) { - updateRemoteControlClientBitmap(null); - return false; - } - - @Override - public boolean onResourceReady(Bitmap resource, Uri model, Target target, boolean isFromMemoryCache, boolean isFirstResource) { - updateRemoteControlClientBitmap(resource); - return false; - } - }) - .into(-1, -1) - .getRequest(); + @Override + public void onLoadingFailed(String imageUri, View view, FailReason failReason) { + if (currentAlbumArtUri.equals(imageUri)) + updateRemoteControlClientBitmap(null); + } + }); } private void updateRemoteControlClientBitmap(final Bitmap albumArt) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java index 26c0bafa..8bc381d4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java @@ -4,7 +4,6 @@ import android.annotation.TargetApi; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; -import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.v4.util.Pair; @@ -18,13 +17,6 @@ import android.widget.ImageView; import android.widget.TextView; import com.afollestad.materialdialogs.util.DialogUtils; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.bitmap.GlideBitmapDrawable; -import com.bumptech.glide.load.resource.drawable.GlideDrawable; -import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.target.Target; -import com.bumptech.glide.signature.StringSignature; import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; @@ -46,6 +38,10 @@ import com.kabouzeid.gramophone.util.PreferenceUtils; import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.ViewUtil; import com.nineoldandroids.view.ViewHelper; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.FailReason; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; import com.squareup.otto.Subscribe; import java.util.ArrayList; @@ -176,31 +172,30 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH } private void setUpAlbumArtAndApplyPalette() { - Glide.with(AlbumDetailActivity.this) - .loadFromMediaStore(MusicUtil.getAlbumArtUri(album.id)) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .signature(new StringSignature(album.albumArtPath)) - .error(R.drawable.default_album_art) - .listener(new RequestListener() { + ImageLoader.getInstance().displayImage( + MusicUtil.getAlbumArtUri(album.id).toString(), + albumArtImageView, + new DisplayImageOptions.Builder() + .cacheInMemory(true) + .showImageOnFail(R.drawable.default_album_art) + .resetViewBeforeLoading(true) + .build(), + new SimpleImageLoadingListener() { @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override - public boolean onException(Exception e, Uri model, Target target, boolean isFirstResource) { + public void onLoadingFailed(String imageUri, View view, FailReason failReason) { applyPalette(null); if (Util.isAtLeastLollipop()) startPostponedEnterTransition(); - return false; } @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override - public boolean onResourceReady(GlideDrawable resource, Uri model, Target target, boolean isFromMemoryCache, boolean isFirstResource) { - applyPalette(((GlideBitmapDrawable) resource).getBitmap()); + public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + applyPalette(loadedImage); if (Util.isAtLeastLollipop()) startPostponedEnterTransition(); - // workaround for glide not working well with shared element, dont remove this redundant looking call! - albumArtImageView.setImageDrawable(resource); - return false; } - }) - .into(albumArtImageView); + } + ); } private void applyPalette(Bitmap bitmap) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java index 8f6b893f..02a3a22b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java @@ -24,11 +24,6 @@ import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.util.DialogUtils; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.resource.bitmap.GlideBitmapDrawable; -import com.bumptech.glide.load.resource.drawable.GlideDrawable; -import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.target.Target; import com.github.ksoichiro.android.observablescrollview.ObservableListView; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; @@ -53,6 +48,10 @@ import com.kabouzeid.gramophone.util.PreferenceUtils; import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.ViewUtil; import com.nineoldandroids.view.ViewHelper; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.FailReason; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; import com.squareup.otto.Subscribe; import java.util.ArrayList; @@ -268,23 +267,26 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor LastFMArtistImageUrlLoader.loadArtistImageUrl(this, artist.name, forceDownload, new LastFMArtistImageUrlLoader.ArtistImageUrlLoaderCallback() { @Override public void onArtistImageUrlLoaded(final String url) { - Glide.with(ArtistDetailActivity.this) - .load(url) - .error(R.drawable.default_artist_image) - .listener(new RequestListener() { + 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 boolean onException(Exception e, String model, Target target, boolean isFirstResource) { + public void onLoadingFailed(String imageUri, View view, FailReason failReason) { applyPalette(null); - return false; } @Override - public boolean onResourceReady(GlideDrawable resource, String model, Target target, boolean isFromMemoryCache, boolean isFirstResource) { - applyPalette(((GlideBitmapDrawable) resource).getBitmap()); - return false; + public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + applyPalette(loadedImage); } - }) - .into(artistImage); + } + ); } }); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java index b58ece05..1de1e71e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java @@ -27,12 +27,6 @@ import android.widget.FrameLayout; import com.afollestad.materialdialogs.ThemeSingleton; import com.astuetz.PagerSlidingTabStrip; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.drawable.GlideDrawable; -import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.target.Target; -import com.bumptech.glide.signature.StringSignature; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.PagerAdapter; import com.kabouzeid.gramophone.dialogs.AboutDialog; @@ -54,6 +48,8 @@ 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.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; import java.lang.reflect.Field; import java.util.ArrayList; @@ -73,8 +69,6 @@ public class MainActivity extends AbsFabActivity private ViewPager viewPager; private PagerSlidingTabStrip slidingTabLayout; private int currentPage = -1; - private int navigationDrawerImageWidth = -1; - private int navigationDrawerImageHeight = -1; @Override protected void onCreate(Bundle savedInstanceState) { @@ -194,9 +188,6 @@ public class MainActivity extends AbsFabActivity } navDrawerFrame.setLayoutParams(new DrawerLayout.LayoutParams(navDrawerWidth, DrawerLayout.LayoutParams.MATCH_PARENT, Gravity.START)); - - navigationDrawerImageWidth = navDrawerWidth; - navigationDrawerImageHeight = getResources().getDimensionPixelSize(R.dimen.navigation_drawer_image_height); } @Override @@ -216,25 +207,15 @@ public class MainActivity extends AbsFabActivity if (song.id != -1) { navigationDrawerFragment.getSongTitle().setText(song.title); navigationDrawerFragment.getSongArtist().setText(song.artistName); - Glide.with(this) - .loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) - .centerCrop() - .diskCacheStrategy(DiskCacheStrategy.NONE) - .signature(new StringSignature(String.valueOf(song.dateModified))) - .listener(new RequestListener() { - @Override - public boolean onException(Exception e, Uri model, Target target, boolean isFirstResource) { - navigationDrawerFragment.getAlbumArtImageView().setImageResource(R.drawable.default_album_art); - return false; - } - - @Override - public boolean onResourceReady(GlideDrawable resource, Uri model, Target target, boolean isFromMemoryCache, boolean isFirstResource) { - navigationDrawerFragment.getAlbumArtImageView().setImageDrawable(resource); - return false; - } - }) - .into(navigationDrawerImageWidth, navigationDrawerImageHeight); + ImageLoader.getInstance().displayImage( + MusicUtil.getAlbumArtUri(song.albumId).toString(), + navigationDrawerFragment.getAlbumArtImageView(), + new DisplayImageOptions.Builder() + .cacheInMemory(true) + .showImageOnFail(R.drawable.default_album_art) + .resetViewBeforeLoading(true) + .build() + ); } } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java index b0cb94d4..f784b720 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java @@ -5,7 +5,6 @@ import android.content.Intent; import android.content.res.ColorStateList; import android.graphics.Bitmap; import android.graphics.PorterDuff; -import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.v7.graphics.Palette; @@ -22,13 +21,6 @@ import android.widget.TextView; import com.afollestad.materialdialogs.ThemeSingleton; import com.afollestad.materialdialogs.util.DialogUtils; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.bitmap.GlideBitmapDrawable; -import com.bumptech.glide.load.resource.drawable.GlideDrawable; -import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.target.Target; -import com.bumptech.glide.signature.StringSignature; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; @@ -49,6 +41,10 @@ import com.kabouzeid.gramophone.util.PreferenceUtils; import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.ViewUtil; import com.nineoldandroids.view.ViewPropertyAnimator; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.FailReason; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; import com.squareup.otto.Subscribe; import java.io.File; @@ -305,26 +301,26 @@ public class MusicControllerActivity extends AbsFabActivity { } private void setUpAlbumArtAndApplyPalette() { - Glide.with(this) - .loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .signature(new StringSignature(String.valueOf(song.dateModified))) - .error(R.drawable.default_album_art) - .placeholder(R.drawable.default_album_art) - .listener(new RequestListener() { + ImageLoader.getInstance().displayImage( + MusicUtil.getAlbumArtUri(song.albumId).toString(), + albumArt, + new DisplayImageOptions.Builder() + .cacheInMemory(true) + .showImageOnFail(R.drawable.default_album_art) + .resetViewBeforeLoading(true) + .build(), + new SimpleImageLoadingListener() { @Override - public boolean onException(Exception e, Uri model, Target target, boolean isFirstResource) { + public void onLoadingFailed(String imageUri, View view, FailReason failReason) { applyPalette(null); - return false; } @Override - public boolean onResourceReady(GlideDrawable resource, Uri model, Target target, boolean isFromMemoryCache, boolean isFirstResource) { - applyPalette(((GlideBitmapDrawable) resource).getBitmap()); - return false; + public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + applyPalette(loadedImage); } - }) - .into(albumArt); + } + ); } private void applyPalette(Bitmap bitmap) { @@ -381,10 +377,15 @@ public class MusicControllerActivity extends AbsFabActivity { LastFMArtistImageUrlLoader.loadArtistImageUrl(this, song.artistName, false, new LastFMArtistImageUrlLoader.ArtistImageUrlLoaderCallback() { @Override public void onArtistImageUrlLoaded(String url) { - Glide.with(MusicControllerActivity.this) - .load(url) - .error(R.drawable.default_artist_image) - .into(artistImage); + ImageLoader.getInstance().displayImage(url, + artistImage, + new DisplayImageOptions.Builder() + .cacheInMemory(true) + .cacheOnDisk(true) + .showImageOnFail(R.drawable.default_artist_image) + .resetViewBeforeLoading(true) + .build() + ); } }); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java index ee3c06a9..efc49d4d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java @@ -20,7 +20,6 @@ import android.widget.ImageView; import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.util.DialogUtils; -import com.bumptech.glide.Glide; import com.github.ksoichiro.android.observablescrollview.ObservableScrollView; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; @@ -36,6 +35,7 @@ import com.kabouzeid.gramophone.util.ViewUtil; import com.melnykov.fab.FloatingActionButton; import com.nineoldandroids.view.ViewHelper; import com.nineoldandroids.view.ViewPropertyAnimator; +import com.nostra13.universalimageloader.core.ImageLoader; import org.jaudiotagger.audio.AudioFile; import org.jaudiotagger.audio.AudioFileIO; @@ -382,11 +382,11 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { progressDialog.setContent(getString(R.string.rescanning_media)); if (deleteArtwork) { MusicUtil.deleteAlbumArt(AbsTagEditorActivity.this, getId()); - Glide.get(AbsTagEditorActivity.this).clearMemory(); - Glide.get(AbsTagEditorActivity.this).getBitmapPool().clearMemory(); + //ImageLoader.getInstance().getMemoryCache().remove(MusicUtil.getAlbumArtUri(getId()).toString()); + ImageLoader.getInstance().clearMemoryCache(); } else if (artwork != null) { - Glide.get(AbsTagEditorActivity.this).clearMemory(); - Glide.get(AbsTagEditorActivity.this).getBitmapPool().clearMemory(); + //ImageLoader.getInstance().getMemoryCache().remove(MusicUtil.getAlbumArtUri(getId()).toString()); + ImageLoader.getInstance().clearMemoryCache(); } } }); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java index ec20b15d..a8bfd3a7 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java @@ -6,18 +6,20 @@ import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; +import android.view.View; import android.widget.EditText; import android.widget.Toast; -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.target.Target; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.lastfm.album.LastFMAlbumImageUrlLoader; 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.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 org.jaudiotagger.tag.FieldKey; import org.jaudiotagger.tag.images.Artwork; @@ -95,34 +97,24 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text LastFMAlbumImageUrlLoader.loadAlbumImageUrl(this, albumTitleStr, albumArtistNameStr, new LastFMAlbumImageUrlLoader.AlbumImageUrlLoaderCallback() { @Override public void onAlbumImageUrlLoaded(String url) { - Glide.with(AlbumTagEditorActivity.this) - .load(url) - .asBitmap() - .centerCrop() - .listener(new RequestListener() { + ImageLoader.getInstance().loadImage(url, + new ImageSize(500, 500), + new SimpleImageLoadingListener() { @Override - public boolean onException(Exception e, String model, Target target, boolean isFirstResource) { + public void onLoadingFailed(String imageUri, View view, FailReason failReason) { Toast.makeText(AlbumTagEditorActivity.this, R.string.failed_download_albumart, Toast.LENGTH_SHORT).show(); - return false; } @Override - public boolean onResourceReady(Bitmap resource, String model, Target target, boolean isFromMemoryCache, boolean isFirstResource) { - if (resource != null) { - albumArtBitmap = resource; - setImageBitmap(albumArtBitmap); - deleteAlbumArt = false; - dataChanged(); - setResult(RESULT_OK); - } else { - Toast.makeText(AlbumTagEditorActivity.this, - R.string.failed_download_albumart, Toast.LENGTH_SHORT).show(); - } - return false; + public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + albumArtBitmap = loadedImage; + setImageBitmap(albumArtBitmap); + deleteAlbumArt = false; + dataChanged(); + setResult(RESULT_OK); } - }) - .into(500, 500); + }); } @Override @@ -191,29 +183,24 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text @Override protected void loadImageFromFile(final Uri selectedFileUri) { - Glide.with(this) - .load(selectedFileUri) - .asBitmap() - .centerCrop() - .listener(new RequestListener() { + ImageLoader.getInstance().loadImage(selectedFileUri.toString(), + new ImageSize(500, 500), + new SimpleImageLoadingListener() { @Override - public boolean onException(Exception e, Uri model, Target target, boolean isFirstResource) { - return false; + public void onLoadingFailed(String imageUri, View view, FailReason failReason) { + Toast.makeText(AlbumTagEditorActivity.this, + R.string.failed_download_albumart, Toast.LENGTH_SHORT).show(); } @Override - public boolean onResourceReady(Bitmap resource, Uri model, Target target, boolean isFromMemoryCache, boolean isFirstResource) { - if (resource != null) { - albumArtBitmap = resource; - setImageBitmap(albumArtBitmap); - deleteAlbumArt = false; - dataChanged(); - setResult(RESULT_OK); - } - return false; + public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + albumArtBitmap = loadedImage; + setImageBitmap(albumArtBitmap); + deleteAlbumArt = false; + dataChanged(); + setResult(RESULT_OK); } - }) - .into(500, 500); + }); } @Override