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 001f1407..ca196aba 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java @@ -14,12 +14,12 @@ 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.Request; 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; @@ -71,7 +71,7 @@ public class AlbumAdapter extends RecyclerView.Adapter holder.albumArt.setTag( 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() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAlbumAdapter.java index 08fe77b1..4095f70d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAlbumAdapter.java @@ -10,8 +10,8 @@ import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.Request; +import com.bumptech.glide.signature.StringSignature; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.model.Album; import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; @@ -61,7 +61,7 @@ public class ArtistAlbumAdapter extends RecyclerView.Adapter { 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); 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 949ce22a..66c3393d 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 @@ -12,8 +12,8 @@ import android.widget.PopupMenu; import android.widget.TextView; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.Request; +import com.bumptech.glide.signature.StringSignature; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.helper.MenuItemClickHelper; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; @@ -65,7 +65,7 @@ public class PlaylistSongAdapter extends RecyclerView.Adapter { holder.albumArt.setTag( 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) diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java index 4c08e183..b7a13887 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java @@ -27,8 +27,9 @@ public class AlbumLoader { final int artistId = cursor.getInt(3); final int songCount = cursor.getInt(4); final int year = cursor.getInt(5); + final String albumArtPath = cursor.getString(6); - final Album album = new Album(id, albumName, artist, artistId, songCount, year); + final Album album = new Album(id, albumName, artist, artistId, songCount, year, albumArtPath); albums.add(album); } while (cursor.moveToNext()); } @@ -56,7 +57,9 @@ public class AlbumLoader { /* 4 */ MediaStore.Audio.AlbumColumns.NUMBER_OF_SONGS, /* 5 */ - MediaStore.Audio.AlbumColumns.FIRST_YEAR + MediaStore.Audio.AlbumColumns.FIRST_YEAR, + /* 6 */ + MediaStore.Audio.AlbumColumns.ALBUM_ART }, selection, values, PreferenceUtils.getInstance(context).getAlbumSortOrder()); } @@ -70,8 +73,9 @@ public class AlbumLoader { final int artistId = cursor.getInt(3); final int songCount = cursor.getInt(4); final int year = cursor.getInt(5); + final String albumArtPath = cursor.getString(6); - album = new Album(id, albumName, artist, artistId, songCount, year); + album = new Album(id, albumName, artist, artistId, songCount, year, albumArtPath); } if (cursor != null) { @@ -91,8 +95,9 @@ public class AlbumLoader { final int artistId = cursor.getInt(3); final int songCount = cursor.getInt(4); final int year = cursor.getInt(5); + final String albumArtPath = cursor.getString(6); - final Album album = new Album(id, albumName, artist, artistId, songCount, year); + final Album album = new Album(id, albumName, artist, artistId, songCount, year, albumArtPath); albums.add(album); } while (cursor.moveToNext()); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java index df5d1d11..a931616c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java @@ -27,8 +27,9 @@ public class AlbumSongLoader { final long duration = cursor.getLong(4); final int trackNumber = cursor.getInt(5); final int artistId = cursor.getInt(6); + final long dateModified = cursor.getInt(7); - final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber); + final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, dateModified); songs.add(song); } while (cursor.moveToNext()); } @@ -53,7 +54,9 @@ public class AlbumSongLoader { /* 5 */ MediaStore.Audio.AudioColumns.TRACK, /* 6 */ - MediaStore.Audio.AudioColumns.ARTIST_ID + MediaStore.Audio.AudioColumns.ARTIST_ID, + /* 7 */ + MediaStore.Audio.AudioColumns.DATE_MODIFIED }, (MediaStore.Audio.AudioColumns.IS_MUSIC + "=1") + " AND " + MediaStore.Audio.AudioColumns.TITLE + " != ''" + " AND " + MediaStore.Audio.AudioColumns.ALBUM_ID + "=" + albumId, null, diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java index 9756bcca..eaa82d0d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java @@ -26,8 +26,9 @@ public class ArtistAlbumLoader { final String artist = cursor.getString(2); final int songCount = cursor.getInt(3); final int year = cursor.getInt(4); + final String albumArtPath = cursor.getString(5); - final Album album = new Album(id, albumName, artist, artistId, songCount, year); + final Album album = new Album(id, albumName, artist, artistId, songCount, year, albumArtPath); albums.add(album); } while (cursor.moveToNext()); } @@ -49,7 +50,9 @@ public class ArtistAlbumLoader { /* 3 */ MediaStore.Audio.AlbumColumns.NUMBER_OF_SONGS, /* 4 */ - MediaStore.Audio.AlbumColumns.FIRST_YEAR + MediaStore.Audio.AlbumColumns.FIRST_YEAR, + /* 5 */ + MediaStore.Audio.AlbumColumns.ALBUM_ART }, null, null, PreferenceUtils.getInstance(context).getArtistAlbumSortOrder()); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java index 2a68191c..3d84ef23 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java @@ -27,8 +27,9 @@ public class ArtistSongLoader { final long duration = cursor.getLong(4); final int trackNumber = cursor.getInt(5); final int albumId = cursor.getInt(6); + final long dateModified = cursor.getInt(7); - final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber); + final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, dateModified); songs.add(song); } while (cursor.moveToNext()); } @@ -53,7 +54,9 @@ public class ArtistSongLoader { /* 5 */ MediaStore.Audio.AudioColumns.TRACK, /* 6 */ - MediaStore.Audio.AudioColumns.ALBUM_ID + MediaStore.Audio.AudioColumns.ALBUM_ID, + /* 7 */ + MediaStore.Audio.AudioColumns.DATE_MODIFIED }, (MediaStore.Audio.AudioColumns.IS_MUSIC + "=1") + " AND " + MediaStore.Audio.AudioColumns.TITLE + " != ''" + " AND " + MediaStore.Audio.AudioColumns.ARTIST_ID + "=" + artistId, null, diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java index 5b201d99..619daf1e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java @@ -26,8 +26,9 @@ public class PlaylistSongLoader { final int albumId = cursor.getInt(6); final int artistId = cursor.getInt(7); final int idInPlaylist = cursor.getInt(8); + final long dateModified = cursor.getInt(9); - final PlaylistSong song = new PlaylistSong(id, albumId, artistId, songName, artist, album, duration, trackNumber, playlistID, idInPlaylist); + final PlaylistSong song = new PlaylistSong(id, albumId, artistId, songName, artist, album, duration, trackNumber, playlistID, idInPlaylist, dateModified); songs.add(song); } while (cursor.moveToNext()); @@ -59,7 +60,9 @@ public class PlaylistSongLoader { /* 7 */ AudioColumns.ARTIST_ID, /* 8 */ - MediaStore.Audio.Playlists.Members._ID + MediaStore.Audio.Playlists.Members._ID, + /* 9 */ + MediaStore.Audio.AudioColumns.DATE_MODIFIED }, (AudioColumns.IS_MUSIC + "=1") + " AND " + AudioColumns.TITLE + " != ''", null, MediaStore.Audio.Playlists.Members.DEFAULT_SORT_ORDER); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java index 0bc8607c..9c7e00b5 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java @@ -30,8 +30,9 @@ public class SongLoader { final int trackNumber = cursor.getInt(5); final int artistId = cursor.getInt(6); final int albumId = cursor.getInt(7); + final long dateModified = cursor.getInt(8); - final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber); + final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, dateModified); songs.add(song); } while (cursor.moveToNext()); } @@ -67,7 +68,9 @@ public class SongLoader { /* 6 */ MediaStore.Audio.AudioColumns.ARTIST_ID, /* 7 */ - MediaStore.Audio.AudioColumns.ALBUM_ID + MediaStore.Audio.AudioColumns.ALBUM_ID, + /* 8 */ + MediaStore.Audio.AudioColumns.DATE_MODIFIED }, finalSelection, values, PreferenceUtils.getInstance(context).getSongSortOrder()); } @@ -84,8 +87,9 @@ public class SongLoader { final int trackNumber = cursor.getInt(5); final int artistId = cursor.getInt(6); final int albumId = cursor.getInt(7); + final long dateModified = cursor.getInt(8); - final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber); + final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, dateModified); songs.add(song); } while (cursor.moveToNext()); } @@ -107,7 +111,8 @@ public class SongLoader { final int trackNumber = cursor.getInt(5); final int artistId = cursor.getInt(6); final int albumId = cursor.getInt(7); - song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber); + final long dateModified = cursor.getInt(8); + song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, dateModified); } if (cursor != null) { cursor.close(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Album.java b/app/src/main/java/com/kabouzeid/gramophone/model/Album.java index 3ab4d6cf..b674c284 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Album.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Album.java @@ -6,27 +6,31 @@ package com.kabouzeid.gramophone.model; public class Album { public final int id; - public int artistId; + public final int artistId; public final String title; public final String artistName; public final int songCount; public final int year; + public final String albumArtPath; //used as cache key public Album(final int id, final String title, final String artistName, final int artistId, - final int songNumber, final int albumYear) { + final int songNumber, final int albumYear, final String albumArtPath) { this.id = id; this.title = title; this.artistName = artistName; this.artistId = artistId; songCount = songNumber; year = albumYear; + this.albumArtPath = albumArtPath != null ? albumArtPath : ""; } public Album() { this.id = -1; this.title = ""; this.artistName = ""; + this.artistId = -1; songCount = -1; year = -1; + this.albumArtPath = ""; } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java b/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java index 694d4e17..48e71ad8 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java @@ -2,11 +2,11 @@ package com.kabouzeid.gramophone.model; public class PlaylistSong extends Song { public final int playlistId; - public int idInPlayList; + public final int idInPlayList; public PlaylistSong(final int id, final int albumId, final int artistId, final String title, final String artistName, - final String albumName, final long duration, final int trackNumber, final int playlistId, final int idInPlayList) { - super(id, albumId, artistId, title, artistName, albumName, duration, trackNumber); + final String albumName, final long duration, final int trackNumber, final int playlistId, final int idInPlayList, final long dateModified) { + super(id, albumId, artistId, title, artistName, albumName, duration, trackNumber, dateModified); this.playlistId = playlistId; this.idInPlayList = idInPlayList; } @@ -14,6 +14,6 @@ public class PlaylistSong extends Song { public PlaylistSong() { super(); playlistId = -1; - id = -1; + idInPlayList = -1; } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Song.java b/app/src/main/java/com/kabouzeid/gramophone/model/Song.java index 58007c3d..82ff617d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Song.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Song.java @@ -7,7 +7,7 @@ import java.io.Serializable; */ public class Song implements Serializable { - public int id; + public final int id; public final int albumId; public final int artistId; public final String title; @@ -15,9 +15,10 @@ public class Song implements Serializable { public final String albumName; public final long duration; public final int trackNumber; + public final long dateModified; //used as cache key public Song(final int id, final int albumId, final int artistId, final String title, final String artistName, - final String albumName, final long duration, final int trackNumber) { + final String albumName, final long duration, final int trackNumber, final long dateModified) { this.id = id; this.albumId = albumId; this.artistId = artistId; @@ -26,6 +27,7 @@ public class Song implements Serializable { this.albumName = albumName; this.duration = duration; this.trackNumber = trackNumber; + this.dateModified = dateModified; } public Song() { @@ -37,5 +39,6 @@ public class Song implements Serializable { this.albumName = ""; this.duration = -1; this.trackNumber = -1; + this.dateModified = -1; } } 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 6c593dc9..f62261fa 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 @@ -19,11 +19,11 @@ 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; @@ -177,7 +177,7 @@ 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() { @TargetApi(Build.VERSION_CODES.LOLLIPOP) 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 6ccc2980..4a78c3a6 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 @@ -28,7 +28,7 @@ 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.signature.StringSignature; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.PagerAdapter; import com.kabouzeid.gramophone.dialogs.AboutDialog; @@ -207,7 +207,7 @@ public class MainActivity extends AbsFabActivity navigationDrawerFragment.getSongArtist().setText(song.artistName); 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) .into(navigationDrawerFragment.getAlbumArtImageView()); 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 446c269d..944752c1 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 @@ -24,11 +24,11 @@ import android.widget.Toast; 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; @@ -301,7 +301,7 @@ 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() {