Skip to content

Commit 007adf0

Browse files
committed
feat: some structure refinement
1 parent 6cbf1f1 commit 007adf0

16 files changed

Lines changed: 200 additions & 146 deletions

File tree

android/src/main/java/org/succlz123/app/acfun/MainActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class MainActivity : AppCompatActivity() {
2424

2525
setContent {
2626
ScreenContainer(this, this, this, this) {
27-
SharedMainContent()
27+
SharedApp()
2828
}
2929
}
3030
}

desktop/src/jvmMain/kotlin/Main.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import androidx.compose.ui.res.painterResource
1313
import androidx.compose.ui.unit.DpSize
1414
import androidx.compose.ui.unit.dp
1515
import androidx.compose.ui.window.*
16-
import org.succlz123.app.acfun.SharedMainContent
16+
import org.succlz123.app.acfun.SharedApp
1717
import org.succlz123.lib.init.initComposeMultiplatform
1818
import org.succlz123.lib.screen.ScreenContainer
1919
import java.awt.Dimension
@@ -40,7 +40,7 @@ fun main() = application {
4040
rootPane.putClientProperty("apple.awt.transparentTitleBar", true)
4141
rootPane.putClientProperty("apple.awt.windowTitleVisible", false)
4242
}
43-
SharedMainContent()
43+
SharedApp()
4444
AppWindowTitleBar(windowState)
4545
}
4646
}

shared/src/commonMain/kotlin/org/succlz123/app/acfun/SharedMainContent.kt renamed to shared/src/commonMain/kotlin/org/succlz123/app/acfun/SharedApp.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@ object Manifest {
3333
}
3434

3535
@Composable
36-
fun SharedMainContent() {
36+
fun SharedApp() {
3737
val screenNavigator = rememberScreenNavigator()
3838
AcFunTheme {
3939
Box(modifier = Modifier.fillMaxSize()) {
4040
ScreenHost(screenNavigator = screenNavigator, rootScreenName = Manifest.MainScreen) {
4141
groupScreen(screenName = (Manifest.MainScreen)) {
42-
MainScreen()
42+
MainScreen(modifier = Modifier.fillMaxSize())
4343
}
4444
groupScreen(screenName = (Manifest.VideoDetailScreen)) {
4545
VideoDetailScreen()

shared/src/commonMain/kotlin/org/succlz123/app/acfun/theme/AcFunTheme.kt

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,18 @@ import androidx.compose.foundation.isSystemInDarkTheme
44
import androidx.compose.foundation.shape.RoundedCornerShape
55
import androidx.compose.material.*
66
import androidx.compose.runtime.Composable
7+
import androidx.compose.runtime.CompositionLocalProvider
8+
import androidx.compose.runtime.collectAsState
9+
import androidx.compose.runtime.staticCompositionLocalOf
710
import androidx.compose.ui.graphics.Color
811
import androidx.compose.ui.text.TextStyle
912
import androidx.compose.ui.text.font.FontFamily
1013
import androidx.compose.ui.text.font.FontWeight
14+
import androidx.compose.ui.unit.Dp
1115
import androidx.compose.ui.unit.dp
1216
import androidx.compose.ui.unit.sp
17+
import org.succlz123.lib.screen.LocalScreenWindowSizeOwner
18+
import org.succlz123.lib.screen.window.ScreenWindowSizeClass
1319

1420
private val DarkColorPalette = darkColors(
1521
primary = ColorResource.acRed, secondary = Color.LightGray
@@ -19,6 +25,8 @@ private val LightColorPalette = lightColors(
1925
primary = ColorResource.acRed, secondary = Color.Black
2026
)
2127

28+
val LocalAppDimens = staticCompositionLocalOf { expandedDimens }
29+
2230
@Composable
2331
fun AcFunTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable() () -> Unit) {
2432
val colors = if (darkTheme) {
@@ -57,7 +65,35 @@ fun AcFunTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable(
5765
val shapes = Shapes(
5866
small = RoundedCornerShape(8.dp), medium = RoundedCornerShape(12.dp), large = RoundedCornerShape(16.dp)
5967
)
60-
MaterialTheme(
61-
colors = colors, typography = typography, shapes = shapes, content = content
62-
)
63-
}
68+
val sizeClass = LocalScreenWindowSizeOwner.current.getWindowHolder().sizeClass.collectAsState()
69+
val dimens = when (sizeClass.value) {
70+
ScreenWindowSizeClass.Compact -> {
71+
compactDimens
72+
}
73+
74+
ScreenWindowSizeClass.Medium -> {
75+
compactDimens
76+
}
77+
78+
ScreenWindowSizeClass.Expanded -> expandedDimens
79+
}
80+
CompositionLocalProvider(
81+
LocalAppDimens provides dimens
82+
) {
83+
MaterialTheme(
84+
colors = colors, typography = typography, shapes = shapes, content = content
85+
)
86+
}
87+
}
88+
89+
class AppDimens(
90+
val listContentPadding: Dp
91+
)
92+
93+
val compactDimens = AppDimens(
94+
listContentPadding = 12.dp,
95+
)
96+
97+
val expandedDimens = AppDimens(
98+
listContentPadding = 16.dp,
99+
)

shared/src/commonMain/kotlin/org/succlz123/app/acfun/ui/area/AreaContentScreen.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,7 @@ fun AreaContentScreen() {
136136

137137
LaunchedEffect(Unit) {
138138
viewModel.getData(
139-
id,
140-
ArrayList(AreaContentViewModel.MAP.keys.toList())[viewModel.rankSelectIndex.value]
139+
id, ArrayList(AreaContentViewModel.MAP.keys.toList())[viewModel.rankSelectIndex.value]
141140
)
142141
snapshotFlow { viewModel.rankSelectIndex.value }.distinctUntilChanged().collect {
143142
viewModel.getData(
@@ -151,9 +150,7 @@ fun AreaContentScreen() {
151150
LoadingView()
152151
} else {
153152
val content = ArrayList(acContentList)
154-
MainHomeContentItem(
155-
result = ScreenResult.Success(content),
156-
rememberSelectedItem = null,
153+
MainHomeContentItem(result = ScreenResult.Success(content),
157154
isExpandedScreen = isExpandedScreen,
158155
onRefresh = {
159156
viewModel.getData(

shared/src/commonMain/kotlin/org/succlz123/app/acfun/ui/main/MainScreen.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ import org.succlz123.lib.screen.viewmodel.viewModel
2323
import org.succlz123.lib.window.rememberIsWindowExpanded
2424

2525
@Composable
26-
fun MainScreen() {
26+
fun MainScreen(modifier: Modifier) {
2727
val isExpandedScreen = rememberIsWindowExpanded()
2828
val homeVm = viewModel(MainViewModel::class) {
2929
MainViewModel()
3030
}
3131
if (isExpandedScreen) {
3232
Row(
33-
modifier = Modifier.fillMaxSize().background(Color.White), verticalAlignment = Alignment.CenterVertically
33+
modifier = modifier.background(Color.White), verticalAlignment = Alignment.CenterVertically
3434
) {
3535
MainLeft(Modifier.fillMaxHeight().background(ColorResource.background), isExpandedScreen, homeVm)
3636
Column {
@@ -42,7 +42,9 @@ fun MainScreen() {
4242
url = "ic_acfun_title.png", modifier = Modifier.width(83.dp).height(25.dp)
4343
)
4444
}
45-
val rightModifier = Modifier.fillMaxHeight().weight(1f)
45+
val rightModifier = remember {
46+
Modifier.fillMaxHeight().weight(1f)
47+
}
4648
when (homeVm.leftSelectItem.value) {
4749
0 -> {
4850
MainHomeTab(modifier = rightModifier, isExpandedScreen)
@@ -75,7 +77,7 @@ fun MainScreen() {
7577
}
7678
}
7779
} else {
78-
Column(modifier = Modifier.background(ColorResource.background)) {
80+
Column(modifier = modifier.background(ColorResource.background)) {
7981
Box(
8082
modifier = Modifier.fillMaxWidth().padding(0.dp, 18.dp, 0.dp, 8.dp), contentAlignment = Alignment.Center
8183
) {

shared/src/commonMain/kotlin/org/succlz123/app/acfun/ui/main/tab/MainHomeTab.kt

Lines changed: 61 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import androidx.compose.ui.Alignment
1313
import androidx.compose.ui.Modifier
1414
import androidx.compose.ui.graphics.Color
1515
import androidx.compose.ui.unit.dp
16+
import org.succlz123.app.acfun.api.bean.HomeRecommendItem
1617
import org.succlz123.app.acfun.base.AcDivider
1718
import org.succlz123.app.acfun.theme.ColorResource
1819
import org.succlz123.app.acfun.ui.main.tab.item.MainHomeContentItem
@@ -28,53 +29,73 @@ fun MainHomeTab(modifier: Modifier, isExpandedScreen: Boolean) {
2829
}
2930
val rememberSelectedItem = remember { homeVm.rightSelectedCategoryItem }
3031
Column(modifier = modifier.background(Color.White)) {
31-
Column(modifier = Modifier.padding(12.dp, 12.dp)) {
32-
LazyRow(
33-
contentPadding = PaddingValues(start = 12.dp, end = 12.dp),
34-
horizontalArrangement = Arrangement.spacedBy(36.dp)
35-
) {
36-
itemsIndexed(HomeAreaViewModel.CATEGORY) { index, item ->
37-
Column(
38-
horizontalAlignment = Alignment.CenterHorizontally,
39-
modifier = Modifier.noRippleClickable {
40-
rememberSelectedItem.value = index
41-
},
42-
) {
43-
Text(
44-
text = item.name.orEmpty(),
45-
style = MaterialTheme.typography.h3,
46-
color = if (index == rememberSelectedItem.value) {
32+
showHomeTitle(change = { rememberSelectedItem.value = it }) {
33+
rememberSelectedItem.value
34+
}
35+
AcDivider()
36+
val recommendMap = homeVm.recommendMap
37+
showHomeContent(isExpandedScreen, { rememberSelectedItem.value = it }, { rememberSelectedItem.value }, homeVm) {
38+
recommendMap[HomeAreaViewModel.CATEGORY[rememberSelectedItem.value].id] ?: ScreenResult.Uninitialized
39+
}
40+
LaunchedEffect(rememberSelectedItem.value) {
41+
homeVm.getData()
42+
}
43+
}
44+
}
45+
46+
@Composable
47+
fun showHomeTitle(change: (Int) -> Unit, cb: () -> Int) {
48+
Column(modifier = Modifier.padding(12.dp, 12.dp)) {
49+
LazyRow(
50+
contentPadding = PaddingValues(start = 12.dp, end = 12.dp),
51+
horizontalArrangement = Arrangement.spacedBy(36.dp)
52+
) {
53+
itemsIndexed(HomeAreaViewModel.CATEGORY) { index, item ->
54+
Column(
55+
horizontalAlignment = Alignment.CenterHorizontally,
56+
modifier = Modifier.noRippleClickable {
57+
change.invoke(index)
58+
},
59+
) {
60+
Text(
61+
text = item.name.orEmpty(),
62+
style = MaterialTheme.typography.h3,
63+
color = if (index == cb.invoke()) {
64+
ColorResource.acRed
65+
} else {
66+
Color.Black
67+
}
68+
)
69+
Spacer(modifier = Modifier.height(3.dp))
70+
Box(
71+
modifier = Modifier.height(3.dp).width(22.dp).background(
72+
if (index == cb.invoke()) {
4773
ColorResource.acRed
4874
} else {
49-
Color.Black
75+
Color.Transparent
5076
}
5177
)
52-
Spacer(modifier = Modifier.height(3.dp))
53-
Box(
54-
modifier = Modifier.height(3.dp).width(22.dp).background(
55-
if (index == rememberSelectedItem.value) {
56-
ColorResource.acRed
57-
} else {
58-
Color.Transparent
59-
}
60-
)
61-
)
62-
}
78+
)
6379
}
6480
}
6581
}
66-
AcDivider()
67-
LaunchedEffect(rememberSelectedItem.value) {
68-
homeVm.getData()
69-
}
70-
val result =
71-
homeVm.recommendMap[HomeAreaViewModel.CATEGORY[rememberSelectedItem.value].id] ?: ScreenResult.Uninitialized
72-
MainHomeContentItem(result = result,
73-
isExpandedScreen = isExpandedScreen,
74-
rememberSelectedItem = rememberSelectedItem,
75-
onRefresh = {
76-
homeVm.getData(true)
77-
})
7882
}
7983
}
8084

85+
@Composable
86+
fun showHomeContent(
87+
isExpandedScreen: Boolean,
88+
changeTitleSelectIfExist: (Int) -> Unit,
89+
selectTitleIfExist: () -> Int,
90+
homeVm: HomeAreaViewModel,
91+
cb: () -> ScreenResult<ArrayList<HomeRecommendItem>>
92+
) {
93+
MainHomeContentItem(result = cb.invoke(),
94+
changeTitleSelectIfExist = changeTitleSelectIfExist,
95+
selectTitleIfExist = selectTitleIfExist,
96+
isExpandedScreen = isExpandedScreen,
97+
onRefresh = {
98+
homeVm.getData(true)
99+
})
100+
}
101+

shared/src/commonMain/kotlin/org/succlz123/app/acfun/ui/main/tab/MainLiveTab.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ fun MainLiveTab(modifier: Modifier, isExpandedScreen: Boolean) {
1919
MainRightTitleLayout(modifier, text = "直播") {
2020
MainHomeContentItem(
2121
result = liveVm.homeLiveRoomList.value,
22-
rememberSelectedItem = null,
2322
isExpandedScreen = isExpandedScreen,
2423
onRefresh = {
2524
liveVm.refreshLiveRoomData()

shared/src/commonMain/kotlin/org/succlz123/app/acfun/ui/main/tab/MainRankTab.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ fun MainRankTab(modifier: Modifier = Modifier, isExpandedScreen: Boolean) {
5151
}
5252
MainHomeContentItem(
5353
result = rankVm.rank.value,
54-
rememberSelectedItem = null,
5554
isExpandedScreen = isExpandedScreen,
5655
onRefresh = {
5756
rankVm.getRankData(ArrayList(rankVm.rankOption.keys.toList())[optionalState.value], isForce = true)

shared/src/commonMain/kotlin/org/succlz123/app/acfun/ui/main/tab/MainSearchTab.kt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,8 @@ fun MainSearchTab(modifier: Modifier = Modifier, isExpandedScreen: Boolean) {
5151
}
5252
}
5353
}) {
54-
MainHomeContentItem(
55-
result = searchVm.search.value,
56-
rememberSelectedItem = null,
57-
isExpandedScreen = isExpandedScreen,
58-
onRefresh = {
59-
searchVm.search()
60-
}) { searchVm.loadMore() }
54+
MainHomeContentItem(result = searchVm.search.value, isExpandedScreen = isExpandedScreen, onRefresh = {
55+
searchVm.search()
56+
}) { searchVm.loadMore() }
6157
}
6258
}

0 commit comments

Comments
 (0)