From 63bd71b7e6923cf2bcca948bfaec339df9903573 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 27 Nov 2021 18:44:51 +0530 Subject: [PATCH] [Library] Implemented Better saving of GridStyle We used to store layout ID's of grid styles before which caused all sorts of trouble whenever an update was pushed. Layout ID's are generated at compile time according to alphabetical order ig, so if a layout is added or renamed, it will cause layout ID's to change, which resulted in either a Different layout than the one user stored, or totally random layout or a crash. So to counter this, 0-6 constant ID's are used to save Grid Styles which should result in stable updates. --- .../monkey/retromusic/fragments/GridStyle.kt | 16 ++++++++ .../fragments/albums/AlbumsFragment.kt | 11 ++++-- .../fragments/artists/ArtistsFragment.kt | 12 +++--- .../fragments/songs/SongsFragment.kt | 12 +++--- .../monkey/retromusic/util/PreferenceUtil.kt | 37 ++++++++++++++----- 5 files changed, 65 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/code/name/monkey/retromusic/fragments/GridStyle.kt diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/GridStyle.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/GridStyle.kt new file mode 100644 index 00000000..505564a1 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/GridStyle.kt @@ -0,0 +1,16 @@ +package code.name.monkey.retromusic.fragments + +import androidx.annotation.LayoutRes +import code.name.monkey.retromusic.R + +enum class GridStyle constructor( + @param:LayoutRes @field:LayoutRes val layoutResId: Int, + val id: Int +) { + Grid(R.layout.item_grid, 0), + Card(R.layout.item_card, 1), + ColoredCard(R.layout.item_card_color, 2), + Circular(R.layout.item_grid_circle, 3), + Image(R.layout.image, 4), + GradientImage(R.layout.item_image_gradient, 5) +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt index f63cc644..e7d713b5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt @@ -26,6 +26,7 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.album.AlbumAdapter import code.name.monkey.retromusic.extensions.navigate import code.name.monkey.retromusic.extensions.surfaceColor +import code.name.monkey.retromusic.fragments.GridStyle import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewCustomGridSizeFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -131,11 +132,13 @@ class AlbumsFragment : AbsRecyclerViewCustomGridSizeFragment + gridStyle.layoutResId == layoutRes + } } companion object { @@ -307,9 +310,9 @@ class AlbumsFragment : AbsRecyclerViewCustomGridSizeFragment R.layout.item_grid_circle R.id.action_layout_image -> R.layout.image R.id.action_layout_gradient_image -> R.layout.item_image_gradient - else -> PreferenceUtil.albumGridStyle + else -> PreferenceUtil.albumGridStyle.layoutResId } - if (layoutRes != PreferenceUtil.albumGridStyle) { + if (layoutRes != PreferenceUtil.albumGridStyle.layoutResId) { item.isChecked = true setAndSaveLayoutRes(layoutRes) return true diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt index 8739b766..c0bb4106 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt @@ -25,8 +25,8 @@ import code.name.monkey.retromusic.EXTRA_ARTIST_ID import code.name.monkey.retromusic.EXTRA_ARTIST_NAME import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.artist.ArtistAdapter -import code.name.monkey.retromusic.extensions.navigate import code.name.monkey.retromusic.extensions.surfaceColor +import code.name.monkey.retromusic.fragments.GridStyle import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewCustomGridSizeFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -132,11 +132,13 @@ class ArtistsFragment : AbsRecyclerViewCustomGridSizeFragment + gridStyle.layoutResId == layoutRes + } } companion object { @@ -312,9 +314,9 @@ class ArtistsFragment : AbsRecyclerViewCustomGridSizeFragment R.layout.item_grid_circle R.id.action_layout_image -> R.layout.image R.id.action_layout_gradient_image -> R.layout.item_image_gradient - else -> PreferenceUtil.artistGridStyle + else -> PreferenceUtil.artistGridStyle.layoutResId } - if (layoutRes != PreferenceUtil.artistGridStyle) { + if (layoutRes != PreferenceUtil.artistGridStyle.layoutResId) { item.isChecked = true setAndSaveLayoutRes(layoutRes) return true diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt index d0b3095e..ab20c8e7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt @@ -21,8 +21,8 @@ import androidx.annotation.LayoutRes import androidx.recyclerview.widget.GridLayoutManager import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.song.SongAdapter -import code.name.monkey.retromusic.extensions.navigate import code.name.monkey.retromusic.extensions.surfaceColor +import code.name.monkey.retromusic.fragments.GridStyle import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewCustomGridSizeFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -114,11 +114,13 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment + gridStyle.layoutResId == layoutRes + } } override fun setSortOrder(sortOrder: String) { @@ -307,9 +309,9 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment R.layout.item_grid_circle R.id.action_layout_image -> R.layout.image R.id.action_layout_gradient_image -> R.layout.item_image_gradient - else -> PreferenceUtil.songGridStyle + else -> PreferenceUtil.songGridStyle.layoutResId } - if (layoutRes != PreferenceUtil.songGridStyle) { + if (layoutRes != PreferenceUtil.songGridStyle.layoutResId) { item.isChecked = true setAndSaveLayoutRes(layoutRes) return true diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt index eb43004a..0de2b7b3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt @@ -12,6 +12,7 @@ import code.name.monkey.retromusic.* import code.name.monkey.retromusic.extensions.getIntRes import code.name.monkey.retromusic.extensions.getStringOrDefault import code.name.monkey.retromusic.fragments.AlbumCoverStyle +import code.name.monkey.retromusic.fragments.GridStyle import code.name.monkey.retromusic.fragments.NowPlayingScreen import code.name.monkey.retromusic.fragments.folder.FoldersFragment import code.name.monkey.retromusic.helper.SortOrder.* @@ -344,22 +345,40 @@ object PreferenceUtil { putInt(LYRICS_OPTIONS, value) } - var songGridStyle - get() = sharedPreferences.getInt(SONG_GRID_STYLE, R.layout.item_grid) + var songGridStyle: GridStyle + get() { + val id: Int = sharedPreferences.getInt(SONG_GRID_STYLE, 0) + // We can directly use "first" kotlin extension function here but + // there maybe layout id stored in this so to avoid a crash we use + // "firstOrNull" + return GridStyle.values().firstOrNull { gridStyle -> + gridStyle.id == id + } ?: GridStyle.Grid + } set(value) = sharedPreferences.edit { - putInt(SONG_GRID_STYLE, value) + putInt(SONG_GRID_STYLE, value.id) } - var albumGridStyle - get() = sharedPreferences.getInt(ALBUM_GRID_STYLE, R.layout.item_grid) + var albumGridStyle: GridStyle + get() { + val id: Int = sharedPreferences.getInt(ALBUM_GRID_STYLE, 0) + return GridStyle.values().firstOrNull { gridStyle -> + gridStyle.id == id + } ?: GridStyle.Grid + } set(value) = sharedPreferences.edit { - putInt(ALBUM_GRID_STYLE, value) + putInt(ALBUM_GRID_STYLE, value.id) } - var artistGridStyle - get() = sharedPreferences.getInt(ARTIST_GRID_STYLE, R.layout.item_grid_circle) + var artistGridStyle: GridStyle + get() { + val id: Int = sharedPreferences.getInt(ARTIST_GRID_STYLE, 4) + return GridStyle.values().firstOrNull { gridStyle -> + gridStyle.id == id + } ?: GridStyle.Circular + } set(value) = sharedPreferences.edit { - putInt(ARTIST_GRID_STYLE, value) + putInt(ARTIST_GRID_STYLE, value.id) } val filterLength get() = sharedPreferences.getInt(FILTER_SONG, 20)