diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a3e0c47..89c7493 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -40,6 +40,9 @@ retrofit = "2.9.0" # Coil coil = "2.4.0" +# Lottie +lottie-compose = "6.1.0" + # Logger timber = "5.0.1" junit = "4.13.2" @@ -71,7 +74,7 @@ compose-bom = { module = "androidx.compose:compose-bom", version.ref = "compose- compose-ui = { group = "androidx.compose.ui", name = "ui" } compose-activity = { group = "androidx.activity", name = "activity-compose", version.ref = "activity" } compose-navigation = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigation" } -compose-material3 = { group = "androidx.compose.material3", name = "material3" } +compose-material3 = { group = "androidx.compose.material3", name = "material3", version = "1.1.0-alpha07" } compose-uiGraphics = { group = "androidx.compose.ui", name = "ui-graphics" } compose-uiTooling = { group = "androidx.compose.ui", name = "ui-tooling" } compose-uiToolingPreview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } @@ -123,6 +126,9 @@ hilt-ext-work = { group = "androidx.hilt", name = "hilt-work", version.ref = "hi #Coil coil-core = { group = "io.coil-kt", name = "coil", version.ref = "coil" } +#Lottie +lottie-compose = { group = "com.airbnb.android", name = "lottie-compose", version.ref = "lottie-compose" } + #Logger logger-timber = { group = "com.jakewharton.timber", name = "timber", version.ref = "timber" } junit = { group = "junit", name = "junit", version.ref = "junit" } diff --git a/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeContract.kt b/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeContract.kt index 2607d6e..4ef51eb 100644 --- a/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeContract.kt +++ b/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeContract.kt @@ -18,7 +18,7 @@ data class HomeState( val checkList: List, ) : ViewState { data class CheckListItem( - val id: Int, + val id: String, val title: String, val date: String, val isProgress: Boolean, @@ -39,7 +39,7 @@ data class HomeState( profileUrl = "", checkList = listOf( CheckListItem( - id = 0, + id = "0", title = "파리, 프랑스", date = "2023.07.16 ~ 2023.07.20", isProgress = true, @@ -53,5 +53,5 @@ data class HomeState( sealed interface HomeEffect : ViewEffect { object NavigateToAddCheckList : HomeEffect - data class NavigateToCheckList(val id: Int) : HomeEffect + data class NavigateToCheckList(val id: String) : HomeEffect } diff --git a/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeViewModel.kt b/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeViewModel.kt index ca463b3..ac70426 100644 --- a/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeViewModel.kt +++ b/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeViewModel.kt @@ -19,7 +19,7 @@ class HomeViewModel @Inject constructor() : MVIViewModel Unit, + onClickLink: (id: String) -> Unit, modifier: Modifier = Modifier, ) { Column( diff --git a/presentation/home/src/main/java/com/dkin/chevit/presentation/home/contents/TemplateTabContents.kt b/presentation/home/src/main/java/com/dkin/chevit/presentation/home/contents/TemplateTabContents.kt index a677a5f..fefcb45 100644 --- a/presentation/home/src/main/java/com/dkin/chevit/presentation/home/contents/TemplateTabContents.kt +++ b/presentation/home/src/main/java/com/dkin/chevit/presentation/home/contents/TemplateTabContents.kt @@ -141,7 +141,7 @@ fun TemplateTabContents( @Composable private fun TemplateItem( template: Template, - onClick: (id: Int) -> Unit + onClick: (id: String) -> Unit ) { Box( modifier = Modifier diff --git a/presentation/home/src/main/java/com/dkin/chevit/presentation/home/model/Template.kt b/presentation/home/src/main/java/com/dkin/chevit/presentation/home/model/Template.kt index 6ed96a1..0319485 100644 --- a/presentation/home/src/main/java/com/dkin/chevit/presentation/home/model/Template.kt +++ b/presentation/home/src/main/java/com/dkin/chevit/presentation/home/model/Template.kt @@ -1,7 +1,7 @@ package com.dkin.chevit.presentation.home.model data class Template( - val id: Int, + val id: String, val title: String, val date: String, val colorType: TemplateColor diff --git a/presentation/resource/src/main/java/com/dkin/chevit/presentation/resource/ChevitButton.kt b/presentation/resource/src/main/java/com/dkin/chevit/presentation/resource/ChevitButton.kt index d3e3de0..04a56b5 100644 --- a/presentation/resource/src/main/java/com/dkin/chevit/presentation/resource/ChevitButton.kt +++ b/presentation/resource/src/main/java/com/dkin/chevit/presentation/resource/ChevitButton.kt @@ -21,6 +21,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp @Composable @@ -41,7 +42,8 @@ fun ChevitButtonChip( focusedContentColor = ChevitTheme.colors.blue4, contentPadding = PaddingValues(horizontal = 16.dp, vertical = 8.dp), textStyle = ChevitTheme.typhography.bodyLarge, - borderColor = if (selected) ChevitTheme.colors.blue7 else ChevitTheme.colors.grey4 + borderColor = if (selected) ChevitTheme.colors.blue7 else ChevitTheme.colors.grey4, + borderWidth = if (selected) 2.dp else 1.dp ) { Text(text = text) } @@ -136,6 +138,7 @@ internal fun ChevitButton( disabledContentColor: Color = contentColor, elevation: ButtonElevation? = ButtonDefaults.buttonElevation(), borderColor: Color? = null, + borderWidth: Dp = 1.dp, pressedBorderColor: Color? = borderColor, contentPadding: PaddingValues = ButtonDefaults.ContentPadding, interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, @@ -159,7 +162,7 @@ internal fun ChevitButton( elevation = elevation, border = borderColor?.let { BorderStroke( - width = 1.dp, + width = borderWidth, color = if (isPressed && pressedBorderColor != null) pressedBorderColor else it ) }, diff --git a/presentation/resource/src/main/java/com/dkin/chevit/presentation/resource/ChevitTextField.kt b/presentation/resource/src/main/java/com/dkin/chevit/presentation/resource/ChevitTextField.kt index fd77cc9..60d6957 100644 --- a/presentation/resource/src/main/java/com/dkin/chevit/presentation/resource/ChevitTextField.kt +++ b/presentation/resource/src/main/java/com/dkin/chevit/presentation/resource/ChevitTextField.kt @@ -29,7 +29,8 @@ fun ChevitTextField( shape = RoundedCornerShape(8.dp), textStyle = ChevitTheme.typhography.bodyLarge.copy(color = ChevitTheme.colors.grey10), colors = TextFieldDefaults.outlinedTextFieldColors( - textColor = ChevitTheme.colors.grey10, + focusedTextColor = ChevitTheme.colors.grey10, + unfocusedTextColor = ChevitTheme.colors.grey10, disabledTextColor = ChevitTheme.colors.grey10, focusedBorderColor = ChevitTheme.colors.grey4, unfocusedBorderColor = ChevitTheme.colors.grey4, @@ -43,7 +44,8 @@ fun ChevitTextField( unfocusedTrailingIconColor = ChevitTheme.colors.grey4, disabledTrailingIconColor = ChevitTheme.colors.grey4, errorTrailingIconColor = ChevitTheme.colors.grey4, - placeholderColor = ChevitTheme.colors.grey4, + focusedPlaceholderColor = ChevitTheme.colors.grey4, + unfocusedPlaceholderColor = ChevitTheme.colors.grey4, disabledPlaceholderColor = ChevitTheme.colors.grey4, ), placeholder = placeholder, diff --git a/presentation/resource/src/main/res/raw/checklist_making.json b/presentation/resource/src/main/res/raw/checklist_making.json new file mode 100644 index 0000000..64d7a19 --- /dev/null +++ b/presentation/resource/src/main/res/raw/checklist_making.json @@ -0,0 +1 @@ +{"v":"4.8.0","meta":{"g":"LottieFiles AE ","a":"","k":"","d":"","tc":""},"fr":30,"ip":0,"op":31,"w":800,"h":200,"nm":"Loading Files","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Search","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.97,"y":1},"o":{"x":0.69,"y":0},"t":0,"s":[351.535,97.918,0],"to":[6,-17,0],"ti":[11,14.25,0]},{"t":30,"s":[351.535,99.418,0]}],"ix":2},"a":{"a":0,"k":[352.535,96.918,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[16.521,-0.045],[-0.013,-34.356],[-34.356,0.012],[0.011,34.356],[11.651,11.659]],"o":[[-34.356,0.012],[0.011,34.356],[34.356,-0.013],[-0.006,-16.483],[-11.651,-11.715]],"v":[[-0.089,-62.489],[-62.274,-0.26],[-0.046,61.927],[62.142,-0.304],[43.936,-44.254]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[9.639,0.013],[-0.054,41.136],[-41.136,-0.054],[0.054,-41.137],[28.059,-11.391]],"o":[[-41.136,-0.054],[0.054,-41.137],[41.136,0.055],[-0.039,30.282],[-8.929,3.626]],"v":[[-0.098,74.485],[-74.484,-0.097],[0.098,-74.485],[74.484,0.098],[28.019,69.014]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.792156875134,0.807843148708,0.835294127464,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[383.401,89.476],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Subtraction 48","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[2.999,-2.999],[0,0],[2.999,2.999],[0,0]],"o":[[0,0],[0,0],[0,0],[2.999,2.999],[0,0],[-2.999,2.999],[0,0],[0,0]],"v":[[-25.254,-8.902],[-8.902,-25.254],[-8.902,-25.254],[23.005,6.653],[23.005,17.514],[17.514,23.005],[6.653,23.005],[-25.254,-8.902]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.713725507259,0.733333349228,0.768627464771,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[446.9,153.591],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 4757","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":510,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Files 5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.24],"y":[1]},"o":{"x":[0.167],"y":[0.172]},"t":0,"s":[0]},{"t":30,"s":[50]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.24,"y":1},"o":{"x":0.167,"y":0.172},"t":0,"s":[723.194,100.918,0],"to":[-25.25,-0.583,0],"ti":[25.25,0.583,0]},{"t":30,"s":[571.694,97.418,0]}],"ix":2},"a":{"a":0,"k":[723.194,96.918,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.24,0.24,0.24],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.172,0.172,11.207]},"t":0,"s":[100,100,100]},{"t":30,"s":[165,165,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.019,-0.326],[0,0],[0.326,-0.019],[0,0],[0.019,0.326],[0,0],[-0.326,0.019]],"o":[[0,0],[0.326,0.019],[0,0],[-0.019,0.326],[0,0],[-0.326,-0.019],[0,0],[0.019,-0.326],[0,0]],"v":[[-18.935,-8.56],[-10.273,-8.56],[-9.669,-7.956],[-9.669,-5.943],[-10.273,-5.338],[-18.935,-5.338],[-19.54,-5.943],[-19.54,-7.957],[-18.935,-8.562]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.019,-0.326],[0,0],[0.326,-0.019],[0,0],[0.019,0.326],[0,0],[-0.326,0.019]],"o":[[0,0],[0.326,0.019],[0,0],[-0.019,0.326],[0,0],[-0.326,-0.019],[0,0],[0.019,-0.326],[0,0]],"v":[[-18.935,-0.906],[18.935,-0.906],[19.54,-0.301],[19.54,1.713],[18.935,2.318],[-18.935,2.318],[-19.54,1.713],[-19.54,-0.302],[-18.935,-0.907]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-0.325,0.019],[0,0],[-0.019,-0.326],[0,0],[0.326,-0.019],[0,0],[0.019,0.326],[0,0]],"o":[[0,0],[0.326,0.019],[0,0],[-0.019,0.326],[0,0],[-0.326,-0.019],[0,0],[0.019,-0.325]],"v":[[-18.935,5.943],[18.935,5.943],[19.54,6.547],[19.54,8.562],[18.935,9.166],[-18.935,9.166],[-19.54,8.562],[-19.54,6.546]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[-0.326,0.019],[0,0],[-0.019,-0.326],[0,0],[0.326,-0.019],[0,0],[0.019,0.326],[0,0]],"o":[[0,0],[0.326,0.019],[0,0],[-0.019,0.326],[0,0],[-0.326,-0.019],[0,0],[0.019,-0.326]],"v":[[-18.935,12.791],[-0.604,12.791],[0.001,13.396],[0.001,15.41],[-0.604,16.014],[-18.935,16.014],[-19.54,15.41],[-19.54,13.396]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-0.326,0.019],[0,0],[-0.019,-0.326],[0,0],[0.326,-0.019],[0,0],[0.019,0.326],[0,0]],"o":[[0,0],[0.326,0.019],[0,0],[-0.019,0.326],[0,0],[-0.326,-0.019],[0,0],[0.019,-0.326]],"v":[[-18.935,-16.014],[-6.446,-16.014],[-5.842,-15.41],[-5.842,-13.396],[-6.446,-12.791],[-18.935,-12.791],[-19.54,-13.396],[-19.54,-15.41]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.698039233685,0.75686275959,0.819607853889,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[723.194,96.817],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 2951","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-9.468,-9.468],[9.468,9.468],[-9.468,9.468]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.698039233685,0.75686275959,0.819607853889,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[738.705,74.961],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 2950","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.025,0],[0,0],[0,0],[0,0],[2.872,-0.021],[0.025,0],[0,0],[0.022,2.872],[0,0.026],[0,0],[-2.872,0.021]],"o":[[0,0],[0,0],[0,0],[0.021,2.872],[-0.025,0],[0,0],[-2.872,0.022],[0,-0.026],[0,0],[-0.021,-2.872],[0.025,0]],"v":[[-19.64,-31.424],[5.942,-31.424],[24.878,-12.489],[24.878,26.187],[19.715,31.424],[19.64,31.424],[-19.638,31.424],[-24.878,26.264],[-24.878,26.187],[-24.878,-26.187],[-19.715,-31.424]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.850980401039,0.890196084976,0.921568632126,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[723.094,96.918],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 2949","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":510,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Files 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.24],"y":[1]},"o":{"x":[0.167],"y":[0.172]},"t":0,"s":[50]},{"t":30,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.24,"y":1},"o":{"x":0.167,"y":0.172},"t":0,"s":[570.918,96.918,0],"to":[-30,0,0],"ti":[30,0,0]},{"t":30,"s":[390.918,96.918,0]}],"ix":2},"a":{"a":0,"k":[570.918,96.918,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.24,0.24,0.24],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.172,0.172,4.483]},"t":0,"s":[100,100,100]},{"t":30,"s":[126,126,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.032,-0.549],[0,0],[0.549,-0.032],[0,0],[0.032,0.549],[0,0],[-0.549,0.032]],"o":[[0,0],[0.549,0.032],[0,0],[-0.032,0.549],[0,0],[-0.549,-0.032],[0,0],[0.032,-0.549],[0,0]],"v":[[-31.928,-14.435],[-17.322,-14.435],[-16.303,-13.415],[-16.303,-10.021],[-17.322,-9.001],[-31.928,-9.001],[-32.948,-10.021],[-32.948,-13.417],[-31.928,-14.436]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.032,-0.549],[0,0],[0.549,-0.032],[0,0],[0.032,0.549],[0,0],[-0.549,0.032]],"o":[[0,0],[0.549,0.032],[0,0],[-0.032,0.549],[0,0],[-0.549,-0.032],[0,0],[0.032,-0.549],[0,0]],"v":[[-31.928,-1.527],[31.928,-1.527],[32.948,-0.508],[32.948,2.889],[31.928,3.908],[-31.928,3.908],[-32.948,2.889],[-32.948,-0.51],[-31.928,-1.529]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-0.549,0.032],[0,0],[-0.032,-0.549],[0,0],[0.549,-0.032],[0,0],[0.032,0.549],[0,0]],"o":[[0,0],[0.549,0.032],[0,0],[-0.032,0.549],[0,0],[-0.549,-0.032],[0,0],[0.033,-0.548]],"v":[[-31.928,10.021],[31.928,10.021],[32.948,11.04],[32.948,14.436],[31.928,15.456],[-31.928,15.456],[-32.948,14.436],[-32.948,11.038]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[-0.549,0.032],[0,0],[-0.032,-0.549],[0,0],[0.549,-0.032],[0,0],[0.032,0.549],[0,0]],"o":[[0,0],[0.549,0.032],[0,0],[-0.032,0.549],[0,0],[-0.549,-0.032],[0,0],[0.032,-0.549]],"v":[[-31.928,21.568],[-1.018,21.568],[0.001,22.588],[0.001,25.984],[-1.018,27.004],[-31.928,27.004],[-32.948,25.984],[-32.948,22.588]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-0.549,0.032],[0,0],[-0.032,-0.549],[0,0],[0.549,-0.032],[0,0],[0.032,0.549],[0,0]],"o":[[0,0],[0.549,0.032],[0,0],[-0.032,0.549],[0,0],[-0.549,-0.032],[0,0],[0.032,-0.549]],"v":[[-31.928,-27.004],[-10.87,-27.004],[-9.85,-25.984],[-9.85,-22.588],[-10.87,-21.568],[-31.928,-21.568],[-32.948,-22.588],[-32.948,-25.984]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.698039233685,0.75686275959,0.819607853889,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[570.918,96.747],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 2951","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-15.965,-15.965],[15.965,15.965],[-15.965,15.965]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.698039233685,0.75686275959,0.819607853889,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[597.073,59.895],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 2950","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.042,0],[0,0],[0,0],[0,0],[4.843,-0.035],[0.042,0],[0,0],[0.037,4.843],[0,0.043],[0,0],[-4.843,0.035]],"o":[[0,0],[0,0],[0,0],[0.035,4.843],[-0.042,0],[0,0],[-4.843,0.037],[0,-0.043],[0,0],[-0.035,-4.843],[0.042,0]],"v":[[-33.117,-52.988],[10.02,-52.988],[41.949,-21.059],[41.949,44.156],[33.243,52.988],[33.117,52.988],[-33.113,52.988],[-41.949,44.286],[-41.949,44.156],[-41.949,-44.156],[-33.243,-52.988]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.850980401039,0.890196084976,0.921568632126,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[570.748,96.918],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 2949","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":510,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Files 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.24],"y":[1]},"o":{"x":[0.167],"y":[0.172]},"t":0,"s":[100]},{"t":30,"s":[50]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.24,"y":1},"o":{"x":0.167,"y":0.172},"t":0,"s":[390.535,96.918,0],"to":[-30,0,0],"ti":[30,0,0]},{"t":30,"s":[210.535,96.918,0]}],"ix":2},"a":{"a":0,"k":[390.535,96.918,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.24,0.24,0.24],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.172,0.172,-3.793]},"t":0,"s":[100,100,100]},{"t":30,"s":[78,78,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.04,-0.692],[0,0],[0.692,-0.04],[0,0],[0.04,0.692],[0,0],[-0.692,0.04]],"o":[[0,0],[0.692,0.04],[0,0],[-0.04,0.692],[0,0],[-0.692,-0.04],[0,0],[0.04,-0.692],[0,0]],"v":[[-40.242,-18.193],[-21.833,-18.193],[-20.548,-16.908],[-20.548,-12.63],[-21.833,-11.345],[-40.242,-11.345],[-41.526,-12.63],[-41.526,-16.911],[-40.242,-18.195]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.04,-0.692],[0,0],[0.692,-0.04],[0,0],[0.04,0.692],[0,0],[-0.692,0.04]],"o":[[0,0],[0.692,0.04],[0,0],[-0.04,0.692],[0,0],[-0.692,-0.04],[0,0],[0.04,-0.692],[0,0]],"v":[[-40.242,-1.925],[40.242,-1.925],[41.526,-0.64],[41.526,3.641],[40.242,4.926],[-40.242,4.926],[-41.526,3.641],[-41.526,-0.642],[-40.242,-1.927]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-0.691,0.04],[0,0],[-0.04,-0.692],[0,0],[0.692,-0.04],[0,0],[0.04,0.692],[0,0]],"o":[[0,0],[0.692,0.04],[0,0],[-0.04,0.692],[0,0],[-0.692,-0.04],[0,0],[0.041,-0.691]],"v":[[-40.242,12.63],[40.242,12.63],[41.526,13.914],[41.526,18.195],[40.242,19.48],[-40.242,19.48],[-41.526,18.195],[-41.526,13.912]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[-0.692,0.04],[0,0],[-0.04,-0.692],[0,0],[0.692,-0.04],[0,0],[0.04,0.692],[0,0]],"o":[[0,0],[0.692,0.04],[0,0],[-0.04,0.692],[0,0],[-0.692,-0.04],[0,0],[0.04,-0.692]],"v":[[-40.242,27.184],[-1.284,27.184],[0.001,28.469],[0.001,32.75],[-1.284,34.035],[-40.242,34.035],[-41.526,32.75],[-41.526,28.469]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-0.692,0.04],[0,0],[-0.04,-0.692],[0,0],[0.692,-0.04],[0,0],[0.04,0.692],[0,0]],"o":[[0,0],[0.692,0.04],[0,0],[-0.04,0.692],[0,0],[-0.692,-0.04],[0,0],[0.04,-0.692]],"v":[[-40.242,-34.035],[-13.7,-34.035],[-12.415,-32.75],[-12.415,-28.469],[-13.7,-27.184],[-40.242,-27.184],[-41.526,-28.469],[-41.526,-32.75]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.698039233685,0.75686275959,0.819607853889,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[390.534,96.702],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 2951","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-20.121,-20.121],[20.121,20.121],[-20.121,20.121]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.698039233685,0.75686275959,0.819607853889,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[423.5,50.255],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 2950","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.053,0],[0,0],[0,0],[0,0],[6.104,-0.044],[0.053,0],[0,0],[0.047,6.104],[0,0.055],[0,0],[-6.104,0.044]],"o":[[0,0],[0,0],[0,0],[0.044,6.104],[-0.053,0],[0,0],[-6.104,0.047],[0,-0.055],[0,0],[-0.044,-6.104],[0.053,0]],"v":[[-41.74,-66.785],[12.628,-66.785],[52.871,-26.542],[52.871,55.653],[41.899,66.785],[41.74,66.785],[-41.735,66.785],[-52.871,55.817],[-52.871,55.653],[-52.871,-55.653],[-41.899,-66.785]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.850980401039,0.890196084976,0.921568632126,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[390.321,96.918],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 2949","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":510,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Files 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.24],"y":[1]},"o":{"x":[0.167],"y":[0.172]},"t":0,"s":[50]},{"t":30,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.24,"y":1},"o":{"x":0.167,"y":0.172},"t":0,"s":[210.152,96.918,0],"to":[-22,0,0],"ti":[22,0,0]},{"t":30,"s":[78.151,96.918,0]}],"ix":2},"a":{"a":0,"k":[210.152,96.918,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.24,0.24,0.24],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.172,0.172,-6.897]},"t":0,"s":[100,100,100]},{"t":30,"s":[60,60,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.032,-0.549],[0,0],[0.549,-0.032],[0,0],[0.032,0.549],[0,0],[-0.549,0.032]],"o":[[0,0],[0.549,0.032],[0,0],[-0.032,0.549],[0,0],[-0.549,-0.032],[0,0],[0.032,-0.549],[0,0]],"v":[[-31.928,-14.435],[-17.322,-14.435],[-16.303,-13.415],[-16.303,-10.021],[-17.322,-9.001],[-31.928,-9.001],[-32.948,-10.021],[-32.948,-13.417],[-31.928,-14.436]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.032,-0.549],[0,0],[0.549,-0.032],[0,0],[0.032,0.549],[0,0],[-0.549,0.032]],"o":[[0,0],[0.549,0.032],[0,0],[-0.032,0.549],[0,0],[-0.549,-0.032],[0,0],[0.032,-0.549],[0,0]],"v":[[-31.928,-1.527],[31.928,-1.527],[32.948,-0.508],[32.948,2.889],[31.928,3.908],[-31.928,3.908],[-32.948,2.889],[-32.948,-0.51],[-31.928,-1.529]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-0.549,0.032],[0,0],[-0.032,-0.549],[0,0],[0.549,-0.032],[0,0],[0.032,0.549],[0,0]],"o":[[0,0],[0.549,0.032],[0,0],[-0.032,0.549],[0,0],[-0.549,-0.032],[0,0],[0.033,-0.548]],"v":[[-31.928,10.021],[31.928,10.021],[32.948,11.04],[32.948,14.436],[31.928,15.456],[-31.928,15.456],[-32.948,14.436],[-32.948,11.038]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[-0.549,0.032],[0,0],[-0.032,-0.549],[0,0],[0.549,-0.032],[0,0],[0.032,0.549],[0,0]],"o":[[0,0],[0.549,0.032],[0,0],[-0.032,0.549],[0,0],[-0.549,-0.032],[0,0],[0.032,-0.549]],"v":[[-31.928,21.568],[-1.018,21.568],[0.001,22.588],[0.001,25.984],[-1.018,27.004],[-31.928,27.004],[-32.948,25.984],[-32.948,22.588]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[-0.549,0.032],[0,0],[-0.032,-0.549],[0,0],[0.549,-0.032],[0,0],[0.032,0.549],[0,0]],"o":[[0,0],[0.549,0.032],[0,0],[-0.032,0.549],[0,0],[-0.549,-0.032],[0,0],[0.032,-0.549]],"v":[[-31.928,-27.004],[-10.87,-27.004],[-9.85,-25.984],[-9.85,-22.588],[-10.87,-21.568],[-31.928,-21.568],[-32.948,-22.588],[-32.948,-25.984]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.698039233685,0.75686275959,0.819607853889,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[210.151,96.747],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 2951","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-15.965,-15.965],[15.965,15.965],[-15.965,15.965]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.698039233685,0.75686275959,0.819607853889,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[236.306,59.895],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 2950","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.042,0],[0,0],[0,0],[0,0],[4.843,-0.035],[0.042,0],[0,0],[0.037,4.843],[0,0.043],[0,0],[-4.843,0.035]],"o":[[0,0],[0,0],[0,0],[0.035,4.843],[-0.042,0],[0,0],[-4.843,0.037],[0,-0.043],[0,0],[-0.035,-4.843],[0.042,0]],"v":[[-33.117,-52.988],[10.02,-52.988],[41.949,-21.059],[41.949,44.156],[33.243,52.988],[33.117,52.988],[-33.113,52.988],[-41.949,44.286],[-41.949,44.156],[-41.949,-44.156],[-33.243,-52.988]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.850980401039,0.890196084976,0.921568632126,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[209.981,96.918],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 2949","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":510,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":1,"nm":"BG","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,100,0],"ix":2},"a":{"a":0,"k":[400,100,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":800,"sh":200,"sc":"#ffffff","ip":0,"op":510,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/presentation/resource/src/main/res/raw/loading.json b/presentation/resource/src/main/res/raw/loading.json new file mode 100644 index 0000000..225cb90 --- /dev/null +++ b/presentation/resource/src/main/res/raw/loading.json @@ -0,0 +1 @@ +{"v":"5.8.1","fr":30,"ip":0,"op":60,"w":300,"h":300,"nm":"loading_6","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":60,"s":[360]}],"ix":10},"p":{"a":0,"k":[150.00000000000003,150.00000000000003,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[30.000000000000004,30.000000000000004,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.22745098039215686,0.6627450980392157,0.8627450980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[0]},{"t":60,"s":[99]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[1]},{"t":50,"s":[100]}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":60,"s":[3]}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150.00000000000003,150.00000000000003,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[30.000000000000004,30.000000000000004,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.6666666666666666,0.8431372549019608,0.9215686274509803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/presentation/step/build.gradle.kts b/presentation/step/build.gradle.kts index 0285a83..c589e39 100644 --- a/presentation/step/build.gradle.kts +++ b/presentation/step/build.gradle.kts @@ -20,4 +20,6 @@ dependencies { implementation(project(":presentation:resource")) implementation(project(":presentation:common")) implementation(project(":presentation:deeplink")) + + implementation(libs.lottie.compose) } diff --git a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/Step.kt b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/Step.kt index 22fdd6f..01df6bd 100644 --- a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/Step.kt +++ b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/Step.kt @@ -20,7 +20,9 @@ class Step : MVIComposeFragment() { override fun processEffect(effect: StepEffect) { when (effect) { - else -> {} + is StepEffect.NavigateToCheckList -> { + + } } } diff --git a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepContract.kt b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepContract.kt index a601e34..564e519 100644 --- a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepContract.kt +++ b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepContract.kt @@ -5,6 +5,7 @@ import com.dkin.chevit.core.mvi.ViewEffect import com.dkin.chevit.core.mvi.ViewIntent import com.dkin.chevit.core.mvi.ViewState import com.dkin.chevit.presentation.step.model.CountryModel +import com.dkin.chevit.presentation.step.model.TravelKind import com.dkin.chevit.presentation.step.model.TravelWith import java.time.LocalDate @@ -17,7 +18,7 @@ data class StepState( val startDate: LocalDate? = null, val endDate: LocalDate? = null, val travelWith: List = listOf(), - val travelKind: String? = null + val travelKind: List = listOf() ) : ViewState { fun getWhereLabel(): String = country?.text?.split(",")?.getOrNull(0) ?: "" fun getWhenLabel(): String { @@ -40,4 +41,5 @@ data class StepState( } sealed interface StepEffect : ViewEffect { + data class NavigateToCheckList(val id: String) : StepEffect } diff --git a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepScreen.kt b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepScreen.kt index 7bee453..ae08e5a 100644 --- a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepScreen.kt +++ b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepScreen.kt @@ -1,17 +1,31 @@ package com.dkin.chevit.presentation.step +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box 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.layout.size +import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import com.airbnb.lottie.compose.LottieAnimation +import com.airbnb.lottie.compose.LottieCompositionSpec +import com.airbnb.lottie.compose.LottieConstants +import com.airbnb.lottie.compose.rememberLottieComposition +import com.dkin.chevit.presentation.resource.ChevitTheme import com.dkin.chevit.presentation.step.component.ChevitProgressBar import com.dkin.chevit.presentation.step.component.StepTopBar import com.dkin.chevit.presentation.step.contents.WhatContents @@ -24,77 +38,135 @@ fun StepScreen( viewModel: StepViewModel, onClickClose: () -> Unit ) { - Column( - modifier = Modifier - ) { - var tabIndex by remember { mutableStateOf(0) } - val tabs = listOf("Where", "When", "Who", "What") - StepTopBar( - modifier = Modifier.fillMaxWidth(), - backButtonEnabled = tabIndex > 0, - onClickBack = { - when (tabIndex) { - 1 -> { - viewModel.clearCountry() - tabIndex = 0 - } - 2 -> { - viewModel.clearDate() - tabIndex = 1 - } - 3 -> { - viewModel.clearTravelWith() - tabIndex = 2 - } - } - }, - onClickClose = onClickClose - ) + val createLoadingState by viewModel.createLoadingVisible.collectAsState() + val loadingState by viewModel.loadingVisible.collectAsState() + + Box(modifier = Modifier.fillMaxSize()) { Column( - modifier = Modifier - .weight(1f) - .padding(start = 24.dp, end = 24.dp, bottom = 24.dp) + modifier = Modifier.fillMaxSize() ) { - Spacer(modifier = Modifier.height(6.dp)) - ChevitProgressBar( + var tabIndex by remember { mutableStateOf(0) } + val tabs = listOf("Where", "When", "Who", "What") + StepTopBar( modifier = Modifier.fillMaxWidth(), - selectedTabIndex = tabIndex, - tabSize = tabs.size + backButtonEnabled = tabIndex > 0, + onClickBack = { + when (tabIndex) { + 1 -> { + viewModel.clearCountry() + tabIndex = 0 + } + + 2 -> { + viewModel.clearDate() + tabIndex = 1 + } + + 3 -> { + viewModel.clearTravelWith() + tabIndex = 2 + } + } + }, + onClickClose = onClickClose ) - when (tabIndex) { - 0 -> WhereContents( - modifier = Modifier - .fillMaxWidth() - .weight(1f), - viewModel = viewModel, - onClickNext = { tabIndex = 1 }, + Column( + modifier = Modifier + .weight(1f) + .padding(start = 24.dp, end = 24.dp, bottom = 24.dp) + ) { + Spacer(modifier = Modifier.height(6.dp)) + ChevitProgressBar( + modifier = Modifier.fillMaxWidth(), + selectedTabIndex = tabIndex, + tabSize = tabs.size ) + when (tabIndex) { + 0 -> WhereContents( + modifier = Modifier + .fillMaxWidth() + .weight(1f), + viewModel = viewModel, + onClickNext = { tabIndex = 1 }, + ) - 1 -> WhenContents( - modifier = Modifier - .fillMaxWidth() - .weight(1f), - viewModel = viewModel, - onClickNext = { tabIndex = 2 } - ) + 1 -> WhenContents( + modifier = Modifier + .fillMaxWidth() + .weight(1f), + viewModel = viewModel, + onClickNext = { tabIndex = 2 } + ) - 2 -> WhoContents( - modifier = Modifier - .fillMaxWidth() - .weight(1f), - viewModel = viewModel, - onClickNext = { tabIndex = 3 } - ) + 2 -> WhoContents( + modifier = Modifier + .fillMaxWidth() + .weight(1f), + viewModel = viewModel, + onClickNext = { tabIndex = 3 } + ) - 3 -> WhatContents( - modifier = Modifier - .fillMaxWidth() - .weight(1f), - viewModel = viewModel, - onClickNext = { viewModel.createCheckList() } - ) + 3 -> WhatContents( + modifier = Modifier + .fillMaxWidth() + .weight(1f), + viewModel = viewModel, + onClickNext = { viewModel.createCheckList() } + ) + } } } + if (createLoadingState) { + CreateCheckListLoading(nickname = viewModel.userNickname.collectAsState().value) + } + if (loadingState) { + Loading() + } } + } +@Composable +fun CreateCheckListLoading( + nickname: String +) { + Box( + modifier = Modifier + .fillMaxSize() + .background(color = ChevitTheme.colors.white), + contentAlignment = Alignment.Center + ) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(com.dkin.chevit.presentation.resource.R.raw.checklist_making)) + LottieAnimation( + modifier = Modifier.fillMaxWidth().height(94.dp), + composition = composition, + iterations = LottieConstants.IterateForever, + ) + Spacer(Modifier.height(32.dp)) + Text( + modifier = Modifier, + text = "${nickname}님께\n딱맞는 체크리스트를\n만들고 있어요!", + style = ChevitTheme.typhography.headlineLarge.copy(color = ChevitTheme.colors.textPrimary), + textAlign = TextAlign.Center + ) + } + } +} + +@Composable +fun Loading() { + Box( + modifier = Modifier + .fillMaxSize() + .background(color = Color(0x66000000)), + contentAlignment = Alignment.Center + ) { + val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(com.dkin.chevit.presentation.resource.R.raw.loading)) + LottieAnimation( + modifier = Modifier.size(128.dp), + composition = composition, + iterations = LottieConstants.IterateForever, + ) + } +} \ No newline at end of file diff --git a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepViewModel.kt b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepViewModel.kt index 4f8ec08..8c2503f 100644 --- a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepViewModel.kt +++ b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepViewModel.kt @@ -1,17 +1,32 @@ package com.dkin.chevit.presentation.step +import androidx.lifecycle.viewModelScope import com.dkin.chevit.core.mvi.MVIViewModel import com.dkin.chevit.presentation.step.model.CountryModel +import com.dkin.chevit.presentation.step.model.TravelKind import com.dkin.chevit.presentation.step.model.TravelWith import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel class StepViewModel @Inject constructor() : MVIViewModel() { private val _countryList: MutableStateFlow> = MutableStateFlow(listOf()) val countryList = _countryList.asStateFlow() + private val _createLoadingVisible: MutableStateFlow = MutableStateFlow(false) + val createLoadingVisible = _createLoadingVisible.asStateFlow() + private val _loadingVisible: MutableStateFlow = MutableStateFlow(false) + val loadingVisible = _loadingVisible.asStateFlow() + private val _userNickname: MutableStateFlow = MutableStateFlow("") + val userNickname = _userNickname.asStateFlow() + + init { + //TODO 닉네임 datastore에서 가져오기 + _userNickname.value = "민지" + } override fun createInitialState(): StepState = StepState.empty() @@ -70,7 +85,25 @@ class StepViewModel @Inject constructor() : MVIViewModel -1) { + currentList.remove(kind) + currentList + } else { + currentList.add(kind) + currentList + } + setState { + copy( + travelKind = newList + ) + } + } } \ No newline at end of file diff --git a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/contents/WhatContents.kt b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/contents/WhatContents.kt index c4b1899..d0b7920 100644 --- a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/contents/WhatContents.kt +++ b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/contents/WhatContents.kt @@ -2,6 +2,8 @@ package com.dkin.chevit.presentation.step.contents import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth @@ -11,13 +13,19 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import com.dkin.chevit.presentation.resource.ChevitButtonChip import com.dkin.chevit.presentation.resource.ChevitButtonFillLarge import com.dkin.chevit.presentation.resource.ChevitTagLabel import com.dkin.chevit.presentation.resource.ChevitTheme +import com.dkin.chevit.presentation.resource.util.clickableNoRipple import com.dkin.chevit.presentation.step.StepViewModel +import com.dkin.chevit.presentation.step.model.TravelKind +@OptIn(ExperimentalLayoutApi::class) @Composable fun WhatContents( modifier: Modifier, @@ -47,10 +55,34 @@ fun WhatContents( text = "여행 유형을 선택해 주세요.", style = ChevitTheme.typhography.bodyLarge.copy(color = ChevitTheme.colors.textSecondary) ) - Box(modifier = Modifier.weight(1f)){} + Spacer(modifier = Modifier.height(24.dp)) + Box(modifier = Modifier.weight(1f)) { + FlowRow(modifier = Modifier.fillMaxWidth()) { + TravelKind.values().iterator().forEach { + Row { + ChevitButtonChip( + text = it.text, + selected = stepState.travelKind.indexOf(it) > -1, + onClick = { viewModel.setTravelKind(it) } + ) + Spacer(modifier = Modifier.width(8.dp)) + } + } + } + } + Text( + modifier = Modifier + .align(Alignment.CenterHorizontally) + .clickableNoRipple { viewModel.createCheckList(false) }, + text = "추천없이 만들기", + style = ChevitTheme.typhography.bodyMedium.copy(color = ChevitTheme.colors.textCaption), + textAlign = TextAlign.Center, + ) + Spacer(modifier = Modifier.height(12.dp)) ChevitButtonFillLarge( modifier = Modifier.fillMaxWidth(), - onClick = onClickNext + onClick = onClickNext, + enabled = stepState.travelKind.isNotEmpty() ) { Text(text = "다음") } diff --git a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/contents/WhereContents.kt b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/contents/WhereContents.kt index 24e7b11..c941bb1 100644 --- a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/contents/WhereContents.kt +++ b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/contents/WhereContents.kt @@ -167,7 +167,11 @@ fun CountryList( LazyColumn( modifier = modifier .clip(RoundedCornerShape(4.dp)) - .border(width = 1.dp, color = ChevitTheme.colors.grey3) + .border( + width = 1.dp, + color = ChevitTheme.colors.grey3, + shape = RoundedCornerShape(4.dp) + ) ) { items(countryList) { item -> CountryItem( diff --git a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/model/TravelKind.kt b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/model/TravelKind.kt new file mode 100644 index 0000000..b579642 --- /dev/null +++ b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/model/TravelKind.kt @@ -0,0 +1,17 @@ +package com.dkin.chevit.presentation.step.model + +enum class TravelKind(val key: String, val text: String) { + BUSINESS("BUSINESS", "출장/업무"), + GASTROVENTURE("GASTROVENTURE", "맛집탐방"), + SWIMMING("SWIMMING", "수영"), + ACTIVITY("ACTIVITY", "액티비티"), + ME_TIME("ME_TIME", "힐링여행"), + CAMPING("CAMPING", "캠핑"), + HIKING_CLIMBING("HIKING_CLIMBING", "등산"), + SHOPPING("SHOPPING", "쇼핑"), + TAKE_PHOTO("TAKE_PHOTO", "사진"), + NATURE("NATURE", "자연"), + TOURISTSPOT("TOURISTSPOT", "관광지 방문"), + EXERCISE("EXERCISE", "운동"), + ETC("ETC", "기타"), +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index d1ded86..daa46ae 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -10,6 +10,7 @@ dependencyResolutionManagement { repositories { google() mavenCentral() + maven(url = "https://oss.sonatype.org/content/repositories/snapshots/") } }