diff --git a/app/src/main/java/com/zionhuang/music/constants/Dimensions.kt b/app/src/main/java/com/zionhuang/music/constants/Dimensions.kt
index 42a8312b3..fbe8ab473 100644
--- a/app/src/main/java/com/zionhuang/music/constants/Dimensions.kt
+++ b/app/src/main/java/com/zionhuang/music/constants/Dimensions.kt
@@ -22,6 +22,8 @@ val SuggestionItemHeight = 56.dp
val SearchFilterHeight = 48.dp
val ListThumbnailSize = 48.dp
val GridThumbnailHeight = 128.dp
+val SmallGridThumbnailHeight = 92.dp
+
val AlbumThumbnailSize = 144.dp
val ThumbnailCornerRadius = 6.dp
diff --git a/app/src/main/java/com/zionhuang/music/constants/PreferenceKeys.kt b/app/src/main/java/com/zionhuang/music/constants/PreferenceKeys.kt
index 3de9d0b28..acd453f35 100644
--- a/app/src/main/java/com/zionhuang/music/constants/PreferenceKeys.kt
+++ b/app/src/main/java/com/zionhuang/music/constants/PreferenceKeys.kt
@@ -8,7 +8,6 @@ import androidx.datastore.preferences.core.stringPreferencesKey
val DynamicThemeKey = booleanPreferencesKey("dynamicTheme")
val DarkModeKey = stringPreferencesKey("darkMode")
val PureBlackKey = booleanPreferencesKey("pureBlack")
-val DefaultOpenTabKey = stringPreferencesKey("defaultOpenTab")
val PlayerTextAlignmentKey = stringPreferencesKey("playerTextAlignment")
val SliderStyleKey = stringPreferencesKey("sliderStyle")
@@ -16,6 +15,13 @@ enum class SliderStyle {
DEFAULT, SQUIGGLY
}
+val DefaultOpenTabKey = stringPreferencesKey("defaultOpenTab")
+val GridCellSizeKey = stringPreferencesKey("gridCellSize")
+
+enum class GridCellSize {
+ SMALL, BIG
+}
+
const val SYSTEM_DEFAULT = "SYSTEM_DEFAULT"
val ContentLanguageKey = stringPreferencesKey("contentLanguage")
val ContentCountryKey = stringPreferencesKey("contentCountry")
diff --git a/app/src/main/java/com/zionhuang/music/ui/screens/library/LibraryAlbumsScreen.kt b/app/src/main/java/com/zionhuang/music/ui/screens/library/LibraryAlbumsScreen.kt
index 2ee6f8ec9..446ae5287 100644
--- a/app/src/main/java/com/zionhuang/music/ui/screens/library/LibraryAlbumsScreen.kt
+++ b/app/src/main/java/com/zionhuang/music/ui/screens/library/LibraryAlbumsScreen.kt
@@ -49,8 +49,11 @@ import com.zionhuang.music.constants.AlbumSortTypeKey
import com.zionhuang.music.constants.AlbumViewTypeKey
import com.zionhuang.music.constants.CONTENT_TYPE_ALBUM
import com.zionhuang.music.constants.CONTENT_TYPE_HEADER
+import com.zionhuang.music.constants.GridCellSize
+import com.zionhuang.music.constants.GridCellSizeKey
import com.zionhuang.music.constants.GridThumbnailHeight
import com.zionhuang.music.constants.LibraryViewType
+import com.zionhuang.music.constants.SmallGridThumbnailHeight
import com.zionhuang.music.ui.component.AlbumGridItem
import com.zionhuang.music.ui.component.AlbumListItem
import com.zionhuang.music.ui.component.ChipsRow
@@ -73,6 +76,7 @@ fun LibraryAlbumsScreen(
val isPlaying by playerConnection.isPlaying.collectAsState()
val mediaMetadata by playerConnection.mediaMetadata.collectAsState()
+ val gridCellSize by rememberEnumPreference(GridCellSizeKey, GridCellSize.SMALL)
var filter by rememberEnumPreference(AlbumFilterKey, AlbumFilter.LIBRARY)
var viewType by rememberEnumPreference(AlbumViewTypeKey, LibraryViewType.GRID)
val (sortType, onSortTypeChange) = rememberEnumPreference(AlbumSortTypeKey, AlbumSortType.CREATE_DATE)
@@ -224,7 +228,12 @@ fun LibraryAlbumsScreen(
LibraryViewType.GRID ->
LazyVerticalGrid(
state = lazyGridState,
- columns = GridCells.Adaptive(minSize = GridThumbnailHeight + 24.dp),
+ columns = GridCells.Adaptive(
+ minSize = when (gridCellSize) {
+ GridCellSize.SMALL -> SmallGridThumbnailHeight
+ GridCellSize.BIG -> GridThumbnailHeight
+ } + 24.dp
+ ),
contentPadding = LocalPlayerAwareWindowInsets.current.asPaddingValues()
) {
item(
diff --git a/app/src/main/java/com/zionhuang/music/ui/screens/library/LibraryArtistsScreen.kt b/app/src/main/java/com/zionhuang/music/ui/screens/library/LibraryArtistsScreen.kt
index 7ceee3db4..f49d0700f 100644
--- a/app/src/main/java/com/zionhuang/music/ui/screens/library/LibraryArtistsScreen.kt
+++ b/app/src/main/java/com/zionhuang/music/ui/screens/library/LibraryArtistsScreen.kt
@@ -49,8 +49,11 @@ import com.zionhuang.music.constants.ArtistSortTypeKey
import com.zionhuang.music.constants.ArtistViewTypeKey
import com.zionhuang.music.constants.CONTENT_TYPE_ARTIST
import com.zionhuang.music.constants.CONTENT_TYPE_HEADER
+import com.zionhuang.music.constants.GridCellSize
+import com.zionhuang.music.constants.GridCellSizeKey
import com.zionhuang.music.constants.GridThumbnailHeight
import com.zionhuang.music.constants.LibraryViewType
+import com.zionhuang.music.constants.SmallGridThumbnailHeight
import com.zionhuang.music.ui.component.ArtistGridItem
import com.zionhuang.music.ui.component.ArtistListItem
import com.zionhuang.music.ui.component.ChipsRow
@@ -69,6 +72,8 @@ fun LibraryArtistsScreen(
) {
val menuState = LocalMenuState.current
val haptic = LocalHapticFeedback.current
+
+ val gridCellSize by rememberEnumPreference(GridCellSizeKey, GridCellSize.SMALL)
var filter by rememberEnumPreference(ArtistFilterKey, ArtistFilter.LIBRARY)
var viewType by rememberEnumPreference(ArtistViewTypeKey, LibraryViewType.GRID)
val (sortType, onSortTypeChange) = rememberEnumPreference(ArtistSortTypeKey, ArtistSortType.CREATE_DATE)
@@ -214,7 +219,12 @@ fun LibraryArtistsScreen(
LibraryViewType.GRID ->
LazyVerticalGrid(
state = lazyGridState,
- columns = GridCells.Adaptive(minSize = GridThumbnailHeight + 24.dp),
+ columns = GridCells.Adaptive(
+ minSize = when (gridCellSize) {
+ GridCellSize.SMALL -> SmallGridThumbnailHeight
+ GridCellSize.BIG -> GridThumbnailHeight
+ } + 24.dp
+ ),
contentPadding = LocalPlayerAwareWindowInsets.current.asPaddingValues()
) {
item(
diff --git a/app/src/main/java/com/zionhuang/music/ui/screens/library/LibraryPlaylistsScreen.kt b/app/src/main/java/com/zionhuang/music/ui/screens/library/LibraryPlaylistsScreen.kt
index 09b7f72ef..0f6b1a0c9 100644
--- a/app/src/main/java/com/zionhuang/music/ui/screens/library/LibraryPlaylistsScreen.kt
+++ b/app/src/main/java/com/zionhuang/music/ui/screens/library/LibraryPlaylistsScreen.kt
@@ -46,12 +46,15 @@ import com.zionhuang.music.LocalPlayerAwareWindowInsets
import com.zionhuang.music.R
import com.zionhuang.music.constants.CONTENT_TYPE_HEADER
import com.zionhuang.music.constants.CONTENT_TYPE_PLAYLIST
+import com.zionhuang.music.constants.GridCellSize
+import com.zionhuang.music.constants.GridCellSizeKey
import com.zionhuang.music.constants.GridThumbnailHeight
import com.zionhuang.music.constants.LibraryViewType
import com.zionhuang.music.constants.PlaylistSortDescendingKey
import com.zionhuang.music.constants.PlaylistSortType
import com.zionhuang.music.constants.PlaylistSortTypeKey
import com.zionhuang.music.constants.PlaylistViewTypeKey
+import com.zionhuang.music.constants.SmallGridThumbnailHeight
import com.zionhuang.music.db.entities.PlaylistEntity
import com.zionhuang.music.ui.component.HideOnScrollFAB
import com.zionhuang.music.ui.component.LocalMenuState
@@ -76,6 +79,7 @@ fun LibraryPlaylistsScreen(
val coroutineScope = rememberCoroutineScope()
+ val gridCellSize by rememberEnumPreference(GridCellSizeKey, GridCellSize.SMALL)
var viewType by rememberEnumPreference(PlaylistViewTypeKey, LibraryViewType.GRID)
val (sortType, onSortTypeChange) = rememberEnumPreference(PlaylistSortTypeKey, PlaylistSortType.CREATE_DATE)
val (sortDescending, onSortDescendingChange) = rememberPreference(PlaylistSortDescendingKey, true)
@@ -227,7 +231,12 @@ fun LibraryPlaylistsScreen(
LibraryViewType.GRID -> {
LazyVerticalGrid(
state = lazyGridState,
- columns = GridCells.Adaptive(minSize = GridThumbnailHeight + 24.dp),
+ columns = GridCells.Adaptive(
+ minSize = when (gridCellSize) {
+ GridCellSize.SMALL -> SmallGridThumbnailHeight
+ GridCellSize.BIG -> GridThumbnailHeight
+ } + 24.dp
+ ),
contentPadding = LocalPlayerAwareWindowInsets.current.asPaddingValues()
) {
item(
diff --git a/app/src/main/java/com/zionhuang/music/ui/screens/settings/AppearanceSettings.kt b/app/src/main/java/com/zionhuang/music/ui/screens/settings/AppearanceSettings.kt
index 34e996c0a..a4a808c76 100644
--- a/app/src/main/java/com/zionhuang/music/ui/screens/settings/AppearanceSettings.kt
+++ b/app/src/main/java/com/zionhuang/music/ui/screens/settings/AppearanceSettings.kt
@@ -45,6 +45,8 @@ import com.zionhuang.music.R
import com.zionhuang.music.constants.DarkModeKey
import com.zionhuang.music.constants.DefaultOpenTabKey
import com.zionhuang.music.constants.DynamicThemeKey
+import com.zionhuang.music.constants.GridCellSize
+import com.zionhuang.music.constants.GridCellSizeKey
import com.zionhuang.music.constants.PlayerTextAlignmentKey
import com.zionhuang.music.constants.PureBlackKey
import com.zionhuang.music.constants.SliderStyle
@@ -69,9 +71,10 @@ fun AppearanceSettings(
val (dynamicTheme, onDynamicThemeChange) = rememberPreference(DynamicThemeKey, defaultValue = true)
val (darkMode, onDarkModeChange) = rememberEnumPreference(DarkModeKey, defaultValue = DarkMode.AUTO)
val (pureBlack, onPureBlackChange) = rememberPreference(PureBlackKey, defaultValue = false)
- val (defaultOpenTab, onDefaultOpenTabChange) = rememberEnumPreference(DefaultOpenTabKey, defaultValue = NavigationTab.HOME)
val (playerTextAlignment, onPlayerTextAlignmentChange) = rememberEnumPreference(PlayerTextAlignmentKey, defaultValue = PlayerTextAlignment.CENTER)
val (sliderStyle, onSliderStyleChange) = rememberEnumPreference(SliderStyleKey, defaultValue = SliderStyle.DEFAULT)
+ val (defaultOpenTab, onDefaultOpenTabChange) = rememberEnumPreference(DefaultOpenTabKey, defaultValue = NavigationTab.HOME)
+ val (gridCellSize, onGridCellSizeChange) = rememberEnumPreference(GridCellSizeKey, defaultValue = GridCellSize.SMALL)
val isSystemInDarkTheme = isSystemInDarkTheme()
val useDarkTheme = remember(darkMode, isSystemInDarkTheme) {
@@ -269,6 +272,19 @@ fun AppearanceSettings(
}
}
)
+
+ EnumListPreference(
+ title = { Text(stringResource(R.string.grid_cell_size)) },
+ icon = { Icon(painterResource(R.drawable.grid_view), null) },
+ selectedValue = gridCellSize,
+ onValueSelected = onGridCellSizeChange,
+ valueText = {
+ when (it) {
+ GridCellSize.SMALL -> stringResource(R.string.small)
+ GridCellSize.BIG -> stringResource(R.string.big)
+ }
+ },
+ )
}
TopAppBar(
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 1361a2967..908eec359 100755
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -222,6 +222,9 @@
波浪
其他
預設啟動標籤
+ 網格大小
+ 小
+ 大
內容
登入
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 97aff5968..03cd270d2 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -230,6 +230,9 @@
Squiggly
Misc
Default open tab
+ Grid cell size
+ Small
+ Big
Content
Login