Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions core/designsystem/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ dependencies {
implementations(
projects.core.common,

libs.androidx.splash,

libs.coil.compose,
libs.logger,

Expand Down
11 changes: 11 additions & 0 deletions core/designsystem/src/main/res/drawable/ic_dummy_splash.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="192"
android:viewportHeight="192">

<path
android:fillColor="@color/green_500"
android:pathData="M0,0h192v192h-192z" />

</vector>
1 change: 1 addition & 0 deletions core/designsystem/src/main/res/values/colors.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="green_500">#FF2F9647</color>
</resources>
10 changes: 10 additions & 0 deletions core/designsystem/src/main/res/values/splash.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>

<style name="Theme.Booket.Splash" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">#FF2F9647</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_dummy_splash</item>
<item name="postSplashScreenTheme">@style/Theme.Booket</item>
</style>

</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ interface ReedService {
suspend fun withdraw()

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

@GET("api/v1/users/me")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.ninecraft.booket.feature.detail.book

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
Expand Down Expand Up @@ -36,8 +37,8 @@ import com.ninecraft.booket.core.designsystem.component.button.ReedButton
import com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle
import com.ninecraft.booket.core.designsystem.component.button.largeButtonStyle
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
import com.ninecraft.booket.core.ui.ReedScaffold
import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar
import com.ninecraft.booket.core.ui.component.ReedFullScreen
import com.ninecraft.booket.feature.detail.book.component.BookUpdateBottomSheet
import com.ninecraft.booket.feature.detail.book.component.CollectedSeed
import com.ninecraft.booket.feature.detail.book.component.RecordSortBottomSheet
Expand Down Expand Up @@ -65,14 +66,13 @@ internal fun BookDetailUi(
eventSink = state.eventSink,
)

ReedFullScreen(modifier = modifier) {
ReedBackTopAppBar(
title = "",
onBackClick = {
state.eventSink(BookDetailUiEvent.OnBackClick)
},
ReedScaffold(
modifier = modifier.fillMaxSize(),
) { innerPadding ->
BookDetailContent(
state = state,
innerPadding = innerPadding,
)
BookDetailContent(state = state)
}

if (state.isBookUpdateBottomSheetVisible) {
Expand Down Expand Up @@ -122,13 +122,21 @@ internal fun BookDetailUi(
@Composable
internal fun BookDetailContent(
state: BookDetailUiState,
innerPadding: PaddingValues,
modifier: Modifier = Modifier,
) {
Column(
modifier = modifier
.fillMaxSize()
.padding(innerPadding)
.verticalScroll(rememberScrollState()),
) {
ReedBackTopAppBar(
title = "",
onBackClick = {
state.eventSink(BookDetailUiEvent.OnBackClick)
},
)
Row(
modifier = modifier
.fillMaxWidth()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.ninecraft.booket.feature.detail.record

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
Expand All @@ -28,7 +28,7 @@ import com.ninecraft.booket.core.designsystem.component.ReedDivider
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
import com.ninecraft.booket.core.designsystem.theme.White
import com.ninecraft.booket.core.model.RecordDetailModel
import com.ninecraft.booket.core.ui.component.ReedFullScreen
import com.ninecraft.booket.core.ui.ReedScaffold
import com.ninecraft.booket.core.ui.component.ReedTopAppBar
import com.ninecraft.booket.feature.detail.R
import com.ninecraft.booket.feature.detail.record.component.QuoteBox
Expand All @@ -48,26 +48,36 @@ internal fun RecordDetailUi(
state = state,
)

ReedFullScreen(modifier = modifier) {
ReedTopAppBar(
title = stringResource(R.string.review_detail_title),
startIconRes = designR.drawable.ic_close,
startIconDescription = "Close Icon",
startIconOnClick = {
state.eventSink(RecordDetailUiEvent.OnCloseClicked)
},
ReedScaffold(
modifier = modifier.fillMaxSize(),
containerColor = White,
) { innerPadding ->
ReviewDetailContent(
state = state,
innerPadding = innerPadding,
)
ReviewDetailContent(state = state, modifier = modifier)
}
}

@Composable
private fun ReviewDetailContent(state: RecordDetailUiState, modifier: Modifier = Modifier) {
private fun ReviewDetailContent(
state: RecordDetailUiState,
innerPadding: PaddingValues,
modifier: Modifier = Modifier,
) {
Column(
modifier = Modifier
modifier = modifier
.fillMaxSize()
.background(White),
.padding(innerPadding),
) {
ReedTopAppBar(
title = stringResource(R.string.review_detail_title),
startIconRes = designR.drawable.ic_close,
startIconDescription = "Close Icon",
startIconOnClick = {
state.eventSink(RecordDetailUiEvent.OnCloseClicked)
},
)
Row(
modifier = modifier
.fillMaxWidth()
Expand Down
2 changes: 0 additions & 2 deletions feature/home/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,5 @@ ksp {
dependencies {
implementations(
libs.logger,

libs.compose.system.ui.controller,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,14 @@ class HomePresenter @AssistedInject constructor(
is HomeUiEvent.OnBookDetailClick -> {
navigator.goTo(BookDetailScreen(""))
}

is HomeUiEvent.OnTabSelected -> {
navigator.resetRoot(
newRoot = event.tab.screen,
saveState = true,
restoreState = true,
)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,75 +12,72 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.ninecraft.booket.core.designsystem.DevicePreview
import com.ninecraft.booket.core.designsystem.theme.HomeBg
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
import com.ninecraft.booket.core.designsystem.theme.White
import com.ninecraft.booket.core.ui.ReedScaffold
import com.ninecraft.booket.feature.home.component.BookCard
import com.ninecraft.booket.feature.home.component.EmptyBookCard
import com.ninecraft.booket.feature.home.component.HomeBanner
import com.ninecraft.booket.feature.home.component.HomeHeader
import com.ninecraft.booket.feature.screens.HomeScreen
import com.ninecraft.booket.feature.screens.component.MainBottomBar
import com.ninecraft.booket.feature.screens.component.MainTab
import com.slack.circuit.codegen.annotations.CircuitInject
import dagger.hilt.android.components.ActivityRetainedComponent
import tech.thdev.compose.exteions.system.ui.controller.rememberSystemUiController
import kotlinx.collections.immutable.toImmutableList

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

DisposableEffect(systemUiController) {
systemUiController.setStatusBarColor(
color = HomeBg,
darkIcons = true,
)
onDispose {
systemUiController.setStatusBarColor(
color = White,
darkIcons = true,
ReedScaffold(
modifier = modifier.fillMaxSize(),
bottomBar = {
MainBottomBar(
tabs = MainTab.entries.toImmutableList(),
currentTab = MainTab.HOME,
onTabSelected = { tab ->
state.eventSink(HomeUiEvent.OnTabSelected(tab))
},
)
},
) { innerPadding ->
Column(
modifier = Modifier
.fillMaxSize()
.background(HomeBg)
.padding(innerPadding),
) {
HomeHeader(
onSettingsClick = {
state.eventSink(HomeUiEvent.OnSettingsClick)
},
)
HomeBanner(
onBookRegisterClick = {
state.eventSink(HomeUiEvent.OnBookRegisterClick)
},
)
HomeContent(
state = state,
modifier = Modifier,
)
}
}

HandleHomeSideEffects(state = state)

Column(
modifier = modifier
.fillMaxSize()
.background(HomeBg)
.statusBarsPadding(),
) {
HomeHeader(
onSettingsClick = {
state.eventSink(HomeUiEvent.OnSettingsClick)
},
)
HomeBanner(
onBookRegisterClick = {
state.eventSink(HomeUiEvent.OnBookRegisterClick)
},
)
HomeContent(
state = state,
modifier = modifier,
)
}
}

@Composable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.ninecraft.booket.feature.home

import androidx.compose.runtime.Immutable
import com.ninecraft.booket.core.model.RecentBookModel
import com.ninecraft.booket.feature.screens.component.MainTab
import com.slack.circuit.runtime.CircuitUiEvent
import com.slack.circuit.runtime.CircuitUiState
import kotlinx.collections.immutable.ImmutableList
Expand All @@ -27,4 +28,5 @@ sealed interface HomeUiEvent : CircuitUiEvent {
data object OnBookRegisterClick : HomeUiEvent
data class OnRecordButtonClick(val userBookId: String) : HomeUiEvent
data object OnBookDetailClick : HomeUiEvent
data class OnTabSelected(val tab: MainTab) : HomeUiEvent
}
2 changes: 0 additions & 2 deletions feature/library/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,5 @@ ksp {
dependencies {
implementations(
libs.logger,

libs.compose.system.ui.controller,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,14 @@ class LibraryPresenter @AssistedInject constructor(
is LibraryUiEvent.OnRetryClick -> {
filterLibraryBooks(status = currentFilter.getApiValue(), page = currentPage, size = PAGE_SIZE)
}

is LibraryUiEvent.OnTabSelected -> {
navigator.resetRoot(
newRoot = event.tab.screen,
saveState = true,
restoreState = true,
)
}
}
}

Expand Down
Loading
Loading