diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java index 49c4639d..214e2821 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java @@ -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 { - private static final int FADE_IN_TIME = 500; protected final AppCompatActivity activity; protected ArrayList dataSet; @@ -126,6 +126,7 @@ public class ArtistAdapter extends AbsMultiSelectAdapter { 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; diff --git a/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageRequest.java b/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageRequest.java index 82abbcd5..e5154a0e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageRequest.java +++ b/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageRequest.java @@ -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; } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/provider/AlbumJSONStore.java b/app/src/main/java/com/kabouzeid/gramophone/provider/AlbumJSONStore.java deleted file mode 100644 index 154f1b83..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/provider/AlbumJSONStore.java +++ /dev/null @@ -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); - } - - -} diff --git a/app/src/main/java/com/kabouzeid/gramophone/provider/ArtistJSONStore.java b/app/src/main/java/com/kabouzeid/gramophone/provider/ArtistJSONStore.java deleted file mode 100644 index 7bfddb9d..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/provider/ArtistJSONStore.java +++ /dev/null @@ -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); - } -} 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 522c62d8..73680ccf 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 @@ -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 diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/ArtistSignatureUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/ArtistSignatureUtil.java new file mode 100644 index 00000000..faf10c6f --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/util/ArtistSignatureUtil.java @@ -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))); + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java index b3dc8cac..9790d2d7 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java @@ -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); }