diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f4ec38a2..1c10a396 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -51,6 +51,7 @@ dependencies { projects.feature.library, projects.feature.login, projects.feature.main, + projects.feature.record, projects.feature.screens, projects.feature.search, projects.feature.settings, diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5184f879..7f039cf2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,11 +11,11 @@ android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" + android:networkSecurityConfig="@xml/network_security_config" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Booket" - tools:targetApi="31" - android:networkSecurityConfig="@xml/network_security_config"> + tools:targetApi="31"> + Box( + modifier = Modifier + .weight(1f) + .height(6.dp) + .clip(RoundedCornerShape(ReedTheme.radius.full)) + .background( + color = if (currentStep.value == index) { + ReedTheme.colors.bgPrimary + } else { + ReedTheme.colors.bgDisabled + }, + ), + ) + } + } +} diff --git a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/divider/ReedDivider.kt b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/ReedDivider.kt similarity index 91% rename from core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/divider/ReedDivider.kt rename to core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/ReedDivider.kt index 83d07d06..da512cfa 100644 --- a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/divider/ReedDivider.kt +++ b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/ReedDivider.kt @@ -1,4 +1,4 @@ -package com.ninecraft.booket.core.designsystem.component.divider +package com.ninecraft.booket.core.designsystem.component import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box diff --git a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/button/ButtonColorStyle.kt b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/button/ButtonColorStyle.kt index aacf8be3..57db2455 100644 --- a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/button/ButtonColorStyle.kt +++ b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/button/ButtonColorStyle.kt @@ -1,17 +1,20 @@ package com.ninecraft.booket.core.designsystem.component.button +import androidx.compose.foundation.BorderStroke import androidx.compose.runtime.Composable +import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.designsystem.theme.Kakao import com.ninecraft.booket.core.designsystem.theme.ReedTheme enum class ReedButtonColorStyle { - PRIMARY, SECONDARY, TERTIARY, KAKAO; + PRIMARY, SECONDARY, TERTIARY, STROKE, KAKAO; @Composable fun containerColor(isPressed: Boolean) = when (this) { PRIMARY -> if (isPressed) ReedTheme.colors.bgPrimaryPressed else ReedTheme.colors.bgPrimary SECONDARY -> if (isPressed) ReedTheme.colors.bgSecondaryPressed else ReedTheme.colors.bgSecondary TERTIARY -> if (isPressed) ReedTheme.colors.bgTertiaryPressed else ReedTheme.colors.bgTertiary + STROKE -> if (isPressed) ReedTheme.colors.basePrimary else ReedTheme.colors.basePrimary KAKAO -> Kakao } @@ -20,6 +23,7 @@ enum class ReedButtonColorStyle { PRIMARY -> ReedTheme.colors.contentInverse SECONDARY -> ReedTheme.colors.contentPrimary TERTIARY -> ReedTheme.colors.contentBrand + STROKE -> ReedTheme.colors.contentBrand KAKAO -> ReedTheme.colors.contentPrimary } @@ -28,4 +32,10 @@ enum class ReedButtonColorStyle { @Composable fun disabledContentColor() = ReedTheme.colors.contentDisabled + + @Composable + fun borderStroke() = when (this) { + STROKE -> BorderStroke(1.dp, ReedTheme.colors.borderBrand) + else -> null + } } diff --git a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/button/ReedButton.kt b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/button/ReedButton.kt index c323dc3b..066c528d 100644 --- a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/button/ReedButton.kt +++ b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/button/ReedButton.kt @@ -7,6 +7,7 @@ import androidx.compose.foundation.interaction.collectIsPressedAsState import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.padding @@ -65,6 +66,7 @@ fun ReedButton( disabledContentColor = colorStyle.disabledContentColor(), disabledContainerColor = colorStyle.disabledContainerColor(), ), + border = colorStyle.borderStroke(), contentPadding = sizeStyle.paddingValues, interactionSource = interactionSource, ) { @@ -104,8 +106,9 @@ private fun ReedLargeButtonPreview() { modifier = Modifier.padding(20.dp), verticalArrangement = Arrangement.spacedBy(20.dp), ) { - Row( + FlowRow( horizontalArrangement = Arrangement.spacedBy(20.dp), + verticalArrangement = Arrangement.spacedBy(20.dp), ) { ReedButton( onClick = {}, @@ -125,9 +128,16 @@ private fun ReedLargeButtonPreview() { sizeStyle = largeButtonStyle, text = "button", ) + ReedButton( + onClick = {}, + colorStyle = ReedButtonColorStyle.STROKE, + sizeStyle = largeButtonStyle, + text = "button", + ) } - Row( + FlowRow( horizontalArrangement = Arrangement.spacedBy(20.dp), + verticalArrangement = Arrangement.spacedBy(20.dp), ) { ReedButton( onClick = {}, @@ -147,9 +157,16 @@ private fun ReedLargeButtonPreview() { sizeStyle = largeRoundedButtonStyle, text = "button", ) + ReedButton( + onClick = {}, + colorStyle = ReedButtonColorStyle.STROKE, + sizeStyle = largeRoundedButtonStyle, + text = "button", + ) } - Row( + FlowRow( horizontalArrangement = Arrangement.spacedBy(20.dp), + verticalArrangement = Arrangement.spacedBy(20.dp), ) { Column( verticalArrangement = Arrangement.spacedBy(20.dp), @@ -208,6 +225,24 @@ private fun ReedLargeButtonPreview() { ) }, ) + ReedButton( + onClick = {}, + colorStyle = ReedButtonColorStyle.STROKE, + sizeStyle = largeButtonStyle, + text = "button", + leadingIcon = { + Icon( + imageVector = Icons.Default.Check, + contentDescription = "Check icon", + ) + }, + trailingIcon = { + Icon( + imageVector = Icons.Default.Check, + contentDescription = "Check icon", + ) + }, + ) } Column( verticalArrangement = Arrangement.spacedBy(20.dp), @@ -266,6 +301,24 @@ private fun ReedLargeButtonPreview() { ) }, ) + ReedButton( + onClick = {}, + colorStyle = ReedButtonColorStyle.STROKE, + sizeStyle = largeRoundedButtonStyle, + text = "button", + leadingIcon = { + Icon( + imageVector = Icons.Default.Check, + contentDescription = "Check icon", + ) + }, + trailingIcon = { + Icon( + imageVector = Icons.Default.Check, + contentDescription = "Check icon", + ) + }, + ) } } } @@ -278,8 +331,9 @@ private fun ReedMediumButtonPreview() { modifier = Modifier.padding(20.dp), verticalArrangement = Arrangement.spacedBy(20.dp), ) { - Row( + FlowRow( horizontalArrangement = Arrangement.spacedBy(20.dp), + verticalArrangement = Arrangement.spacedBy(20.dp), ) { ReedButton( onClick = {}, @@ -299,9 +353,16 @@ private fun ReedMediumButtonPreview() { sizeStyle = mediumButtonStyle, text = "button", ) + ReedButton( + onClick = {}, + colorStyle = ReedButtonColorStyle.STROKE, + sizeStyle = mediumButtonStyle, + text = "button", + ) } - Row( + FlowRow( horizontalArrangement = Arrangement.spacedBy(20.dp), + verticalArrangement = Arrangement.spacedBy(20.dp), ) { ReedButton( onClick = {}, @@ -321,8 +382,14 @@ private fun ReedMediumButtonPreview() { sizeStyle = mediumRoundedButtonStyle, text = "button", ) + ReedButton( + onClick = {}, + colorStyle = ReedButtonColorStyle.STROKE, + sizeStyle = mediumRoundedButtonStyle, + text = "button", + ) } - Row( + FlowRow( horizontalArrangement = Arrangement.spacedBy(20.dp), ) { Column( @@ -382,6 +449,24 @@ private fun ReedMediumButtonPreview() { ) }, ) + ReedButton( + onClick = {}, + colorStyle = ReedButtonColorStyle.STROKE, + sizeStyle = mediumButtonStyle, + text = "button", + leadingIcon = { + Icon( + imageVector = Icons.Default.Check, + contentDescription = "Check icon", + ) + }, + trailingIcon = { + Icon( + imageVector = Icons.Default.Check, + contentDescription = "Check icon", + ) + }, + ) } Column( verticalArrangement = Arrangement.spacedBy(20.dp), @@ -440,6 +525,24 @@ private fun ReedMediumButtonPreview() { ) }, ) + ReedButton( + onClick = {}, + colorStyle = ReedButtonColorStyle.STROKE, + sizeStyle = mediumRoundedButtonStyle, + text = "button", + leadingIcon = { + Icon( + imageVector = Icons.Default.Check, + contentDescription = "Check icon", + ) + }, + trailingIcon = { + Icon( + imageVector = Icons.Default.Check, + contentDescription = "Check icon", + ) + }, + ) } } } @@ -452,8 +555,9 @@ private fun ReedSmallButtonPreview() { modifier = Modifier.padding(20.dp), verticalArrangement = Arrangement.spacedBy(20.dp), ) { - Row( + FlowRow( horizontalArrangement = Arrangement.spacedBy(20.dp), + verticalArrangement = Arrangement.spacedBy(20.dp), ) { ReedButton( onClick = {}, @@ -473,6 +577,12 @@ private fun ReedSmallButtonPreview() { sizeStyle = smallButtonStyle, text = "button", ) + ReedButton( + onClick = {}, + colorStyle = ReedButtonColorStyle.STROKE, + sizeStyle = smallButtonStyle, + text = "button", + ) } Row( horizontalArrangement = Arrangement.spacedBy(20.dp), @@ -495,6 +605,12 @@ private fun ReedSmallButtonPreview() { sizeStyle = smallRoundedButtonStyle, text = "button", ) + ReedButton( + onClick = {}, + colorStyle = ReedButtonColorStyle.STROKE, + sizeStyle = smallRoundedButtonStyle, + text = "button", + ) } Row( horizontalArrangement = Arrangement.spacedBy(20.dp), @@ -556,6 +672,24 @@ private fun ReedSmallButtonPreview() { ) }, ) + ReedButton( + onClick = {}, + colorStyle = ReedButtonColorStyle.STROKE, + sizeStyle = smallButtonStyle, + text = "button", + leadingIcon = { + Icon( + imageVector = Icons.Default.Check, + contentDescription = "Check icon", + ) + }, + trailingIcon = { + Icon( + imageVector = Icons.Default.Check, + contentDescription = "Check icon", + ) + }, + ) } Column( verticalArrangement = Arrangement.spacedBy(20.dp), @@ -614,6 +748,24 @@ private fun ReedSmallButtonPreview() { ) }, ) + ReedButton( + onClick = {}, + colorStyle = ReedButtonColorStyle.STROKE, + sizeStyle = smallRoundedButtonStyle, + text = "button", + leadingIcon = { + Icon( + imageVector = Icons.Default.Check, + contentDescription = "Check icon", + ) + }, + trailingIcon = { + Icon( + imageVector = Icons.Default.Check, + contentDescription = "Check icon", + ) + }, + ) } } } @@ -626,8 +778,9 @@ private fun ReedButtonDisabledPreview() { modifier = Modifier.padding(20.dp), verticalArrangement = Arrangement.spacedBy(20.dp), ) { - Row( + FlowRow( horizontalArrangement = Arrangement.spacedBy(20.dp), + verticalArrangement = Arrangement.spacedBy(20.dp), ) { ReedButton( onClick = {}, @@ -643,10 +796,6 @@ private fun ReedButtonDisabledPreview() { enabled = false, text = "button", ) - } - Row( - horizontalArrangement = Arrangement.spacedBy(20.dp), - ) { ReedButton( onClick = {}, colorStyle = ReedButtonColorStyle.PRIMARY, diff --git a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/textfield/ReedRecordTextField.kt b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/textfield/ReedRecordTextField.kt new file mode 100644 index 00000000..303a96d0 --- /dev/null +++ b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/textfield/ReedRecordTextField.kt @@ -0,0 +1,130 @@ +package com.ninecraft.booket.core.designsystem.component.textfield + +import androidx.annotation.StringRes +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.BasicTextField +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.foundation.text.input.TextFieldLineLimits +import androidx.compose.foundation.text.input.TextFieldState +import androidx.compose.foundation.text.selection.LocalTextSelectionColors +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalSoftwareKeyboardController +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.res.vectorResource +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.unit.dp +import com.ninecraft.booket.core.designsystem.ComponentPreview +import com.ninecraft.booket.core.designsystem.R +import com.ninecraft.booket.core.designsystem.theme.ReedTheme + +@Composable +fun ReedRecordTextField( + recordState: TextFieldState, + @StringRes recordHintRes: Int, + modifier: Modifier = Modifier, + keyboardOptions: KeyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Text, + imeAction = ImeAction.Done, + ), + lineLimits: TextFieldLineLimits = TextFieldLineLimits.MultiLine(), + onClear: (() -> Unit)? = null, + onNext: () -> Unit = {}, + backgroundColor: Color = ReedTheme.colors.baseSecondary, + textColor: Color = ReedTheme.colors.contentPrimary, + cornerShape: RoundedCornerShape = RoundedCornerShape(ReedTheme.radius.sm), + borderStroke: BorderStroke = BorderStroke(width = 1.dp, color = ReedTheme.colors.baseSecondary), +) { + val keyboardController = LocalSoftwareKeyboardController.current + + CompositionLocalProvider(LocalTextSelectionColors provides reedTextSelectionColors) { + BasicTextField( + state = recordState, + modifier = Modifier.fillMaxWidth(), + textStyle = ReedTheme.typography.body2Medium.copy(color = textColor), + keyboardOptions = keyboardOptions, + onKeyboardAction = { + if (keyboardOptions.imeAction == ImeAction.Next) { + onNext() + } else { + keyboardController?.hide() + } + }, + lineLimits = lineLimits, + decorator = { innerTextField -> + Row( + modifier = modifier + .background(color = backgroundColor, shape = cornerShape) + .border( + border = borderStroke, + shape = cornerShape, + ) + .padding(vertical = ReedTheme.spacing.spacing3), + verticalAlignment = if (lineLimits is TextFieldLineLimits.MultiLine) Alignment.Top else Alignment.CenterVertically, + ) { + Spacer(modifier = Modifier.width(ReedTheme.spacing.spacing4)) + Box(modifier = Modifier.weight(1f)) { + if (recordState.text.isEmpty()) { + Text( + text = stringResource(id = recordHintRes), + color = ReedTheme.colors.contentTertiary, + style = ReedTheme.typography.body2Regular, + ) + } + innerTextField() + } + Spacer(modifier = Modifier.width(ReedTheme.spacing.spacing2)) + if (recordState.text.toString().isNotEmpty() && onClear != null) { + Icon( + imageVector = ImageVector.vectorResource(R.drawable.ic_x_circle), + contentDescription = "Clear Icon", + modifier = Modifier.clickable { + onClear() + }, + tint = Color.Unspecified, + ) + } + Spacer(modifier = Modifier.width(ReedTheme.spacing.spacing4)) + } + }, + ) + } +} + +@ComponentPreview +@Composable +private fun ReedRecordTextFieldPreview() { + ReedTheme { + ReedRecordTextField( + recordState = TextFieldState("검색"), + recordHintRes = R.string.search_book_hint, + keyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Text, + imeAction = ImeAction.Next, + ), + onClear = {}, + modifier = Modifier + .height(46.dp) + .fillMaxWidth() + .padding(horizontal = 20.dp), + ) + } +} diff --git a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/ReedTextField.kt b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/textfield/ReedSearchTextField.kt similarity index 98% rename from core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/ReedTextField.kt rename to core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/textfield/ReedSearchTextField.kt index bedb79c0..ef29da22 100644 --- a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/ReedTextField.kt +++ b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/textfield/ReedSearchTextField.kt @@ -1,4 +1,4 @@ -package com.ninecraft.booket.core.designsystem.component +package com.ninecraft.booket.core.designsystem.component.textfield import androidx.annotation.StringRes import androidx.compose.foundation.BorderStroke diff --git a/core/ui/build.gradle.kts b/core/ui/build.gradle.kts index 5b2b251a..80bab988 100644 --- a/core/ui/build.gradle.kts +++ b/core/ui/build.gradle.kts @@ -13,6 +13,7 @@ dependencies { implementations( projects.core.designsystem, + libs.compose.keyboard.state, libs.logger, ) } diff --git a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/ReedScaffold.kt b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/ReedScaffold.kt similarity index 95% rename from core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/ReedScaffold.kt rename to core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/ReedScaffold.kt index af83d278..3e4f4edd 100644 --- a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/ReedScaffold.kt +++ b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/ReedScaffold.kt @@ -1,4 +1,4 @@ -package com.ninecraft.booket.core.designsystem.component +package com.ninecraft.booket.core.ui import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.WindowInsets diff --git a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/bottomsheet/ReedBottomSheet.kt b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedBottomSheet.kt similarity index 97% rename from core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/bottomsheet/ReedBottomSheet.kt rename to core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedBottomSheet.kt index d2e0fcc3..7dc5a0b1 100644 --- a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/bottomsheet/ReedBottomSheet.kt +++ b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedBottomSheet.kt @@ -1,4 +1,4 @@ -package com.ninecraft.booket.core.designsystem.component.bottomsheet +package com.ninecraft.booket.core.ui.component import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding diff --git a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/ReedDialog.kt b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedDialog.kt similarity index 94% rename from core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/ReedDialog.kt rename to core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedDialog.kt index afbde5e0..830aa86c 100644 --- a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/ReedDialog.kt +++ b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedDialog.kt @@ -1,4 +1,4 @@ -package com.ninecraft.booket.core.designsystem.component +package com.ninecraft.booket.core.ui.component import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column @@ -16,6 +16,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties 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 @@ -35,10 +36,14 @@ fun ReedDialog( onDismissRequest = { onDismissRequest() }, + properties = DialogProperties( + usePlatformDefaultWidth = false, + ), ) { Column( modifier = modifier .fillMaxWidth() + .padding(horizontal = ReedTheme.spacing.spacing5) .background( color = ReedTheme.colors.basePrimary, shape = RoundedCornerShape( diff --git a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/appbar/ReedTopAppBar.kt b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedTopAppBar.kt similarity index 98% rename from core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/appbar/ReedTopAppBar.kt rename to core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedTopAppBar.kt index 721e094f..b6a9ed5b 100644 --- a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/appbar/ReedTopAppBar.kt +++ b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedTopAppBar.kt @@ -1,4 +1,4 @@ -package com.ninecraft.booket.core.designsystem.component.appbar +package com.ninecraft.booket.core.ui.component import androidx.annotation.DrawableRes import androidx.compose.foundation.background diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/BookDetailUi.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/BookDetailUi.kt index ab8bfd4c..0ec5ee0c 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/BookDetailUi.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/BookDetailUi.kt @@ -8,7 +8,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import com.ninecraft.booket.core.designsystem.ComponentPreview -import com.ninecraft.booket.core.designsystem.component.appbar.ReedBackTopAppBar +import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar 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 diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt index db858588..7abc6b5b 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt @@ -3,6 +3,7 @@ package com.ninecraft.booket.feature.home import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope import com.ninecraft.booket.feature.screens.HomeScreen +import com.ninecraft.booket.feature.screens.RecordScreen import com.ninecraft.booket.feature.screens.SearchScreen import com.slack.circuit.codegen.annotations.CircuitInject import com.slack.circuit.runtime.Navigator @@ -26,6 +27,9 @@ class HomePresenter @AssistedInject constructor( is HomeUiEvent.OnButtonClick -> { navigator.goTo(SearchScreen) } + is HomeUiEvent.OnRecordButtonClick -> { + navigator.goTo(RecordScreen) + } } } diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt index 02e9a4f9..6abbcd82 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt @@ -48,7 +48,15 @@ internal fun HomeContent( state.eventSink(HomeUiEvent.OnButtonClick) }, ) { - Text(text = "Navigate To Search") + Text(text = "도서 검색 이동") + } + Spacer(modifier = Modifier.height(16.dp)) + Button( + onClick = { + state.eventSink(HomeUiEvent.OnRecordButtonClick) + }, + ) { + Text(text = "독서 기록 작성") } } diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUiState.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUiState.kt index 5280c119..3c3fab93 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUiState.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUiState.kt @@ -9,4 +9,5 @@ data class HomeUiState( sealed interface HomeUiEvent : CircuitUiEvent { data object OnButtonClick : HomeUiEvent + data object OnRecordButtonClick : HomeUiEvent } diff --git a/feature/main/src/main/AndroidManifest.xml b/feature/main/src/main/AndroidManifest.xml index 18fa46a9..08c79a66 100644 --- a/feature/main/src/main/AndroidManifest.xml +++ b/feature/main/src/main/AndroidManifest.xml @@ -7,6 +7,7 @@ android:name=".MainActivity" android:exported="true" android:screenOrientation="portrait" + android:windowSoftInputMode="adjustResize" android:theme="@style/Theme.Booket"> diff --git a/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/bottomnavigation/BottomNavigation.kt b/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/bottomnavigation/BottomNavigation.kt index a1f5bb2a..aa1eed02 100644 --- a/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/bottomnavigation/BottomNavigation.kt +++ b/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/bottomnavigation/BottomNavigation.kt @@ -4,7 +4,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.ninecraft.booket.core.designsystem.component.ReedScaffold +import com.ninecraft.booket.core.ui.ReedScaffold import com.ninecraft.booket.feature.main.component.MainBottomBar import com.ninecraft.booket.feature.main.component.MainTab import com.ninecraft.booket.feature.screens.BottomNavigationScreen diff --git a/feature/record/.gitignore b/feature/record/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/feature/record/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/feature/record/build.gradle.kts b/feature/record/build.gradle.kts new file mode 100644 index 00000000..454b0ec1 --- /dev/null +++ b/feature/record/build.gradle.kts @@ -0,0 +1,22 @@ +@file:Suppress("INLINE_FROM_HIGHER_PLATFORM") + +plugins { + alias(libs.plugins.booket.android.feature) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.kotlin.parcelize) +} + +android { + namespace = "com.ninecraft.booket.feature.record" +} + +ksp { + arg("circuit.codegen.mode", "hilt") +} + +dependencies { + implementations( + libs.androidx.activity.compose, + libs.logger, + ) +} diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt new file mode 100644 index 00000000..406cc775 --- /dev/null +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt @@ -0,0 +1,65 @@ +package com.ninecraft.booket.feature.record.register + +import androidx.compose.foundation.text.input.clearText +import androidx.compose.foundation.text.input.rememberTextFieldState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import com.ninecraft.booket.feature.screens.RecordScreen +import com.slack.circuit.codegen.annotations.CircuitInject +import com.slack.circuit.retained.rememberRetained +import com.slack.circuit.runtime.Navigator +import com.slack.circuit.runtime.presenter.Presenter +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject +import dagger.hilt.android.components.ActivityRetainedComponent + +class RecordRegisterPresenter @AssistedInject constructor( + @Assisted private val navigator: Navigator, +) : Presenter { + + @Composable + override fun present(): RecordUiState { + val recordPageState = rememberTextFieldState() + val recordSentenceState = rememberTextFieldState() + var isExitDialogVisible by rememberRetained { mutableStateOf(false) } + + fun handleEvent(event: RecordRegisterUiEvent) { + when (event) { + is RecordRegisterUiEvent.OnBackButtonClick -> { + isExitDialogVisible = true + } + + is RecordRegisterUiEvent.OnClearClick -> { + recordPageState.clearText() + } + + is RecordRegisterUiEvent.OnExitDialogConfirm -> { + navigator.pop() + } + + is RecordRegisterUiEvent.OnExitDialogDismiss -> { + isExitDialogVisible = false + } + + is RecordRegisterUiEvent.OnSentenceScanButtonClick -> {} + is RecordRegisterUiEvent.OnNextButtonClick -> {} + } + } + + return RecordUiState( + recordPageState = recordPageState, + recordSentenceState = recordSentenceState, + isExitDialogVisible = isExitDialogVisible, + eventSink = ::handleEvent, + ) + } + + @CircuitInject(RecordScreen::class, ActivityRetainedComponent::class) + @AssistedFactory + fun interface Factory { + fun create(navigator: Navigator): RecordRegisterPresenter + } +} diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUi.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUi.kt new file mode 100644 index 00000000..299f2778 --- /dev/null +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUi.kt @@ -0,0 +1,187 @@ +package com.ninecraft.booket.feature.record.register + +import androidx.activity.compose.BackHandler +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.foundation.text.input.TextFieldLineLimits +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusDirection +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.res.vectorResource +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.unit.dp +import com.ninecraft.booket.core.designsystem.DevicePreview +import com.ninecraft.booket.core.designsystem.RecordStep +import com.ninecraft.booket.core.designsystem.component.RecordProgressBar +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.component.button.smallRoundedButtonStyle +import com.ninecraft.booket.core.designsystem.component.textfield.ReedRecordTextField +import com.ninecraft.booket.core.designsystem.theme.ReedTheme +import com.ninecraft.booket.core.designsystem.theme.White +import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar +import com.ninecraft.booket.core.ui.component.ReedDialog +import com.ninecraft.booket.core.ui.component.ReedFullScreen +import com.ninecraft.booket.feature.record.R +import com.ninecraft.booket.feature.screens.RecordScreen +import com.slack.circuit.codegen.annotations.CircuitInject +import dagger.hilt.android.components.ActivityRetainedComponent +import com.ninecraft.booket.core.designsystem.R as designR + +@CircuitInject(RecordScreen::class, ActivityRetainedComponent::class) +@Composable +internal fun RecordRegister( + state: RecordUiState, + modifier: Modifier = Modifier, +) { + BackHandler { + state.eventSink(RecordRegisterUiEvent.OnBackButtonClick) + } + + ReedFullScreen( + modifier = modifier.fillMaxSize(), + ) { + ReedBackTopAppBar( + onBackClick = { + state.eventSink(RecordRegisterUiEvent.OnBackButtonClick) + }, + ) + RecordRegisterContent(state = state) + } + + if (state.isExitDialogVisible) { + ReedDialog( + title = stringResource(R.string.record_exit_dialog_title), + description = stringResource(R.string.record_exit_dialog_description), + confirmButtonText = stringResource(R.string.record_exit_dialog_confirm), + dismissButtonText = stringResource(R.string.record_exit_dialog_dismiss), + onConfirmRequest = { + state.eventSink(RecordRegisterUiEvent.OnExitDialogConfirm) + }, + onDismissRequest = { + state.eventSink(RecordRegisterUiEvent.OnExitDialogDismiss) + }, + ) + } +} + +@Composable +internal fun RecordRegisterContent( + state: RecordUiState, + modifier: Modifier = Modifier, +) { + val focusManager = LocalFocusManager.current + + Column( + modifier = modifier + .fillMaxSize() + .background(White) + .padding(horizontal = ReedTheme.spacing.spacing5), + ) { + RecordProgressBar( + currentStep = RecordStep.REGISTER, + modifier = modifier, + ) + Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing10)) + Text( + text = stringResource(R.string.record_register_title1), + color = ReedTheme.colors.contentPrimary, + style = ReedTheme.typography.heading1Bold, + ) + Text( + text = stringResource(R.string.record_register_title2), + color = ReedTheme.colors.contentPrimary, + style = ReedTheme.typography.heading1Bold, + ) + Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing10)) + Text( + text = stringResource(R.string.record_page_label), + color = ReedTheme.colors.contentPrimary, + style = ReedTheme.typography.body1Medium, + ) + Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing2)) + ReedRecordTextField( + recordState = state.recordPageState, + recordHintRes = R.string.record_page_hint, + keyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Number, + imeAction = ImeAction.Next, + ), + lineLimits = TextFieldLineLimits.SingleLine, + onClear = { + state.eventSink(RecordRegisterUiEvent.OnClearClick) + }, + onNext = { + focusManager.moveFocus(FocusDirection.Down) + }, + modifier = Modifier + .fillMaxWidth() + .height(50.dp), + ) + Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing8)) + Text( + text = stringResource(R.string.record_sentence_label), + color = ReedTheme.colors.contentPrimary, + style = ReedTheme.typography.body1Medium, + ) + Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing2)) + ReedRecordTextField( + recordState = state.recordSentenceState, + recordHintRes = R.string.record_sentence_hint, + modifier = Modifier + .fillMaxWidth() + .height(140.dp), + ) + Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing3)) + ReedButton( + onClick = {}, + colorStyle = ReedButtonColorStyle.STROKE, + sizeStyle = smallRoundedButtonStyle, + modifier = Modifier.align(Alignment.End), + text = stringResource(R.string.record_scan_sentence), + leadingIcon = { + Icon( + imageVector = ImageVector.vectorResource(designR.drawable.ic_maximize), + contentDescription = "Scan Icon", + ) + }, + ) + Spacer(modifier = Modifier.weight(1f)) + ReedButton( + onClick = { + state.eventSink(RecordRegisterUiEvent.OnNextButtonClick) + }, + colorStyle = ReedButtonColorStyle.PRIMARY, + sizeStyle = largeButtonStyle, + modifier = Modifier.fillMaxWidth(), + text = stringResource(R.string.record_next_button), + ) + Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing4)) + } +} + +@DevicePreview +@Composable +private fun RecordRegisterPreview() { + ReedTheme { + RecordRegister( + state = RecordUiState( + eventSink = {}, + ), + ) + } +} diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUiState.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUiState.kt new file mode 100644 index 00000000..3dde2f08 --- /dev/null +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUiState.kt @@ -0,0 +1,21 @@ +package com.ninecraft.booket.feature.record.register + +import androidx.compose.foundation.text.input.TextFieldState +import com.slack.circuit.runtime.CircuitUiEvent +import com.slack.circuit.runtime.CircuitUiState + +data class RecordUiState( + val recordPageState: TextFieldState = TextFieldState(), + val recordSentenceState: TextFieldState = TextFieldState(), + val isExitDialogVisible: Boolean = false, + val eventSink: (RecordRegisterUiEvent) -> Unit, +) : CircuitUiState + +sealed interface RecordRegisterUiEvent : CircuitUiEvent { + data object OnBackButtonClick : RecordRegisterUiEvent + data object OnClearClick : RecordRegisterUiEvent + data object OnNextButtonClick : RecordRegisterUiEvent + data object OnSentenceScanButtonClick : RecordRegisterUiEvent + data object OnExitDialogConfirm : RecordRegisterUiEvent + data object OnExitDialogDismiss : RecordRegisterUiEvent +} diff --git a/feature/record/src/main/res/values/strings.xml b/feature/record/src/main/res/values/strings.xml new file mode 100644 index 00000000..39cb5fe1 --- /dev/null +++ b/feature/record/src/main/res/values/strings.xml @@ -0,0 +1,15 @@ + + + 기록하고 싶은 페이지와 + 문장을 등록해보세요 + 책 페이지 + 문장 기록 + 문장 스캔하기 + 다음 + 기록하고 싶은 페이지를 작성해보세요 + 기록하고 싶은 문장을 작성해보세요 + 기록을 그만하고 나가시겠어요? + 지금까지 기록한 내용은 저장되지 않습니다. + 확인 + 취소 + diff --git a/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt b/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt index 5b88240d..ce55d14d 100644 --- a/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt +++ b/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt @@ -31,6 +31,9 @@ data object SettingsScreen : ReedScreen(name = "Settings()") @Parcelize data object OssLicensesScreen : ReedScreen(name = "OssLicenses()") +@Parcelize +data object RecordScreen : ReedScreen(name = "Record()") + @Parcelize data class WebViewScreen( val url: String, diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/SearchUi.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/SearchUi.kt index f3fb821b..b5e2e079 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/SearchUi.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/SearchUi.kt @@ -24,9 +24,9 @@ import androidx.compose.ui.Modifier 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.component.ReedTextField -import com.ninecraft.booket.core.designsystem.component.appbar.ReedBackTopAppBar -import com.ninecraft.booket.core.designsystem.component.divider.ReedDivider +import com.ninecraft.booket.core.designsystem.component.textfield.ReedTextField +import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar +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.ui.component.InfinityLazyColumn diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/SearchUiState.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/SearchUiState.kt index b9eca8be..18846fbc 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/SearchUiState.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/SearchUiState.kt @@ -20,7 +20,7 @@ sealed interface UiState { data class SearchUiState( val uiState: UiState = UiState.Idle, val footerState: FooterState = FooterState.Idle, - val queryState: TextFieldState = TextFieldState(""), + val queryState: TextFieldState = TextFieldState(), val recentSearches: ImmutableList = persistentListOf(), val searchResult: BookSearchModel = BookSearchModel(), val books: ImmutableList = persistentListOf(), diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/component/BookRegisterBottomSheet.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/component/BookRegisterBottomSheet.kt index 07d72b0c..2ca570c9 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/component/BookRegisterBottomSheet.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/component/BookRegisterBottomSheet.kt @@ -29,7 +29,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.text.style.TextAlign import com.ninecraft.booket.core.designsystem.ComponentPreview -import com.ninecraft.booket.core.designsystem.component.bottomsheet.ReedBottomSheet +import com.ninecraft.booket.core.ui.component.ReedBottomSheet 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 diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/component/BookRegisterSuccessBottomSheet.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/component/BookRegisterSuccessBottomSheet.kt index e1070ca3..696d65d8 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/component/BookRegisterSuccessBottomSheet.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/component/BookRegisterSuccessBottomSheet.kt @@ -20,7 +20,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.designsystem.ComponentPreview -import com.ninecraft.booket.core.designsystem.component.bottomsheet.ReedBottomSheet +import com.ninecraft.booket.core.ui.component.ReedBottomSheet 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 diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt index 8ca23bb8..5e0951a4 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt @@ -27,9 +27,9 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import com.ninecraft.booket.core.common.extensions.clickableSingle import com.ninecraft.booket.core.designsystem.DevicePreview -import com.ninecraft.booket.core.designsystem.component.ReedDialog -import com.ninecraft.booket.core.designsystem.component.appbar.ReedBackTopAppBar -import com.ninecraft.booket.core.designsystem.component.divider.ReedDivider +import com.ninecraft.booket.core.ui.component.ReedDialog +import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar +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.feature.screens.SettingsScreen diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/WithdrawConfirmationBottomSheet.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/WithdrawConfirmationBottomSheet.kt index 6de04cb8..51fe7288 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/WithdrawConfirmationBottomSheet.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/WithdrawConfirmationBottomSheet.kt @@ -19,7 +19,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.designsystem.ComponentPreview -import com.ninecraft.booket.core.designsystem.component.bottomsheet.ReedBottomSheet +import com.ninecraft.booket.core.ui.component.ReedBottomSheet 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 diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUi.kt index d6b3f283..d77621f0 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUi.kt @@ -31,7 +31,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import com.ninecraft.booket.core.designsystem.DevicePreview -import com.ninecraft.booket.core.designsystem.component.appbar.ReedBackTopAppBar +import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.designsystem.theme.White import com.ninecraft.booket.feature.settings.R diff --git a/feature/webview/src/main/kotlin/com/ninecraft/booket/feature/webview/WebViewUi.kt b/feature/webview/src/main/kotlin/com/ninecraft/booket/feature/webview/WebViewUi.kt index 301ace22..055a7a07 100644 --- a/feature/webview/src/main/kotlin/com/ninecraft/booket/feature/webview/WebViewUi.kt +++ b/feature/webview/src/main/kotlin/com/ninecraft/booket/feature/webview/WebViewUi.kt @@ -10,7 +10,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.viewinterop.AndroidView import com.ninecraft.booket.core.designsystem.DevicePreview -import com.ninecraft.booket.core.designsystem.component.appbar.ReedBackTopAppBar +import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.ui.component.ReedFullScreen import com.ninecraft.booket.feature.screens.WebViewScreen diff --git a/settings.gradle.kts b/settings.gradle.kts index 674ded84..ead71b20 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -38,6 +38,7 @@ include( ":feature:library", ":feature:login", ":feature:main", + ":feature:record", ":feature:screens", ":feature:search", ":feature:settings",