Fixed artist image updating
This commit is contained in:
parent
d776926510
commit
7aee3c7c72
10 changed files with 64 additions and 217 deletions
|
|
@ -22,6 +22,7 @@ import com.kabouzeid.gramophone.loader.SongLoader;
|
|||
import com.kabouzeid.gramophone.model.Album;
|
||||
import com.kabouzeid.gramophone.model.Artist;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.util.ArtistSignatureUtil;
|
||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
|
|
@ -111,6 +112,7 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
|
|||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.error(R.drawable.default_album_art)
|
||||
.animate(android.R.anim.fade_in)
|
||||
.signature(ArtistSignatureUtil.getInstance(activity).getArtistSignature(artist.name))
|
||||
.into(holder.image);
|
||||
break;
|
||||
case SONG:
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import com.kabouzeid.gramophone.interfaces.CabHolder;
|
|||
import com.kabouzeid.gramophone.loader.ArtistSongLoader;
|
||||
import com.kabouzeid.gramophone.model.Artist;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.util.ArtistSignatureUtil;
|
||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
|
|
@ -38,7 +39,6 @@ import java.util.List;
|
|||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolder, Artist> {
|
||||
private static final int FADE_IN_TIME = 500;
|
||||
|
||||
protected final AppCompatActivity activity;
|
||||
protected ArrayList<Artist> dataSet;
|
||||
|
|
@ -126,6 +126,7 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
|||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.error(R.drawable.default_album_art)
|
||||
.animate(android.R.anim.fade_in)
|
||||
.signature(ArtistSignatureUtil.getInstance(activity).getArtistSignature(artist.name))
|
||||
.into(new PhonographColoredTarget(holder.image) {
|
||||
@Override
|
||||
public void onLoadCleared(Drawable placeholder) {
|
||||
|
|
|
|||
|
|
@ -56,7 +56,6 @@ public class MediaEntryViewHolder extends RecyclerView.ViewHolder implements Vie
|
|||
@Nullable
|
||||
@Bind(R.id.palette_color_container)
|
||||
public View paletteColorContainer;
|
||||
public int paletteColor;
|
||||
|
||||
public MediaEntryViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@ import com.kabouzeid.gramophone.util.MusicUtil;
|
|||
|
||||
import java.io.InputStream;
|
||||
|
||||
import hugo.weaving.DebugLog;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
|
|
@ -30,11 +32,12 @@ public class ArtistImageFetcher implements DataFetcher<InputStream> {
|
|||
return model.artistName;
|
||||
}
|
||||
|
||||
@DebugLog
|
||||
@Override
|
||||
public InputStream loadData(Priority priority) throws Exception {
|
||||
if (MusicUtil.isArtistNameUnknown(model.artistName)) return null;
|
||||
|
||||
LastFmArtist lastFmArtist = lastFMRestClient.getApiService().getArtistInfo(model.artistName, model.forceDownload ? "no-cache" : null).execute().body();
|
||||
LastFmArtist lastFmArtist = lastFMRestClient.getApiService().getArtistInfo(model.artistName, model.skipOkHttpCache ? "no-cache" : null).execute().body();
|
||||
|
||||
if (isCancelled) return null;
|
||||
|
||||
|
|
|
|||
|
|
@ -5,10 +5,10 @@ package com.kabouzeid.gramophone.glide.artistimage;
|
|||
*/
|
||||
public class ArtistImageRequest {
|
||||
public final String artistName;
|
||||
public final boolean forceDownload;
|
||||
public final boolean skipOkHttpCache;
|
||||
|
||||
public ArtistImageRequest(String artistName, boolean forceDownload) {
|
||||
public ArtistImageRequest(String artistName, boolean skipOkHttpCache) {
|
||||
this.artistName = artistName;
|
||||
this.forceDownload = forceDownload;
|
||||
this.skipOkHttpCache = skipOkHttpCache;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,106 +0,0 @@
|
|||
package com.kabouzeid.gramophone.provider;
|
||||
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteOpenHelper;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
public class AlbumJSONStore extends SQLiteOpenHelper {
|
||||
|
||||
public static final String DATABASE_NAME = "albums_last_fm.db";
|
||||
private static final int VERSION = 1;
|
||||
@Nullable
|
||||
private static AlbumJSONStore sInstance = null;
|
||||
|
||||
public AlbumJSONStore(final Context context) {
|
||||
super(context, DATABASE_NAME, null, VERSION);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static synchronized AlbumJSONStore getInstance(@NonNull final Context context) {
|
||||
if (sInstance == null) {
|
||||
sInstance = new AlbumJSONStore(context.getApplicationContext());
|
||||
}
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
public void addAlbumJSON(@Nullable final String albumAndArtistName, @Nullable final String json) {
|
||||
if (albumAndArtistName == null || json == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final SQLiteDatabase database = getWritableDatabase();
|
||||
final ContentValues values = new ContentValues(2);
|
||||
|
||||
database.beginTransaction();
|
||||
|
||||
values.put(AlbumJSONColumns.ALBUM_PLUS_ARTIST_NAME, albumAndArtistName.trim().toLowerCase());
|
||||
values.put(AlbumJSONColumns.JSON_DATA, json);
|
||||
|
||||
database.insert(AlbumJSONColumns.NAME, null, values);
|
||||
database.setTransactionSuccessful();
|
||||
database.endTransaction();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getJSONData(@Nullable final String albumAndArtistName) {
|
||||
if (albumAndArtistName == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final SQLiteDatabase database = getReadableDatabase();
|
||||
final String[] projection = new String[]{
|
||||
AlbumJSONColumns.JSON_DATA,
|
||||
AlbumJSONColumns.ALBUM_PLUS_ARTIST_NAME
|
||||
};
|
||||
final String selection = AlbumJSONColumns.ALBUM_PLUS_ARTIST_NAME + "=?";
|
||||
final String[] having = new String[]{
|
||||
albumAndArtistName.trim().toLowerCase()
|
||||
};
|
||||
Cursor cursor = database.query(AlbumJSONColumns.NAME, projection, selection, having, null,
|
||||
null, null, null);
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
final String json = cursor.getString(cursor.getColumnIndexOrThrow(AlbumJSONColumns.JSON_DATA));
|
||||
cursor.close();
|
||||
return json;
|
||||
}
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void removeAlbumJSON(@NonNull final String albumAndArtistName) {
|
||||
final SQLiteDatabase database = getReadableDatabase();
|
||||
database.delete(AlbumJSONColumns.NAME, AlbumJSONColumns.ALBUM_PLUS_ARTIST_NAME + " = ?", new String[]{
|
||||
albumAndArtistName.trim().toLowerCase()
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public interface AlbumJSONColumns {
|
||||
String NAME = "album_json";
|
||||
String ALBUM_PLUS_ARTIST_NAME = "album_plus_artist_name";
|
||||
String JSON_DATA = "json_data";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(@NonNull final SQLiteDatabase db) {
|
||||
db.execSQL("CREATE TABLE IF NOT EXISTS " + AlbumJSONColumns.NAME +
|
||||
" (" + AlbumJSONColumns.ALBUM_PLUS_ARTIST_NAME + " TEXT NOT NULL," +
|
||||
AlbumJSONColumns.JSON_DATA + " TEXT NOT NULL);"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onUpgrade(@NonNull final SQLiteDatabase db, final int oldVersion, final int newVersion) {
|
||||
db.execSQL("DROP TABLE IF EXISTS " + AlbumJSONColumns.NAME);
|
||||
onCreate(db);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,104 +0,0 @@
|
|||
package com.kabouzeid.gramophone.provider;
|
||||
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteOpenHelper;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
public class ArtistJSONStore extends SQLiteOpenHelper {
|
||||
|
||||
public static final String DATABASE_NAME = "artists_last_fm.db";
|
||||
private static final int VERSION = 1;
|
||||
@Nullable
|
||||
private static ArtistJSONStore sInstance = null;
|
||||
|
||||
public ArtistJSONStore(final Context context) {
|
||||
super(context, DATABASE_NAME, null, VERSION);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static synchronized ArtistJSONStore getInstance(@NonNull final Context context) {
|
||||
if (sInstance == null) {
|
||||
sInstance = new ArtistJSONStore(context.getApplicationContext());
|
||||
}
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
public void addArtistJSON(@Nullable final String artistName, @Nullable final String json) {
|
||||
if (artistName == null || json == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final SQLiteDatabase database = getWritableDatabase();
|
||||
final ContentValues values = new ContentValues(2);
|
||||
|
||||
database.beginTransaction();
|
||||
|
||||
values.put(ArtistJSONColumns.ARTIST_NAME, artistName.trim().toLowerCase());
|
||||
values.put(ArtistJSONColumns.JSON_DATA, json);
|
||||
|
||||
database.insert(ArtistJSONColumns.NAME, null, values);
|
||||
database.setTransactionSuccessful();
|
||||
database.endTransaction();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getArtistJSON(@Nullable final String artistName) {
|
||||
if (artistName == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final SQLiteDatabase database = getReadableDatabase();
|
||||
final String[] projection = new String[]{
|
||||
ArtistJSONColumns.JSON_DATA,
|
||||
ArtistJSONColumns.ARTIST_NAME
|
||||
};
|
||||
final String selection = ArtistJSONColumns.ARTIST_NAME + "=?";
|
||||
final String[] having = new String[]{
|
||||
artistName.trim().toLowerCase()
|
||||
};
|
||||
Cursor cursor = database.query(ArtistJSONColumns.NAME, projection, selection, having, null,
|
||||
null, null, null);
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
final String json = cursor.getString(cursor.getColumnIndexOrThrow(ArtistJSONColumns.JSON_DATA));
|
||||
cursor.close();
|
||||
return json;
|
||||
}
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void removeArtistJSON(@NonNull final String artistName) {
|
||||
final SQLiteDatabase database = getReadableDatabase();
|
||||
database.delete(ArtistJSONColumns.NAME, ArtistJSONColumns.ARTIST_NAME + "=?", new String[]{
|
||||
artistName.trim().toLowerCase()
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public interface ArtistJSONColumns {
|
||||
String NAME = "artist_json";
|
||||
String ARTIST_NAME = "artist_name";
|
||||
String JSON_DATA = "json_data";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(@NonNull final SQLiteDatabase db) {
|
||||
db.execSQL("CREATE TABLE IF NOT EXISTS " + ArtistJSONColumns.NAME +
|
||||
" (" + ArtistJSONColumns.ARTIST_NAME + " TEXT NOT NULL," +
|
||||
ArtistJSONColumns.JSON_DATA + " TEXT NOT NULL);"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onUpgrade(@NonNull final SQLiteDatabase db, final int oldVersion, final int newVersion) {
|
||||
db.execSQL("DROP TABLE IF EXISTS " + ArtistJSONColumns.NAME);
|
||||
onCreate(db);
|
||||
}
|
||||
}
|
||||
|
|
@ -47,6 +47,7 @@ import com.kabouzeid.gramophone.model.Album;
|
|||
import com.kabouzeid.gramophone.model.Artist;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||
import com.kabouzeid.gramophone.util.ArtistSignatureUtil;
|
||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
|
|
@ -250,12 +251,16 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
|||
}
|
||||
|
||||
private void setUpArtistImageAndApplyPalette(final boolean forceDownload) {
|
||||
if (forceDownload) {
|
||||
ArtistSignatureUtil.getInstance(this).updateArtistSignature(artist.name);
|
||||
}
|
||||
Glide.with(this)
|
||||
.load(new ArtistImageRequest(artist.name, forceDownload))
|
||||
.asBitmap()
|
||||
.transcode(new BitmapPaletteTranscoder(this), BitmapPaletteWrapper.class)
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.error(R.drawable.default_album_art)
|
||||
.signature(ArtistSignatureUtil.getInstance(this).getArtistSignature(artist.name))
|
||||
.into(new PhonographColoredTarget(artistImage) {
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -0,0 +1,47 @@
|
|||
package com.kabouzeid.gramophone.util;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import com.bumptech.glide.signature.StringSignature;
|
||||
|
||||
import hugo.weaving.DebugLog;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class ArtistSignatureUtil {
|
||||
private static final String ARTIST_SIGNATURE_PREFS = "artist_signatures";
|
||||
|
||||
private static ArtistSignatureUtil sInstance;
|
||||
|
||||
private final SharedPreferences mPreferences;
|
||||
|
||||
private ArtistSignatureUtil(@NonNull final Context context) {
|
||||
mPreferences = context.getSharedPreferences(ARTIST_SIGNATURE_PREFS, Context.MODE_PRIVATE);
|
||||
}
|
||||
|
||||
public static ArtistSignatureUtil getInstance(@NonNull final Context context) {
|
||||
if (sInstance == null) {
|
||||
sInstance = new ArtistSignatureUtil(context.getApplicationContext());
|
||||
}
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
@DebugLog
|
||||
@SuppressLint("CommitPrefEdits")
|
||||
public void updateArtistSignature(String artistName) {
|
||||
mPreferences.edit().putLong(artistName, System.currentTimeMillis()).commit();
|
||||
}
|
||||
|
||||
@DebugLog
|
||||
public long getArtistSignatureRaw(String artistName) {
|
||||
return mPreferences.getLong(artistName, 0);
|
||||
}
|
||||
|
||||
public StringSignature getArtistSignature(String artistName) {
|
||||
return new StringSignature(String.valueOf(getArtistSignatureRaw(artistName)));
|
||||
}
|
||||
}
|
||||
|
|
@ -67,7 +67,7 @@ public final class PreferenceUtil {
|
|||
|
||||
private final SharedPreferences mPreferences;
|
||||
|
||||
public PreferenceUtil(@NonNull final Context context) {
|
||||
private PreferenceUtil(@NonNull final Context context) {
|
||||
mPreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue