11package com.ninecraft.booket.feature.home
22
3+ import androidx.compose.foundation.background
34import androidx.compose.foundation.layout.Arrangement
5+ import androidx.compose.foundation.layout.Box
46import androidx.compose.foundation.layout.Column
7+ import androidx.compose.foundation.layout.PaddingValues
8+ import androidx.compose.foundation.layout.Row
59import androidx.compose.foundation.layout.Spacer
610import androidx.compose.foundation.layout.fillMaxSize
11+ import androidx.compose.foundation.layout.fillMaxWidth
712import androidx.compose.foundation.layout.height
8- import androidx.compose.material3.Button
13+ import androidx.compose.foundation.layout.padding
14+ import androidx.compose.foundation.layout.size
15+ import androidx.compose.foundation.pager.HorizontalPager
16+ import androidx.compose.foundation.pager.rememberPagerState
17+ import androidx.compose.foundation.shape.CircleShape
918import androidx.compose.material3.Text
1019import androidx.compose.runtime.Composable
11- import androidx.compose.ui.Alignment
20+ import androidx.compose.runtime.DisposableEffect
1221import androidx.compose.ui.Modifier
22+ import androidx.compose.ui.draw.clip
23+ import androidx.compose.ui.res.stringResource
1324import androidx.compose.ui.unit.dp
1425import com.ninecraft.booket.core.designsystem.DevicePreview
26+ import com.ninecraft.booket.core.designsystem.theme.HomeBg
1527import com.ninecraft.booket.core.designsystem.theme.ReedTheme
28+ import com.ninecraft.booket.core.designsystem.theme.White
29+ import com.ninecraft.booket.feature.home.component.BookCard
30+ import com.ninecraft.booket.feature.home.component.HomeBanner
31+ import com.ninecraft.booket.feature.home.component.HomeHeader
1632import com.ninecraft.booket.feature.screens.HomeScreen
1733import com.slack.circuit.codegen.annotations.CircuitInject
1834import dagger.hilt.android.components.ActivityRetainedComponent
35+ import tech.thdev.compose.exteions.system.ui.controller.rememberSystemUiController
1936
2037@CircuitInject(HomeScreen ::class , ActivityRetainedComponent ::class )
2138@Composable
@@ -25,38 +42,98 @@ internal fun HomeUi(
2542) {
2643 Column (
2744 modifier = modifier.fillMaxSize(),
28- horizontalAlignment = Alignment .CenterHorizontally ,
29- verticalArrangement = Arrangement .Center ,
3045 ) {
46+ // TODO: Android 15에서 statusBar 색상 적용 안되는 문제 있음. 해결 예정.
47+ val systemUiController = rememberSystemUiController()
48+
49+ DisposableEffect (systemUiController) {
50+ systemUiController.setStatusBarColor(
51+ color = HomeBg ,
52+ darkIcons = true ,
53+ )
54+ onDispose {
55+ systemUiController.setStatusBarColor(
56+ color = White ,
57+ darkIcons = true ,
58+ )
59+ }
60+ }
61+
62+ HomeHeader (
63+ onSettingsClick = {
64+ state.eventSink(HomeUiEvent .OnSettingsClick )
65+ },
66+ modifier = modifier,
67+ )
68+ HomeBanner (
69+ onBookRegisterClick = {
70+ state.eventSink(HomeUiEvent .OnBookRegisterClick )
71+ },
72+ modifier = modifier,
73+ )
3174 HomeContent (
3275 state = state,
3376 modifier = modifier,
3477 )
3578 }
3679}
3780
38- @Suppress(" unused" )
3981@Composable
4082internal fun HomeContent (
4183 state : HomeUiState ,
4284 modifier : Modifier = Modifier ,
4385) {
44- Text (text = " 홈" )
45- Spacer (modifier = Modifier .height(16 .dp))
46- Button (
47- onClick = {
48- state.eventSink(HomeUiEvent .OnButtonClick )
49- },
50- ) {
51- Text (text = " 도서 검색 이동" )
52- }
53- Spacer (modifier = Modifier .height(16 .dp))
54- Button (
55- onClick = {
56- state.eventSink(HomeUiEvent .OnRecordButtonClick )
57- },
86+ val dummyBooks = listOf (
87+ Book (" 여름은 오래 그곳에 남아" , " 마쓰이에 마사시" , " 비채" , " https://image.aladin.co.kr/product/7492/9/cover200/8934972203_1.jpg" , 3 ),
88+ Book (" 여름은 오래 그곳에 남아" , " 마쓰이에 마사시" , " 비채" , " https://image.aladin.co.kr/product/7492/9/cover200/8934972203_1.jpg" , 3 ),
89+ Book (" 여름은 오래 그곳에 남아" , " 마쓰이에 마사시" , " 비채" , " https://image.aladin.co.kr/product/7492/9/cover200/8934972203_1.jpg" , 3 ),
90+ )
91+ Column (
92+ modifier = modifier
93+ .fillMaxSize()
94+ .background(ReedTheme .colors.baseSecondary),
5895 ) {
59- Text (text = " 독서 기록 작성" )
96+ Spacer (modifier = Modifier .height(ReedTheme .spacing.spacing6))
97+ Text (
98+ text = stringResource(R .string.home_content_label_reading_now),
99+ modifier = Modifier .padding(start = ReedTheme .spacing.spacing5),
100+ color = ReedTheme .colors.contentSecondary,
101+ style = ReedTheme .typography.headline2Medium,
102+ )
103+ Spacer (modifier = Modifier .height(ReedTheme .spacing.spacing3))
104+ val pagerState = rememberPagerState(pageCount = { dummyBooks.size })
105+ HorizontalPager (
106+ state = pagerState,
107+ modifier = Modifier .fillMaxWidth(),
108+ contentPadding = PaddingValues (horizontal = ReedTheme .spacing.spacing5),
109+ pageSpacing = ReedTheme .spacing.spacing5,
110+ ) { page ->
111+ BookCard (
112+ bookInfo = dummyBooks[page],
113+ onBookDetailClick = {
114+ state.eventSink(HomeUiEvent .OnBookDetailClick )
115+ },
116+ onRecordButtonClick = {
117+ state.eventSink(HomeUiEvent .OnRecordButtonClick )
118+ },
119+ )
120+ }
121+ Spacer (modifier = Modifier .height(ReedTheme .spacing.spacing5))
122+ Row (
123+ modifier = Modifier .fillMaxWidth(),
124+ horizontalArrangement = Arrangement .Center ,
125+ ) {
126+ repeat(pagerState.pageCount) { iteration ->
127+ val color = if (pagerState.currentPage == iteration) ReedTheme .colors.bgPrimary else ReedTheme .colors.bgSecondaryPressed
128+ Box (
129+ modifier = Modifier
130+ .size(12 .dp)
131+ .padding(3 .dp)
132+ .clip(CircleShape )
133+ .background(color),
134+ )
135+ }
136+ }
60137 }
61138}
62139
0 commit comments