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