Skip to content

Commit

Permalink
Added a size slider for the List Display Mode (aniyomiorg#1894)
Browse files Browse the repository at this point in the history
  • Loading branch information
MavikBow committed Jan 28, 2025
1 parent 03a7169 commit eae6545
Show file tree
Hide file tree
Showing 9 changed files with 98 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import tachiyomi.presentation.core.util.plus
@Composable
internal fun AnimeLibraryList(
items: List<AnimeLibraryItem>,
entries: Int,
containerHeight: Int,
contentPadding: PaddingValues,
selection: List<LibraryAnime>,
onClick: (LibraryAnime) -> Unit,
Expand Down Expand Up @@ -74,6 +76,8 @@ internal fun AnimeLibraryList(
} else {
null
},
entries = entries,
containerHeight = containerHeight,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.unit.dp
import eu.kanade.core.preference.PreferenceMutableState
Expand All @@ -42,8 +44,13 @@ fun AnimeLibraryPager(
onLongClickAnime: (LibraryAnime) -> Unit,
onClickContinueWatching: ((LibraryAnime) -> Unit)?,
) {
var containerHeight by remember { mutableIntStateOf(0) }
HorizontalPager(
modifier = Modifier.fillMaxSize(),
modifier = Modifier
.fillMaxSize()
.onGloballyPositioned { layoutCoordinates ->
containerHeight = layoutCoordinates.size.height
},
state = state,
verticalAlignment = Alignment.Top,
) { page ->
Expand All @@ -64,19 +71,16 @@ fun AnimeLibraryPager(
}

val displayMode by getDisplayMode(page)
val columns by if (displayMode != LibraryDisplayMode.List) {
val configuration = LocalConfiguration.current
val isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE

remember(isLandscape) { getColumnsForOrientation(isLandscape) }
} else {
remember { mutableIntStateOf(0) }
}
val configuration = LocalConfiguration.current
val isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
val columns by remember(isLandscape) { getColumnsForOrientation(isLandscape) }

when (displayMode) {
LibraryDisplayMode.List -> {
AnimeLibraryList(
items = library,
entries = columns,
containerHeight = containerHeight,
contentPadding = contentPadding,
selection = selectedAnime,
onClick = onClickAnime,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import tachiyomi.presentation.core.components.SettingsChipRow
import tachiyomi.presentation.core.components.SliderItem
import tachiyomi.presentation.core.components.SortItem
import tachiyomi.presentation.core.components.TriStateItem
import tachiyomi.presentation.core.i18n.pluralStringResource
import tachiyomi.presentation.core.i18n.stringResource
import tachiyomi.presentation.core.util.collectAsState

Expand Down Expand Up @@ -248,17 +249,29 @@ private fun ColumnScope.DisplayPage(
}
}

if (displayMode != LibraryDisplayMode.List) {
val configuration = LocalConfiguration.current
val columnPreference = remember {
if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
screenModel.libraryPreferences.animeLandscapeColumns()
} else {
screenModel.libraryPreferences.animePortraitColumns()
}
val configuration = LocalConfiguration.current
val columnPreference = remember {
if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
screenModel.libraryPreferences.animeLandscapeColumns()
} else {
screenModel.libraryPreferences.animePortraitColumns()
}
}

val columns by columnPreference.collectAsState()
val columns by columnPreference.collectAsState()
if (displayMode == LibraryDisplayMode.List) {
SliderItem(
label = stringResource(MR.strings.pref_library_rows),
max = 10,
value = columns,
valueText = if (columns > 0) {
pluralStringResource(MR.plurals.pref_library_entries_in_column, columns, columns,)
} else {
stringResource(MR.strings.label_default)
},
onChange = columnPreference::set,
)
} else {
SliderItem(
label = stringResource(MR.strings.pref_library_columns),
max = 10,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import androidx.compose.ui.draw.drawBehind
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shadow
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp
Expand Down Expand Up @@ -338,19 +339,28 @@ fun EntryListItem(
onClick: () -> Unit,
badge: @Composable (RowScope.() -> Unit),
onClickContinueViewing: (() -> Unit)? = null,
entries: Int = -1,
containerHeight: Int = 0,
) {
val density = LocalDensity.current
Row(
modifier = Modifier
.selectedBackground(isSelected)
.height(56.dp)
.height(
when (entries) {
-1 -> { 76.dp }
0 -> { with(density){(containerHeight / 7).toDp()} - (3/7).dp }
else -> { with(density){(containerHeight / entries).toDp()} - (3/entries).dp }
}
)
.combinedClickable(
onClick = onClick,
onLongClick = onLongClick,
)
.padding(horizontal = 16.dp, vertical = 8.dp),
.padding(horizontal = 16.dp, vertical = 3.dp),
verticalAlignment = Alignment.CenterVertically,
) {
ItemCover.Square(
ItemCover.Book(
modifier = Modifier
.fillMaxHeight()
.alpha(coverAlpha),
Expand All @@ -361,7 +371,7 @@ fun EntryListItem(
modifier = Modifier
.padding(horizontal = 16.dp)
.weight(1f),
maxLines = 2,
//maxLines = 2,
overflow = TextOverflow.Ellipsis,
style = MaterialTheme.typography.bodyMedium,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import tachiyomi.presentation.core.util.plus
@Composable
internal fun MangaLibraryList(
items: List<MangaLibraryItem>,
entries: Int,
containerHeight: Int,
contentPadding: PaddingValues,
selection: List<LibraryManga>,
onClick: (LibraryManga) -> Unit,
Expand Down Expand Up @@ -74,6 +76,8 @@ internal fun MangaLibraryList(
} else {
null
},
entries = entries,
containerHeight = containerHeight,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.unit.dp
import eu.kanade.core.preference.PreferenceMutableState
Expand All @@ -42,8 +44,13 @@ fun MangaLibraryPager(
onLongClickManga: (LibraryManga) -> Unit,
onClickContinueReading: ((LibraryManga) -> Unit)?,
) {
var containerHeight by remember { mutableIntStateOf(0) }
HorizontalPager(
modifier = Modifier.fillMaxSize(),
modifier = Modifier
.fillMaxSize()
.onGloballyPositioned { layoutCoordinates ->
containerHeight = layoutCoordinates.size.height
},
state = state,
verticalAlignment = Alignment.Top,
) { page ->
Expand All @@ -64,19 +71,16 @@ fun MangaLibraryPager(
}

val displayMode by getDisplayMode(page)
val columns by if (displayMode != LibraryDisplayMode.List) {
val configuration = LocalConfiguration.current
val isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE

remember(isLandscape) { getColumnsForOrientation(isLandscape) }
} else {
remember { mutableIntStateOf(0) }
}
val configuration = LocalConfiguration.current
val isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
val columns by remember(isLandscape) { getColumnsForOrientation(isLandscape) }

when (displayMode) {
LibraryDisplayMode.List -> {
MangaLibraryList(
items = library,
entries = columns,
containerHeight = containerHeight,
contentPadding = contentPadding,
selection = selectedManga,
onClick = onClickManga,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import tachiyomi.presentation.core.components.SettingsChipRow
import tachiyomi.presentation.core.components.SliderItem
import tachiyomi.presentation.core.components.SortItem
import tachiyomi.presentation.core.components.TriStateItem
import tachiyomi.presentation.core.i18n.pluralStringResource
import tachiyomi.presentation.core.i18n.stringResource
import tachiyomi.presentation.core.util.collectAsState

Expand Down Expand Up @@ -247,23 +248,35 @@ private fun ColumnScope.DisplayPage(
}
}

if (displayMode != LibraryDisplayMode.List) {
val configuration = LocalConfiguration.current
val columnPreference = remember {
if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
screenModel.libraryPreferences.mangaLandscapeColumns()
} else {
screenModel.libraryPreferences.mangaPortraitColumns()
}
val configuration = LocalConfiguration.current
val columnPreference = remember {
if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
screenModel.libraryPreferences.mangaLandscapeColumns()
} else {
screenModel.libraryPreferences.mangaPortraitColumns()
}
}

val columns by columnPreference.collectAsState()
val columns by columnPreference.collectAsState()
if (displayMode == LibraryDisplayMode.List) {
SliderItem(
label = stringResource(MR.strings.pref_library_rows),
max = 10,
value = columns,
valueText = if (columns > 0) {
pluralStringResource(MR.plurals.pref_library_entries_in_column, columns, columns,)
} else {
stringResource(MR.strings.label_default)
},
onChange = columnPreference::set,
)
} else {
SliderItem(
label = stringResource(MR.strings.pref_library_columns),
max = 10,
value = columns,
valueText = if (columns > 0) {
stringResource(MR.strings.pref_library_columns_per_row, columns)
stringResource(MR.strings.pref_library_columns_per_row, columns,)
} else {
stringResource(MR.strings.label_default)
},
Expand Down
4 changes: 4 additions & 0 deletions i18n/src/commonMain/moko-resources/base/plurals.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="pref_library_entries_in_column">
<item quantity="one">1 entry</item>
<item quantity="other">%d entries</item>
</plurals>
<plurals name="lock_after_mins">
<item quantity="one">After %1$s minute</item>
<item quantity="other">After %1$s minutes</item>
Expand Down
1 change: 1 addition & 0 deletions i18n/src/commonMain/moko-resources/base/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -540,6 +540,7 @@
<string name="pref_category_display">Display</string>
<string name="pref_library_columns">Grid size</string>
<string name="pref_library_columns_per_row">%d per row</string>
<string name="pref_library_rows">List size</string>
<string name="portrait">Portrait</string>
<string name="landscape">Landscape</string>
<string name="pref_category_library_update">Global update</string>
Expand Down

0 comments on commit eae6545

Please sign in to comment.