Skip to content

Commit c451af0

Browse files
committed
feat(ui): add adaptive layout support
1 parent de38457 commit c451af0

12 files changed

Lines changed: 2058 additions & 706 deletions

File tree

app/src/main/java/org/parallel_sekai/kanade/MainActivity.kt

Lines changed: 381 additions & 278 deletions
Large diffs are not rendered by default.

app/src/main/java/org/parallel_sekai/kanade/data/repository/PlaybackRepository.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,9 @@ open class PlaybackRepository(
420420
}
421421
}
422422

423+
suspend fun resolveMusicByMediaId(mediaId: String): MusicModel? =
424+
sourceManager.getMusicListByMediaIds(listOf(mediaId)).firstOrNull()
425+
423426
private fun createMediaItem(music: MusicModel): MediaItem {
424427
val uniqueId = "${music.sourceId}:${music.id}"
425428
val extras =
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.parallel_sekai.kanade.ui.adaptive
2+
3+
import androidx.compose.foundation.layout.fillMaxWidth
4+
import androidx.compose.foundation.layout.widthIn
5+
import androidx.compose.runtime.Composable
6+
import androidx.compose.runtime.Immutable
7+
import androidx.compose.ui.Modifier
8+
import androidx.compose.ui.platform.LocalConfiguration
9+
import androidx.compose.ui.unit.Dp
10+
import androidx.compose.ui.unit.dp
11+
12+
@Immutable
13+
data class AdaptiveLayoutInfo(
14+
val screenWidthDp: Int,
15+
val isWideScreen: Boolean,
16+
val navigationRailWidth: Dp,
17+
val screenHorizontalPadding: Dp,
18+
val contentMaxWidth: Dp,
19+
val sidebarWidth: Dp,
20+
)
21+
22+
@Composable
23+
fun rememberAdaptiveLayoutInfo(): AdaptiveLayoutInfo {
24+
val screenWidthDp = LocalConfiguration.current.screenWidthDp
25+
val isWideScreen = screenWidthDp >= 840
26+
val contentMaxWidth =
27+
when {
28+
screenWidthDp >= 1400 -> 1280.dp
29+
screenWidthDp >= 1200 -> 1120.dp
30+
screenWidthDp >= 840 -> 1000.dp
31+
else -> 640.dp
32+
}
33+
34+
return AdaptiveLayoutInfo(
35+
screenWidthDp = screenWidthDp,
36+
isWideScreen = isWideScreen,
37+
navigationRailWidth = if (isWideScreen) 92.dp else 0.dp,
38+
screenHorizontalPadding = if (isWideScreen) 20.dp else 0.dp,
39+
contentMaxWidth = contentMaxWidth,
40+
sidebarWidth = if (screenWidthDp >= 1200) 280.dp else 240.dp,
41+
)
42+
}
43+
44+
fun Modifier.adaptiveContentWidth(layoutInfo: AdaptiveLayoutInfo): Modifier =
45+
fillMaxWidth().widthIn(max = layoutInfo.contentMaxWidth)

0 commit comments

Comments
 (0)