Fixed artist image updating

This commit is contained in:
Karim Abou Zeid 2016-01-02 18:02:44 +01:00
commit 7aee3c7c72
10 changed files with 64 additions and 217 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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