Skip to content

Commit 838870e

Browse files
authored
Merge pull request #115 from YAPP-Github/BOOK-232-feature/#114
feat: Splash 화면 UI 구성 및 플로우 구현
2 parents a42350b + 7a19efb commit 838870e

File tree

49 files changed

+843
-778
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+843
-778
lines changed

core/designsystem/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ dependencies {
1313
implementations(
1414
projects.core.common,
1515

16+
libs.androidx.splash,
17+
1618
libs.coil.compose,
1719
libs.logger,
1820

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="108dp"
3+
android:height="108dp"
4+
android:viewportWidth="192"
5+
android:viewportHeight="192">
6+
7+
<path
8+
android:fillColor="@color/green_500"
9+
android:pathData="M0,0h192v192h-192z" />
10+
11+
</vector>

core/designsystem/src/main/res/values/colors.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@
77
<color name="teal_700">#FF018786</color>
88
<color name="black">#FF000000</color>
99
<color name="white">#FFFFFFFF</color>
10+
<color name="green_500">#FF2F9647</color>
1011
</resources>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources>
3+
4+
<style name="Theme.Booket.Splash" parent="Theme.SplashScreen">
5+
<item name="windowSplashScreenBackground">#FF2F9647</item>
6+
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_dummy_splash</item>
7+
<item name="postSplashScreenTheme">@style/Theme.Booket</item>
8+
</style>
9+
10+
</resources>

core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/ReedService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ interface ReedService {
4040
suspend fun withdraw()
4141

4242
// User endpoints (auth required)
43-
@PUT("api/v1/users/me/terms-agreement")
43+
@PUT("api/v1/users/terms-agreement")
4444
suspend fun agreeTerms(@Body termsAgreementRequest: TermsAgreementRequest): TermsAgreementResponse
4545

4646
@GET("api/v1/users/me")

feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailUi.kt

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.ninecraft.booket.feature.detail.book
22

33
import androidx.compose.foundation.layout.Column
4+
import androidx.compose.foundation.layout.PaddingValues
45
import androidx.compose.foundation.layout.Row
56
import androidx.compose.foundation.layout.Spacer
67
import androidx.compose.foundation.layout.fillMaxSize
@@ -36,8 +37,8 @@ import com.ninecraft.booket.core.designsystem.component.button.ReedButton
3637
import com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle
3738
import com.ninecraft.booket.core.designsystem.component.button.largeButtonStyle
3839
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
40+
import com.ninecraft.booket.core.ui.ReedScaffold
3941
import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar
40-
import com.ninecraft.booket.core.ui.component.ReedFullScreen
4142
import com.ninecraft.booket.feature.detail.book.component.BookUpdateBottomSheet
4243
import com.ninecraft.booket.feature.detail.book.component.CollectedSeed
4344
import com.ninecraft.booket.feature.detail.book.component.RecordSortBottomSheet
@@ -65,14 +66,13 @@ internal fun BookDetailUi(
6566
eventSink = state.eventSink,
6667
)
6768

68-
ReedFullScreen(modifier = modifier) {
69-
ReedBackTopAppBar(
70-
title = "",
71-
onBackClick = {
72-
state.eventSink(BookDetailUiEvent.OnBackClick)
73-
},
69+
ReedScaffold(
70+
modifier = modifier.fillMaxSize(),
71+
) { innerPadding ->
72+
BookDetailContent(
73+
state = state,
74+
innerPadding = innerPadding,
7475
)
75-
BookDetailContent(state = state)
7676
}
7777

7878
if (state.isBookUpdateBottomSheetVisible) {
@@ -122,13 +122,21 @@ internal fun BookDetailUi(
122122
@Composable
123123
internal fun BookDetailContent(
124124
state: BookDetailUiState,
125+
innerPadding: PaddingValues,
125126
modifier: Modifier = Modifier,
126127
) {
127128
Column(
128129
modifier = modifier
129130
.fillMaxSize()
131+
.padding(innerPadding)
130132
.verticalScroll(rememberScrollState()),
131133
) {
134+
ReedBackTopAppBar(
135+
title = "",
136+
onBackClick = {
137+
state.eventSink(BookDetailUiEvent.OnBackClick)
138+
},
139+
)
132140
Row(
133141
modifier = modifier
134142
.fillMaxWidth()

feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.ninecraft.booket.feature.detail.record
22

3-
import androidx.compose.foundation.background
43
import androidx.compose.foundation.layout.BoxWithConstraints
54
import androidx.compose.foundation.layout.Column
5+
import androidx.compose.foundation.layout.PaddingValues
66
import androidx.compose.foundation.layout.Row
77
import androidx.compose.foundation.layout.Spacer
88
import androidx.compose.foundation.layout.fillMaxSize
@@ -28,7 +28,7 @@ import com.ninecraft.booket.core.designsystem.component.ReedDivider
2828
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
2929
import com.ninecraft.booket.core.designsystem.theme.White
3030
import com.ninecraft.booket.core.model.RecordDetailModel
31-
import com.ninecraft.booket.core.ui.component.ReedFullScreen
31+
import com.ninecraft.booket.core.ui.ReedScaffold
3232
import com.ninecraft.booket.core.ui.component.ReedTopAppBar
3333
import com.ninecraft.booket.feature.detail.R
3434
import com.ninecraft.booket.feature.detail.record.component.QuoteBox
@@ -48,26 +48,36 @@ internal fun RecordDetailUi(
4848
state = state,
4949
)
5050

51-
ReedFullScreen(modifier = modifier) {
52-
ReedTopAppBar(
53-
title = stringResource(R.string.review_detail_title),
54-
startIconRes = designR.drawable.ic_close,
55-
startIconDescription = "Close Icon",
56-
startIconOnClick = {
57-
state.eventSink(RecordDetailUiEvent.OnCloseClicked)
58-
},
51+
ReedScaffold(
52+
modifier = modifier.fillMaxSize(),
53+
containerColor = White,
54+
) { innerPadding ->
55+
ReviewDetailContent(
56+
state = state,
57+
innerPadding = innerPadding,
5958
)
60-
ReviewDetailContent(state = state, modifier = modifier)
6159
}
6260
}
6361

6462
@Composable
65-
private fun ReviewDetailContent(state: RecordDetailUiState, modifier: Modifier = Modifier) {
63+
private fun ReviewDetailContent(
64+
state: RecordDetailUiState,
65+
innerPadding: PaddingValues,
66+
modifier: Modifier = Modifier,
67+
) {
6668
Column(
67-
modifier = Modifier
69+
modifier = modifier
6870
.fillMaxSize()
69-
.background(White),
71+
.padding(innerPadding),
7072
) {
73+
ReedTopAppBar(
74+
title = stringResource(R.string.review_detail_title),
75+
startIconRes = designR.drawable.ic_close,
76+
startIconDescription = "Close Icon",
77+
startIconOnClick = {
78+
state.eventSink(RecordDetailUiEvent.OnCloseClicked)
79+
},
80+
)
7181
Row(
7282
modifier = modifier
7383
.fillMaxWidth()

feature/home/build.gradle.kts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,5 @@ ksp {
1717
dependencies {
1818
implementations(
1919
libs.logger,
20-
21-
libs.compose.system.ui.controller,
2220
)
2321
}

feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,14 @@ class HomePresenter @AssistedInject constructor(
7878
is HomeUiEvent.OnBookDetailClick -> {
7979
navigator.goTo(BookDetailScreen(""))
8080
}
81+
82+
is HomeUiEvent.OnTabSelected -> {
83+
navigator.resetRoot(
84+
newRoot = event.tab.screen,
85+
saveState = true,
86+
restoreState = true,
87+
)
88+
}
8189
}
8290
}
8391

feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -12,75 +12,72 @@ import androidx.compose.foundation.layout.fillMaxWidth
1212
import androidx.compose.foundation.layout.height
1313
import androidx.compose.foundation.layout.padding
1414
import androidx.compose.foundation.layout.size
15-
import androidx.compose.foundation.layout.statusBarsPadding
1615
import androidx.compose.foundation.pager.HorizontalPager
1716
import androidx.compose.foundation.pager.rememberPagerState
1817
import androidx.compose.foundation.shape.CircleShape
1918
import androidx.compose.material3.Text
2019
import androidx.compose.runtime.Composable
21-
import androidx.compose.runtime.DisposableEffect
2220
import androidx.compose.ui.Modifier
2321
import androidx.compose.ui.draw.clip
2422
import androidx.compose.ui.res.stringResource
2523
import androidx.compose.ui.unit.dp
2624
import com.ninecraft.booket.core.designsystem.DevicePreview
2725
import com.ninecraft.booket.core.designsystem.theme.HomeBg
2826
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
29-
import com.ninecraft.booket.core.designsystem.theme.White
27+
import com.ninecraft.booket.core.ui.ReedScaffold
3028
import com.ninecraft.booket.feature.home.component.BookCard
3129
import com.ninecraft.booket.feature.home.component.EmptyBookCard
3230
import com.ninecraft.booket.feature.home.component.HomeBanner
3331
import com.ninecraft.booket.feature.home.component.HomeHeader
3432
import com.ninecraft.booket.feature.screens.HomeScreen
33+
import com.ninecraft.booket.feature.screens.component.MainBottomBar
34+
import com.ninecraft.booket.feature.screens.component.MainTab
3535
import com.slack.circuit.codegen.annotations.CircuitInject
3636
import dagger.hilt.android.components.ActivityRetainedComponent
37-
import tech.thdev.compose.exteions.system.ui.controller.rememberSystemUiController
37+
import kotlinx.collections.immutable.toImmutableList
3838

3939
@CircuitInject(HomeScreen::class, ActivityRetainedComponent::class)
4040
@Composable
4141
internal fun HomeUi(
4242
state: HomeUiState,
4343
modifier: Modifier = Modifier,
4444
) {
45-
// TODO: Android 15에서 statusBar 색상 적용 안되는 문제 있음. 해결 예정.
46-
val systemUiController = rememberSystemUiController()
45+
HandleHomeSideEffects(state = state)
4746

48-
DisposableEffect(systemUiController) {
49-
systemUiController.setStatusBarColor(
50-
color = HomeBg,
51-
darkIcons = true,
52-
)
53-
onDispose {
54-
systemUiController.setStatusBarColor(
55-
color = White,
56-
darkIcons = true,
47+
ReedScaffold(
48+
modifier = modifier.fillMaxSize(),
49+
bottomBar = {
50+
MainBottomBar(
51+
tabs = MainTab.entries.toImmutableList(),
52+
currentTab = MainTab.HOME,
53+
onTabSelected = { tab ->
54+
state.eventSink(HomeUiEvent.OnTabSelected(tab))
55+
},
56+
)
57+
},
58+
) { innerPadding ->
59+
Column(
60+
modifier = Modifier
61+
.fillMaxSize()
62+
.background(HomeBg)
63+
.padding(innerPadding),
64+
) {
65+
HomeHeader(
66+
onSettingsClick = {
67+
state.eventSink(HomeUiEvent.OnSettingsClick)
68+
},
69+
)
70+
HomeBanner(
71+
onBookRegisterClick = {
72+
state.eventSink(HomeUiEvent.OnBookRegisterClick)
73+
},
74+
)
75+
HomeContent(
76+
state = state,
77+
modifier = Modifier,
5778
)
5879
}
5980
}
60-
61-
HandleHomeSideEffects(state = state)
62-
63-
Column(
64-
modifier = modifier
65-
.fillMaxSize()
66-
.background(HomeBg)
67-
.statusBarsPadding(),
68-
) {
69-
HomeHeader(
70-
onSettingsClick = {
71-
state.eventSink(HomeUiEvent.OnSettingsClick)
72-
},
73-
)
74-
HomeBanner(
75-
onBookRegisterClick = {
76-
state.eventSink(HomeUiEvent.OnBookRegisterClick)
77-
},
78-
)
79-
HomeContent(
80-
state = state,
81-
modifier = modifier,
82-
)
83-
}
8481
}
8582

8683
@Composable

0 commit comments

Comments
 (0)