From 35484fafe6bf85c6a6ca9eccec346e670d54d821 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:20:56 -0400 Subject: [PATCH 01/70] Refactor: Update color theme for transaction type button --- .../src/main/java/com/soujunior/petjournal/ui/theme/Color.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt index 5954f02e..ffc05128 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt @@ -98,7 +98,6 @@ object ColorCustom { val color_border_pet_icon = Color(0xFF9C4DCC) val color_title_pet_icon = Color(0xFF222222) val color_placeholder = Color(0xFFCCCCCC) - val color_shadow_dialog = Color(0x4D000000) - val color_border_dialog = Color(0xFF8D4CD2) - val color_background_button_dialog = Color(0xFF9C4DFF) + val color_text_button_transaction_type = Color(0xFF8dD4CD2) + val color_border_button_transaction_type = Color(0xFFA2A9B1) } \ No newline at end of file From e83411e313ac3c519daa1123df8325595349ea04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:22:27 -0400 Subject: [PATCH 02/70] Refactor: Improve InputText component styling This commit refactors the `InputText` composable: - Updates padding from `16.sdp` to `16.dp`. - Modifies `titleText` styling: - Removes explicit `start` and `end` padding. - Changes text style from `MaterialTheme.typography.bodyMedium` to `MaterialTheme.typography.titleMedium`. - Adjusts `placeholderText` styling: - Sets text color to `ColorCustom.color_placeholder`. - Changes text style from a custom `TextStyle` to `MaterialTheme.typography.bodyMedium`. --- .../petjournal/ui/components/InputText.kt | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt index 0f8ab0ff..7e210fdb 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt @@ -40,7 +40,6 @@ import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp import com.soujunior.petjournal.R import com.soujunior.petjournal.ui.theme.ColorCustom import com.soujunior.petjournal.ui.theme.ColorGrid @@ -64,17 +63,16 @@ fun InputText( ) { var showPassword by remember { mutableStateOf(false) } - Column(modifier = modifier.padding(top = 16.sdp)) { + Column(modifier = modifier.padding(16.dp)) { Row { Text( text = titleText, textAlign = TextAlign.Start, color = MaterialTheme.colorScheme.scrim, - style = MaterialTheme.typography.bodyMedium, fontWeight = FontWeight(500), + style = MaterialTheme.typography.titleMedium, modifier = modifier .fillMaxWidth() - .padding(start = 24.sdp, end = 24.sdp) ) } Row { @@ -134,12 +132,8 @@ fun InputText( if (textValue.isEmpty() && !hasAMask) { Text( text = placeholderText, - style = TextStyle( - fontSize = 14.sp, - lineHeight = 21.sp, - fontWeight = FontWeight(300), - color = MaterialTheme.colorScheme.scrim, - ) + color = ColorCustom.color_placeholder, + style = MaterialTheme.typography.bodyMedium ) } } From 0fe8f1695eb0a1aa0a683ae6d001a49af3b2523c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:23:24 -0400 Subject: [PATCH 03/70] Refactor: adjust PetSelectorItem component --- .../ui/components/PetSelectorItem.kt | 84 +++++++++++-------- 1 file changed, 47 insertions(+), 37 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt index 7a2e0e89..2c4eaa32 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt @@ -56,7 +56,7 @@ fun PetIcon( ambientColor = ColorCustom.color_spot_pet_icon ) .padding(1.dp) - .size(66.dp) + .size(55.dp) .background( color = backgroundColor, shape = RoundedCornerShape(8.dp) @@ -160,46 +160,56 @@ fun PetFilterList( var selectedPets by remember { mutableStateOf(listOf()) } - LazyRow( - modifier = Modifier - .fillMaxWidth() - .padding(top = 20.dp), - horizontalArrangement = Arrangement.spacedBy(8.dp) - ) { - item { - PetFilterItem( - name = "Todos", - isSelected = selectedPets.contains(stringResource(R.string.label_all_pets)), - imageRes = null, - onSelect = { name -> - selectedPets = if (selectedPets.contains(name)) { - selectedPets - name - } else { - selectedPets + name + Column(modifier = Modifier.padding(16.dp)) { + Text( + text = "Quais pets precisam dessa tarefa?", + color = MaterialTheme.colorScheme.scrim, + fontWeight = FontWeight(500), + style = MaterialTheme.typography.titleMedium + ) + + LazyRow( + modifier = Modifier + .fillMaxWidth() + .padding(top = 20.dp, start = 10.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + item { + PetFilterItem( + name = "Todos", + isSelected = selectedPets.contains(stringResource(R.string.label_all_pets)), + imageRes = null, + onSelect = { name -> + selectedPets = if (selectedPets.contains(name)) { + selectedPets - name + } else { + selectedPets + name + } + onSelectedPet(if (selectedPets.contains(name)) name else "") } - onSelectedPet(if (selectedPets.contains(name)) name else "") - } - ) - } - items( - items = listPet, - key = { it.id } - ) { item -> - PetFilterItem( - name = item.name!!, - isSelected = selectedPets.contains(item.name), - imageRes = item.imageRes, - onSelect = { name -> - selectedPets = if (selectedPets.contains(name)) { - selectedPets - name - } else { - selectedPets + name + ) + } + items( + items = listPet, + key = { it.id } + ) { item -> + PetFilterItem( + name = item.name!!, + isSelected = selectedPets.contains(item.name), + imageRes = item.imageRes, + onSelect = { name -> + selectedPets = if (selectedPets.contains(name)) { + selectedPets - name + } else { + selectedPets + name + } + onSelectedPet(if (selectedPets.contains(name)) name else "") } - onSelectedPet(if (selectedPets.contains(name)) name else "") - } - ) + ) + } } } + } @Preview(showBackground = true, showSystemUi = false, device = "id:pixel_4_xl") From 1c2ef836cb21b060db2c86be972c7e5986697d37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:23:56 -0400 Subject: [PATCH 04/70] feat: create RegisterTaskScreen --- .../registerTaskScreen/RegisterTaskScreen.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/RegisterTaskScreen.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/RegisterTaskScreen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/RegisterTaskScreen.kt new file mode 100644 index 00000000..f5987a1b --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/RegisterTaskScreen.kt @@ -0,0 +1,10 @@ +package com.soujunior.petjournal.ui.screens_app.screens_pets.registerTaskScreen + +import androidx.compose.runtime.Composable +import androidx.navigation.NavController +import com.soujunior.petjournal.ui.screens_app.screens_pets.registerTaskScreen.components.ScreenRegisterTask + +@Composable +fun RegisterTaskScreen(navController: NavController) { + ScreenRegisterTask(navController) +} \ No newline at end of file From 9e338fe1aa7e00168ad62c3df7a7d8920cdc175c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:24:29 -0400 Subject: [PATCH 05/70] feat: Create TransactionTypeSelector component --- .../ui/components/TransactionTypeSelector.kt | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt new file mode 100644 index 00000000..b8f49ada --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt @@ -0,0 +1,146 @@ +package com.soujunior.petjournal.ui.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +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.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.soujunior.petjournal.R +import com.soujunior.petjournal.ui.theme.ColorCustom +import com.soujunior.petjournal.ui.util.TransactionType + +@Composable +fun TransactionTypeSelector( + onSelectionChanged: (TransactionType?) -> Unit +) { + var selectedType by remember { mutableStateOf(null) } + + val selectedColor = ColorCustom.color_background_month_disabled + val unselectedColor = MaterialTheme.colorScheme.background + val borderColor = ColorCustom.color_border_button_transaction_type + + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.fillMaxWidth() + ) { + Row( + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.padding(16.dp) + ) { + ToggleButton( + text = stringResource(R.string.label_recurrent), + isSelected = selectedType == TransactionType.Recurrent, + onClick = { + val newType = TransactionType.Recurrent + selectedType = newType + onSelectionChanged(newType) + }, + selectedColor = selectedColor, + unselectedColor = unselectedColor, + borderColor = if (selectedType == TransactionType.Recurrent) selectedColor else borderColor + ) + + ToggleButton( + text = stringResource(R.string.label_one_off), + isSelected = selectedType == TransactionType.OneOff, + onClick = { + val newType = TransactionType.OneOff + selectedType = newType + onSelectionChanged(newType) + }, + selectedColor = selectedColor, + unselectedColor = unselectedColor, + borderColor = if (selectedType == TransactionType.OneOff) selectedColor else borderColor + ) + } + + if (selectedType == TransactionType.Recurrent) { + onSelectionChanged(selectedType) + } else { + onSelectionChanged(selectedType) + } + } +} + +@Composable +fun ToggleButton( + text: String, + isSelected: Boolean, + onClick: () -> Unit, + selectedColor: Color, + unselectedColor: Color, + borderColor: Color +) { + val backgroundColor = if (isSelected) selectedColor else unselectedColor + + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .width(150.dp) + .clip(RoundedCornerShape(50)) + .border(1.dp, borderColor, RoundedCornerShape(50)) + .background(backgroundColor) + .clickable { onClick() } + .padding(horizontal = 24.dp, vertical = 12.dp) + ) { + Text( + text = text, + color = ColorCustom.color_text_button_transaction_type, + style = MaterialTheme.typography.titleMedium, + ) + } +} + +@Preview(showBackground = true) +@Composable +fun TransactionTypeSelectorPreview() { + TransactionTypeSelector( + onSelectionChanged = {} + ) +} + +@Preview(showBackground = true) +@Composable +fun ToggleButtonPreview() { + Column(modifier = Modifier.padding(16.dp)) { + ToggleButton( + text = stringResource(R.string.label_recurrent), + isSelected = true, + onClick = {}, + selectedColor = ColorCustom.color_background_month_disabled, + unselectedColor = MaterialTheme.colorScheme.background, + borderColor = ColorCustom.color_border_button_transaction_type + ) + + ToggleButton( + text = stringResource(R.string.label_one_off), + isSelected = false, + onClick = {}, + selectedColor = ColorCustom.color_background_month_disabled, + unselectedColor = MaterialTheme.colorScheme.background, + borderColor = ColorCustom.color_border_button_transaction_type + ) + } + +} \ No newline at end of file From 965c2debdfb052349e05afa8eeef18fe079f64a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:24:50 -0400 Subject: [PATCH 06/70] feat: Create TransactionType enum --- .../java/com/soujunior/petjournal/ui/util/TransactionType.kt | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/TransactionType.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/TransactionType.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/TransactionType.kt new file mode 100644 index 00000000..0a632ab5 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/TransactionType.kt @@ -0,0 +1,5 @@ +package com.soujunior.petjournal.ui.util + +enum class TransactionType { + Recurrent, OneOff +} \ No newline at end of file From 03699374dd5ec7857543a86f07e5417fe12522af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:25:07 -0400 Subject: [PATCH 07/70] Refactor: Rename DescriptionTextField to TextFieldCustom --- ...riptionTextField.kt => TextFieldCustom.kt} | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) rename petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/{DescriptionTextField.kt => TextFieldCustom.kt} (83%) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DescriptionTextField.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt similarity index 83% rename from petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DescriptionTextField.kt rename to petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt index e018df07..91c2864c 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DescriptionTextField.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt @@ -13,15 +13,15 @@ import androidx.compose.material3.OutlinedTextFieldDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.soujunior.petjournal.R import com.soujunior.petjournal.ui.theme.ColorCustom @Composable -fun DescriptionTextField( +fun TextFieldCustom( + title:String, + placeholder:String, value: String, onValueChange: (String) -> Unit, modifier: Modifier = Modifier @@ -31,8 +31,9 @@ fun DescriptionTextField( .padding(16.dp) ) { Text( - text = stringResource(R.string.label_description), - fontWeight = FontWeight.Bold, + text = title, + color = MaterialTheme.colorScheme.scrim, + fontWeight = FontWeight(500), style = MaterialTheme.typography.titleMedium, ) @@ -43,9 +44,9 @@ fun DescriptionTextField( onValueChange = onValueChange, placeholder = { Text( - text = stringResource(R.string.enter_the_task_description_here), + text = placeholder, color = ColorCustom.color_placeholder, - style = MaterialTheme.typography.bodySmall + style = MaterialTheme.typography.bodyMedium ) }, modifier = Modifier @@ -64,7 +65,9 @@ fun DescriptionTextField( @Preview @Composable fun DescriptionTextFieldPreview() { - DescriptionTextField( + TextFieldCustom( + title = "Título", + placeholder = "Descrição", value = "", onValueChange = {} ) From ac1d516dd5dd64c08e8de08033ca6f26f873626c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:25:22 -0400 Subject: [PATCH 08/70] Refactor: Remove redundant strings and add recurrence strings --- petJournal/app/src/main/res/values/strings.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/petJournal/app/src/main/res/values/strings.xml b/petJournal/app/src/main/res/values/strings.xml index 7866e9c0..ddbe6fea 100644 --- a/petJournal/app/src/main/res/values/strings.xml +++ b/petJournal/app/src/main/res/values/strings.xml @@ -147,7 +147,6 @@ Essa tarefa é... Tarefa adicionada\ncom sucesso! Nova tarefa - Ir para a HomePage Ativo nos meses Todos Descrição @@ -157,9 +156,9 @@ Abrir Calendário 00/00/0000 dd/MM/yyyy - Tarefa adicionada\ncom sucesso! - Nova tarefa Ir para a HomePage AM PM + Recorrente + Pontual \ No newline at end of file From 6e8cf1bf4ad9a04ceccb33858e76ab95fe36e68e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:25:38 -0400 Subject: [PATCH 09/70] Refactor: Adjust SelectableButton layout and style --- .../ui/components/SelectableButtonData.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt index 8eb8733c..740815ea 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt @@ -40,8 +40,7 @@ fun SelectableButton( ) { androidx.compose.material3.Button( modifier = modifierSelectableButton - .height(70.dp) - .padding(top = 15.dp, end = 15.dp, bottom = 15.dp) + .height(40.dp) .then( if (isSelected) { Modifier.shadow( @@ -120,14 +119,16 @@ fun GroupSelectableButton( ) { Text( text = stringResource(R.string.label_select_main_category), - style = MaterialTheme.typography.titleLarge, + style = MaterialTheme.typography.titleMedium, color = MaterialTheme.colorScheme.scrim, fontWeight = FontWeight(500), lineHeight = 24.sp ) FlowRow( - modifier = Modifier.fillMaxWidth() + modifier = Modifier + .fillMaxWidth() + .padding(top = 15.dp) ) { buttons.forEachIndexed { index, buttonInfo -> SelectableButton( @@ -142,7 +143,9 @@ fun GroupSelectableButton( onSelection("") } }, - modifierSelectableButton = Modifier.adaptiveWidthForTitle(buttonInfo.title) + modifierSelectableButton = Modifier + .adaptiveWidthForTitle(buttonInfo.title) + .padding(bottom = 15.dp, end = 15.dp) ) } } From f00f787a84d1e47e6cb97380ee82c1a0781b6d8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:25:57 -0400 Subject: [PATCH 10/70] feat: Create ScreenRegisterTask screen This commit introduces the `ScreenRegisterTask` composable, a new screen for registering tasks within the application. Key changes include: - Addition of `ScreenRegisterTask.kt` file. - Implementation of the `ScreenRegisterTask` composable function, which includes: - A `ScaffoldCustom` for the basic screen structure with a top app bar titled "Nova tarefa" (New Task) and bottom navigation. - A `LazyColumn` to display various input fields and components for task registration. - `InputText` for the task name. - `TextFieldCustom` for the task description and an observation field. - `GroupSelectableButton` (functionality not fully detailed in the diff). - `PetFilterList` to select a pet associated with the task. - `TransactionTypeSelector` to choose between recurrent and one-off task types. - A `@Preview` function `ScreenRegisterTaskPreview` is included for UI development and testing. --- .../components/ScreenRegisterTask.kt | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt new file mode 100644 index 00000000..ae84a260 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt @@ -0,0 +1,125 @@ +package com.soujunior.petjournal.ui.screens_app.screens_pets.registerTaskScreen.components + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import com.soujunior.petjournal.R +import com.soujunior.petjournal.ui.components.GroupSelectableButton +import com.soujunior.petjournal.ui.components.InputText +import com.soujunior.petjournal.ui.components.PetFilterList +import com.soujunior.petjournal.ui.components.Pets +import com.soujunior.petjournal.ui.components.ScaffoldCustom +import com.soujunior.petjournal.ui.components.TextFieldCustom +import com.soujunior.petjournal.ui.components.TransactionTypeSelector +import com.soujunior.petjournal.ui.util.TransactionType + +@Composable +fun ScreenRegisterTask(navController: NavController) { + + val listPet = listOf( + Pets( + id = 1, + imageRes = painterResource(R.drawable.image_jujuba), + name = "Jujuba" + ), + Pets( + id = 2, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ) + ) + + val nameTask = remember { mutableStateOf("") } + val desc = remember { mutableStateOf("") } + var selectedType by remember { mutableStateOf(null) } + + Column(modifier = Modifier) { + ScaffoldCustom( + modifier = Modifier, + navigationUp = navController, + showTopBar = true, + titleTopBar = stringResource(R.string.label_new_task), + showBottomBarNavigation = true, + contentToUse = { + LazyColumn( + contentPadding = it, + content = { + item { + GroupSelectableButton() + } + item { + InputText( + modifier = Modifier, + placeholderText = "Digite aqui o nome da tarefa", + titleText = "Nome da tarefa", + textValue = nameTask.value, + onEvent = { t -> + nameTask.value = t + }, + ) + } + item { + TextFieldCustom( + title = stringResource(R.string.label_description), + placeholder = stringResource(R.string.enter_the_task_description_here), + value = desc.value, + onValueChange = { d -> + desc.value = d + } + ) + } + item { + PetFilterList( + listPet, + onSelectedPet = {} + ) + } + item { + Column { + TransactionTypeSelector( + onSelectionChanged = { type -> + selectedType = type + } + ) + + when (selectedType) { + TransactionType.Recurrent -> Text(text = "Recorrente") + TransactionType.OneOff -> Text(text = "Pontual") + null -> {} + } + } + } + item { + TextFieldCustom( + title = "Observação", + placeholder = "Digite aqui a sua observação", + value = desc.value, + onValueChange = { d -> + desc.value = d + } + ) + } + } + ) + } + ) + } +} + +@Preview(showBackground = true, showSystemUi = true, device = "id:pixel_4_xl") +@Composable +fun ScreenRegisterTaskPreview() { + val nav = rememberNavController() + ScreenRegisterTask(nav) +} \ No newline at end of file From 8340d398dfb9e65d0cf74826e17007eeb95a405b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:26:16 -0400 Subject: [PATCH 11/70] feat: integrate ScreenRegisterTask into MainActivity --- .../com/soujunior/petjournal/navigation/MainActivity.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/MainActivity.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/MainActivity.kt index e4db3ebb..65eed297 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/MainActivity.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/MainActivity.kt @@ -7,8 +7,9 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect import androidx.compose.ui.graphics.Color import androidx.core.view.WindowCompat +import androidx.navigation.compose.rememberNavController import com.google.accompanist.systemuicontroller.rememberSystemUiController -import com.soujunior.petjournal.ui.components.ActiveMonthsComponent +import com.soujunior.petjournal.ui.screens_app.screens_pets.registerTaskScreen.components.ScreenRegisterTask import com.soujunior.petjournal.ui.theme.PetJournalTheme class MainActivity : ComponentActivity() { @@ -18,7 +19,8 @@ class MainActivity : ComponentActivity() { setContent { ChangeSystemBars() // PresentationManager() - ActiveMonthsComponent(activeMonths = setOf("Jan", "Mar", "Mai")) + val nav = rememberNavController() + ScreenRegisterTask(nav) } } } From 4a12d3561ccc4a336e8105fce13168281566a425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:09:10 -0400 Subject: [PATCH 12/70] feat: Add unfocused color for WheelTimePicker --- .../app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt index ffc05128..e56a9f54 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt @@ -100,4 +100,5 @@ object ColorCustom { val color_placeholder = Color(0xFFCCCCCC) val color_text_button_transaction_type = Color(0xFF8dD4CD2) val color_border_button_transaction_type = Color(0xFFA2A9B1) + val color_unfocused_wheelTimePicker = Color(0xFFDADADA) } \ No newline at end of file From be3d9e3b40eebf5ed00f7c5647fcfed0c1bb0990 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:10:23 -0400 Subject: [PATCH 13/70] feat: Create DayPicker composable --- .../ui/components/data/DayPicker.kt | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/DayPicker.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/DayPicker.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/DayPicker.kt new file mode 100644 index 00000000..a5e3d4a4 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/DayPicker.kt @@ -0,0 +1,98 @@ +package com.soujunior.petjournal.ui.components.data + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import kotlinx.coroutines.flow.distinctUntilChanged +import java.time.LocalDate + +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun DayPicker( + onDaySelected: (Int) -> Unit +) { + val currentDate = remember { LocalDate.now() } + val totalDays = remember { currentDate.lengthOfMonth() } + + val days = remember { (1..totalDays).toList() } + + val listState = rememberLazyListState(initialFirstVisibleItemIndex = currentDate.dayOfMonth - 1) + + val flingBehavior = rememberSnapFlingBehavior(lazyListState = listState) + + LaunchedEffect(listState) { + snapshotFlow { listState.firstVisibleItemIndex } + .distinctUntilChanged() + .collect { index -> + onDaySelected(days.getOrNull(index + 1) ?: days.last()) + } + } + + Column( + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text(text = "DIA", style = MaterialTheme.typography.bodySmall) + + Box( + modifier = Modifier + .height(120.dp) + .width(60.dp), + contentAlignment = Alignment.Center + ) { + LazyColumn( + state = listState, + flingBehavior = flingBehavior, + contentPadding = PaddingValues(vertical = 40.dp), + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.fillMaxHeight() + ) { + itemsIndexed(days) { index, day -> + val isSelected = listState.firstVisibleItemIndex == index + Text( + text = day.toString(), + fontSize = if (isSelected) 26.sp else 20.sp, + color = if (isSelected) Color.Black else Color.LightGray, + fontWeight = if (isSelected) FontWeight.Bold else FontWeight.Normal, + modifier = Modifier.padding(vertical = 4.dp) + ) + } + } + } + } +} + + +@Preview +@Composable +fun DayPickerPreview(){ + var selectedDay by remember { mutableStateOf(LocalDate.now().dayOfMonth) } + + DayPicker( + onDaySelected = { selectedDay = it } + ) +} \ No newline at end of file From 7bbde0fe7c90f13fcdda83f9f257ab88ededcf97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:10:44 -0400 Subject: [PATCH 14/70] feat: Create OneOffTask composable --- .../ui/components/task/OneOffTask.kt | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/OneOffTask.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/OneOffTask.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/OneOffTask.kt new file mode 100644 index 00000000..3edf7ff7 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/OneOffTask.kt @@ -0,0 +1,51 @@ +package com.soujunior.petjournal.ui.components.task + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.soujunior.petjournal.ui.components.clock.TimePickerWithPeriodSelector +import com.soujunior.petjournal.ui.components.data.CustomDatePicker + +@Composable +fun OneOffTask( + onDateSelected: (Long?) -> Unit = {}, + onAmPmSelector: (String?) -> Unit = {}, + onTime: (Int, Int) -> Unit = { _, _ -> } +) { + var selectedTimestamp by remember { mutableStateOf(null) } + + Column(modifier = Modifier.padding(start = 20.dp, end = 20.dp)) { + CustomDatePicker( + label = "Data", + value = selectedTimestamp, + onValueChange = { + selectedTimestamp = it + onDateSelected(selectedTimestamp) + }, + modifier = Modifier.fillMaxWidth() + ) + + TimePickerWithPeriodSelector( + onAmPmSelector = { amPmSelector -> + onAmPmSelector(amPmSelector) + }, + onTime = { hour, minute -> + onTime(hour, minute) + } + ) + } +} + +@Preview(showBackground = true) +@Composable +fun OneOffTaskPreview() { + OneOffTask() +} \ No newline at end of file From b0b471d9b95e2aae4281c09ebfaa9ac778cdb810 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:11:07 -0400 Subject: [PATCH 15/70] feat: Create PeriodSelector composable --- .../ui/components/PeriodSelector.kt | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PeriodSelector.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PeriodSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PeriodSelector.kt new file mode 100644 index 00000000..f20a537e --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PeriodSelector.kt @@ -0,0 +1,90 @@ +package com.soujunior.petjournal.ui.components + +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +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.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Path +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.soujunior.petjournal.ui.util.SelectedPeriodType + +@Composable +fun PeriodSelector( + selected: SelectedPeriodType, + onSelectionChanged: (SelectedPeriodType) -> Unit +) { + val items = listOf(SelectedPeriodType.Diária, SelectedPeriodType.Semanal, SelectedPeriodType.Mensal) + + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceEvenly + ) { + items.forEach { item -> + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .clickable { onSelectionChanged(item) } + .padding(horizontal = 8.dp) + ) { + Text( + text = item.name, + style = MaterialTheme.typography.bodyMedium, + color = if (selected == item) Color(0xFF8D4CD2) else Color.Black, + ) + if (selected == item) { + TriangleIndicator() + } else { + Spacer(modifier = Modifier.height(6.dp)) + } + } + } + } +} + +@Composable +fun TriangleIndicator( + color: Color = Color(0xFF8D4CD2), + modifier: Modifier = Modifier + .width(60.dp) + .height(2.dp) +) { + Canvas(modifier = modifier) { + val width = size.width + val height = size.height + + val inset = width * 0.1f + + val path = Path().apply { + moveTo(inset, 0f) + lineTo(width - inset, 0f) + lineTo(width, height) + lineTo(0f, height) + close() + } + + drawPath(path = path, color = color) + } +} + + +@Preview(showBackground = true) +@Composable +fun PeriodSelectorPreview() { + var selectedPeriod = SelectedPeriodType.Diária + PeriodSelector(selected = selectedPeriod) { + selectedPeriod = it + } +} \ No newline at end of file From 54ff2ba6053b6885d026879552e281786f890f7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:11:26 -0400 Subject: [PATCH 16/70] feat: Create RecurringTask composable --- .../ui/components/task/RecurrentTask.kt | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/RecurrentTask.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/RecurrentTask.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/RecurrentTask.kt new file mode 100644 index 00000000..df35b3d9 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/RecurrentTask.kt @@ -0,0 +1,135 @@ +package com.soujunior.petjournal.ui.components.task + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +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.runtime.Composable +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.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.soujunior.petjournal.ui.components.ActiveMonthsComponent +import com.soujunior.petjournal.ui.components.AmPmSelector +import com.soujunior.petjournal.ui.components.PeriodSelector +import com.soujunior.petjournal.ui.components.WeekDaySelector +import com.soujunior.petjournal.ui.components.clock.TimePickerWithPeriodSelector +import com.soujunior.petjournal.ui.components.clock.WheelTimePicker +import com.soujunior.petjournal.ui.components.data.DayPicker +import com.soujunior.petjournal.ui.util.SelectedPeriodType + +@Composable +fun RecurringTask( + activeMonths: Set = setOf(), + onAmPmSelector: (String?) -> Unit = {}, + onTime: (Int?, Int?) -> Unit = { _, _ -> }, + onWeekDaySelected: (String?) -> Unit = {}, + onDaySelected: (Int?) -> Unit = {}, +) { + var selectedPeriod by remember { mutableStateOf(SelectedPeriodType.Diária) } + PeriodSelector( + selected = selectedPeriod, + onSelectionChanged = { selectedPeriod = it } + ) + + when (selectedPeriod) { + SelectedPeriodType.Diária -> { + TimePickerWithPeriodSelector( + onAmPmSelector = { amPmSelector -> + onAmPmSelector(amPmSelector) + }, + onTime = { hour, minute -> + onTime(hour, minute) + } + ) + } + + SelectedPeriodType.Semanal -> { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically + ) { + + WeekDaySelector( + onDaySelected = { weekDaySelected -> + onWeekDaySelected(weekDaySelected) + } + ) + + AmPmSelector( + onPeriodSelected = { amPmSelector -> + onAmPmSelector(amPmSelector) + } + ) + Box( + modifier = Modifier + .padding(start = 8.dp) + .height(150.dp) + .width(100.dp), + contentAlignment = Alignment.Center + ) { + WheelTimePicker( + onTimeChanged = { hour, minute -> + onTime(hour, minute) + } + ) + } + } + } + + SelectedPeriodType.Mensal -> { + Column { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically + ) { + + DayPicker( + onDaySelected = { daySelected -> + onDaySelected(daySelected) + } + ) + AmPmSelector( + onPeriodSelected = { amPmSelector -> + onAmPmSelector(amPmSelector) + } + ) + Box( + modifier = Modifier + .height(150.dp) + .width(100.dp), + contentAlignment = Alignment.Center + ) { + WheelTimePicker( + onTimeChanged = { hour, minute -> + onTime(hour, minute) + } + ) + } + } + ActiveMonthsComponent(activeMonths = activeMonths) + } + + } + } +} + +@Preview(showBackground = true) +@Composable +fun RecurringTaskPreview() { + RecurringTask() +} \ No newline at end of file From 83b807f7715702d4fb5918b73f9873dc096dcef2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:11:44 -0400 Subject: [PATCH 17/70] Refactor: Make GroupSelectableButton dynamic --- .../ui/components/SelectableButtonData.kt | 59 ++++++++++--------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt index 740815ea..7924a58c 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt @@ -81,36 +81,11 @@ fun SelectableButton( @OptIn(ExperimentalLayoutApi::class) @Composable fun GroupSelectableButton( + listOfTasks: List, onSelection: (String) -> Unit = {} ) { - val buttons = listOf( - SelectableButtonInfo( - stringResource(R.string.label_selectable_button_vaccines), - ColorCustom.color_selectable_button_1 - ), - SelectableButtonInfo( - stringResource(R.string.label_selectable_button_consultations), - ColorCustom.color_selectable_button_2 - ), - SelectableButtonInfo( - stringResource(R.string.label_selectable_button_medicine), - ColorCustom.color_selectable_button_3 - ), - SelectableButtonInfo( - stringResource(R.string.label_selectable_button_bath), - ColorCustom.color_selectable_button_4 - ), - SelectableButtonInfo( - stringResource(R.string.label_selectable_button_food), - ColorCustom.color_selectable_button_5 - ), - SelectableButtonInfo( - stringResource(R.string.label_selectable_button_pet_walk), - ColorCustom.color_selectable_button_6 - ), - ) - val selectionState = remember { mutableStateListOf(*Array(buttons.size) { false }) } + val selectionState = remember { mutableStateListOf(*Array(listOfTasks.size) { false }) } Column( modifier = Modifier @@ -130,7 +105,7 @@ fun GroupSelectableButton( .fillMaxWidth() .padding(top = 15.dp) ) { - buttons.forEachIndexed { index, buttonInfo -> + listOfTasks.forEachIndexed { index, buttonInfo -> SelectableButton( titleButton = buttonInfo.title, colorButton = buttonInfo.color, @@ -162,5 +137,31 @@ data class SelectableButtonInfo( @Preview(showBackground = true, showSystemUi = true, device = "id:pixel_4_xl") @Composable fun CustomSelectableButtonPreview() { - GroupSelectableButton() + val listOfTasks = listOf( + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_vaccines), + ColorCustom.color_selectable_button_1 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_consultations), + ColorCustom.color_selectable_button_2 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_medicine), + ColorCustom.color_selectable_button_3 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_bath), + ColorCustom.color_selectable_button_4 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_food), + ColorCustom.color_selectable_button_5 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_pet_walk), + ColorCustom.color_selectable_button_6 + ), + ) + GroupSelectableButton(listOfTasks) } \ No newline at end of file From 0dce3433d958be3fdf33cd1a4a830ad578542642 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:12:00 -0400 Subject: [PATCH 18/70] feat: Add SelectedPeriodType enum --- .../com/soujunior/petjournal/ui/util/SelectedPeriodType.kt | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/SelectedPeriodType.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/SelectedPeriodType.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/SelectedPeriodType.kt new file mode 100644 index 00000000..3fa0a40e --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/SelectedPeriodType.kt @@ -0,0 +1,5 @@ +package com.soujunior.petjournal.ui.util + +enum class SelectedPeriodType { + Diária, Semanal, Mensal +} \ No newline at end of file From 604a5f124b1fc1218651bb3b33645ff51245cd78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:12:25 -0400 Subject: [PATCH 19/70] Refactor: Update TextFieldCustom padding and add new string resources --- .../soujunior/petjournal/ui/components/TextFieldCustom.kt | 2 +- petJournal/app/src/main/res/values/strings.xml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt index 91c2864c..d8318f72 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt @@ -28,7 +28,7 @@ fun TextFieldCustom( ) { Column( modifier = modifier - .padding(16.dp) + .padding(start = 16.dp, end = 16.dp) ) { Text( text = title, diff --git a/petJournal/app/src/main/res/values/strings.xml b/petJournal/app/src/main/res/values/strings.xml index ddbe6fea..631122de 100644 --- a/petJournal/app/src/main/res/values/strings.xml +++ b/petJournal/app/src/main/res/values/strings.xml @@ -161,4 +161,10 @@ PM Recorrente Pontual + Data + Digite aqui o nome da tarefa + Nome da tarefa + Observação + Digite aqui a sua observação + Salvar \ No newline at end of file From 45a57d4eaef9e1c85daa2ae8743d17bbd6427255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:12:42 -0400 Subject: [PATCH 20/70] feat: Create TimePickerWithPeriodSelector Composable --- .../clock/TimePickerWithPeriodSelector.kt | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/TimePickerWithPeriodSelector.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/TimePickerWithPeriodSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/TimePickerWithPeriodSelector.kt new file mode 100644 index 00000000..32ead607 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/TimePickerWithPeriodSelector.kt @@ -0,0 +1,47 @@ +package com.soujunior.petjournal.ui.components.clock + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +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.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.soujunior.petjournal.ui.components.AmPmSelector + +@Composable +fun TimePickerWithPeriodSelector( + onAmPmSelector: (String) -> Unit, + onTime: (Int, Int) -> Unit +) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically + ) { + AmPmSelector( + onPeriodSelected = { periodSelected -> + onAmPmSelector(periodSelected) + } + ) + Box( + modifier = Modifier + .padding(start = 8.dp) + .height(150.dp) + .width(100.dp), + contentAlignment = Alignment.Center + ) { + WheelTimePicker( + onTimeChanged = { hour, minute -> + onTime(hour, minute) + } + ) + } + } +} \ No newline at end of file From a840ae99cfb9b15e7b425a03ebd798e120438d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:12:57 -0400 Subject: [PATCH 21/70] Refactor: Adjust TransactionTypeSelector button size --- .../petjournal/ui/components/TransactionTypeSelector.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt index b8f49ada..fbdacd92 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt @@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row 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 @@ -97,7 +98,7 @@ fun ToggleButton( Box( contentAlignment = Alignment.Center, modifier = Modifier - .width(150.dp) + .width(130.dp).height(50.dp) .clip(RoundedCornerShape(50)) .border(1.dp, borderColor, RoundedCornerShape(50)) .background(backgroundColor) From bc4cc3ad46226d640137f30ff16f0089090b27e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:13:19 -0400 Subject: [PATCH 22/70] Refactor: Update WheelTimePicker component --- .../ui/components/clock/WheelTimePicker.kt | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt index ab19cec4..ceadee14 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.TextStyle @@ -32,6 +31,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import com.soujunior.petjournal.ui.theme.ColorCustom import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.filter import kotlin.math.abs @@ -59,7 +59,7 @@ fun WheelTimePicker( initialMinute: Int = 0, textStyle: TextStyle = MaterialTheme.typography.titleLarge, focusedColor: Color = Color.Black, - unfocusedColor: Color = Color.Gray, + unfocusedColor: Color = ColorCustom.color_unfocused_wheelTimePicker, onTimeChanged: (hour: Int, minute: Int) -> Unit ) { require(visibleItemsCount % 2 != 0) { "visibleItemsCount must be an odd number." } @@ -162,8 +162,10 @@ private fun PickerColumn( if (layoutInfo.visibleItemsInfo.isEmpty()) { -1 } else { - val viewportCenter = (layoutInfo.viewportStartOffset + layoutInfo.viewportEndOffset) / 2 - layoutInfo.visibleItemsInfo.minByOrNull { abs((it.offset + it.size / 2) - viewportCenter) }?.index ?: -1 + val viewportCenter = + (layoutInfo.viewportStartOffset + layoutInfo.viewportEndOffset) / 2 + layoutInfo.visibleItemsInfo.minByOrNull { abs((it.offset + it.size / 2) - viewportCenter) }?.index + ?: -1 } } } @@ -176,12 +178,14 @@ private fun PickerColumn( val layoutInfo = listState.layoutInfo if (layoutInfo.visibleItemsInfo.isEmpty()) return@collect - val viewportCenter = (layoutInfo.viewportStartOffset + layoutInfo.viewportEndOffset) / 2 + val viewportCenter = + (layoutInfo.viewportStartOffset + layoutInfo.viewportEndOffset) / 2 val centralItem = layoutInfo.visibleItemsInfo.minByOrNull { abs((it.offset + it.size / 2) - viewportCenter) } ?: return@collect - val itemDataIndex = (centralItem.index - halfVisibleItems).coerceIn(0, items.size - 1) + val itemDataIndex = + (centralItem.index - halfVisibleItems).coerceIn(0, items.size - 1) val delta = (centralItem.offset + centralItem.size / 2) - viewportCenter listState.animateScrollBy(delta.toFloat()) @@ -204,8 +208,14 @@ private fun PickerColumn( items(items.size) { dataIndex -> val lazyColumnIndex = dataIndex + halfVisibleItems val isFocused = (lazyColumnIndex == centralLazyColumnIndex) - val scale by animateFloatAsState(targetValue = if (isFocused) 1.2f else 1.0f, label = "scale") - val alpha by animateFloatAsState(targetValue = if (isFocused) 1.0f else 0.5f, label = "alpha") + val scale by animateFloatAsState( + targetValue = if (isFocused) 1.2f else 1.0f, + label = "scale" + ) + val alpha by animateFloatAsState( + targetValue = if (isFocused) 1.0f else 0.5f, + label = "alpha" + ) Box( modifier = Modifier.height(itemHeight), @@ -215,9 +225,9 @@ private fun PickerColumn( text = items[dataIndex], style = textStyle.copy( color = if (isFocused) focusedColor else unfocusedColor, - fontSize = textStyle.fontSize * scale + fontSize = 34.sp ), - modifier = Modifier.alpha(alpha) +// modifier = Modifier.alpha(alpha) ) } } From 74938de79cb6682633806e31f24908b8be63248a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:13:44 -0400 Subject: [PATCH 23/70] feat: Enhance ScreenRegisterTask UI and functionality --- .../components/ScreenRegisterTask.kt | 253 +++++++++++++----- 1 file changed, 187 insertions(+), 66 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt index ae84a260..9e9f8abf 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt @@ -1,32 +1,69 @@ package com.soujunior.petjournal.ui.screens_app.screens_pets.registerTaskScreen.components +import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController import com.soujunior.petjournal.R +import com.soujunior.petjournal.ui.components.Button3 import com.soujunior.petjournal.ui.components.GroupSelectableButton import com.soujunior.petjournal.ui.components.InputText import com.soujunior.petjournal.ui.components.PetFilterList import com.soujunior.petjournal.ui.components.Pets import com.soujunior.petjournal.ui.components.ScaffoldCustom +import com.soujunior.petjournal.ui.components.SelectableButtonInfo import com.soujunior.petjournal.ui.components.TextFieldCustom import com.soujunior.petjournal.ui.components.TransactionTypeSelector +import com.soujunior.petjournal.ui.components.task.OneOffTask +import com.soujunior.petjournal.ui.components.task.RecurringTask +import com.soujunior.petjournal.ui.theme.ColorCustom import com.soujunior.petjournal.ui.util.TransactionType +import ir.kaaveh.sdpcompose.sdp @Composable fun ScreenRegisterTask(navController: NavController) { + val listOfTasks = listOf( + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_vaccines), + ColorCustom.color_selectable_button_1 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_consultations), + ColorCustom.color_selectable_button_2 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_medicine), + ColorCustom.color_selectable_button_3 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_bath), + ColorCustom.color_selectable_button_4 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_food), + ColorCustom.color_selectable_button_5 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_pet_walk), + ColorCustom.color_selectable_button_6 + ), + ) + val listPet = listOf( Pets( id = 1, @@ -37,84 +74,168 @@ fun ScreenRegisterTask(navController: NavController) { id = 2, imageRes = painterResource(R.drawable.image_alfredo), name = "Alfredo" + ), + Pets( + id = 3, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ), + Pets( + id = 4, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ), + Pets( + id = 5, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ), + Pets( + id = 6, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ), + Pets( + id = 7, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ), + Pets( + id = 8, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ), + Pets( + id = 9, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" ) ) val nameTask = remember { mutableStateOf("") } val desc = remember { mutableStateOf("") } + val ob = remember { mutableStateOf("") } var selectedType by remember { mutableStateOf(null) } - Column(modifier = Modifier) { - ScaffoldCustom( - modifier = Modifier, - navigationUp = navController, - showTopBar = true, - titleTopBar = stringResource(R.string.label_new_task), - showBottomBarNavigation = true, - contentToUse = { - LazyColumn( - contentPadding = it, - content = { - item { - GroupSelectableButton() - } - item { - InputText( - modifier = Modifier, - placeholderText = "Digite aqui o nome da tarefa", - titleText = "Nome da tarefa", - textValue = nameTask.value, - onEvent = { t -> - nameTask.value = t - }, - ) - } - item { - TextFieldCustom( - title = stringResource(R.string.label_description), - placeholder = stringResource(R.string.enter_the_task_description_here), - value = desc.value, - onValueChange = { d -> - desc.value = d + ScaffoldCustom( + modifier = Modifier, + navigationUp = navController, + showTopBar = true, + titleTopBar = stringResource(R.string.label_new_task), + showBottomBarNavigation = true, + contentToUse = { paddingValues -> + Image( + painter = painterResource(R.drawable.rastro), + contentDescription = null, + modifier = Modifier + .fillMaxSize() + .offset(y = 300.sdp) + ) + LazyColumn( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues), + content = { + item { + GroupSelectableButton( + listOfTasks, + onSelection = { + + } + ) + } + item { + InputText( + modifier = Modifier.testTag("inputFieldTag"), + placeholderText = stringResource(R.string.enter_task_name_here), + titleText = stringResource(R.string.task_name), + textValue = nameTask.value, + onEvent = { t -> + nameTask.value = t + + }, + ) + } + item { + TextFieldCustom( + title = stringResource(R.string.label_description), + placeholder = stringResource(R.string.enter_the_task_description_here), + value = desc.value, + onValueChange = { d -> + desc.value = d + } + ) + } + item { + PetFilterList( + listPet, + onSelectedPet = { + + } + ) + } + item { + Column { + TransactionTypeSelector( + onSelectionChanged = { type -> + selectedType = type } ) - } - item { - PetFilterList( - listPet, - onSelectedPet = {} - ) - } - item { - Column { - TransactionTypeSelector( - onSelectionChanged = { type -> - selectedType = type - } - ) - - when (selectedType) { - TransactionType.Recurrent -> Text(text = "Recorrente") - TransactionType.OneOff -> Text(text = "Pontual") - null -> {} + + when (selectedType) { + TransactionType.Recurrent -> { + RecurringTask( + setOf(), + onAmPmSelector = { + + }, + onTime = { hour, minute -> + + }, + onWeekDaySelected = { + + }, + onDaySelected = { + + } + ) } - } - } - item { - TextFieldCustom( - title = "Observação", - placeholder = "Digite aqui a sua observação", - value = desc.value, - onValueChange = { d -> - desc.value = d + + TransactionType.OneOff -> { + OneOffTask( + onDateSelected = { + + }, + onAmPmSelector = { + + }, + onTime = { hour, minute -> + + } + ) } - ) + + null -> {} + } } } - ) - } - ) - } + item { + TextFieldCustom( + title = stringResource(R.string.label_observation), + placeholder = stringResource(R.string.enter_your_observation_here), + value = ob.value, + onValueChange = { o -> + ob.value = o + } + ) + } + item { + Button3(submit = { /*TODO*/ }, enableButton = true, text = stringResource(R.string.label_save_task)) + } + } + ) + } + ) } @Preview(showBackground = true, showSystemUi = true, device = "id:pixel_4_xl") From ff3ecdf8d32eb34c203b0c1a733eaade1f5df465 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:14:09 -0400 Subject: [PATCH 24/70] Test: Add UI tests for ScreenRegisterTask components --- .../components/ScreenRegisterTaskTest.kt | 360 ++++++++++++++++++ 1 file changed, 360 insertions(+) create mode 100644 petJournal/app/src/androidTest/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTaskTest.kt diff --git a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTaskTest.kt b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTaskTest.kt new file mode 100644 index 00000000..b8fe2ad3 --- /dev/null +++ b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTaskTest.kt @@ -0,0 +1,360 @@ +package com.soujunior.petjournal.ui.screens_app.screens_pets.registerTaskScreen.components + +import androidx.compose.foundation.layout.Column +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.hasSetTextAction +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.compose.ui.test.performTextInput +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.soujunior.petjournal.ui.components.GroupSelectableButton +import com.soujunior.petjournal.ui.components.InputText +import com.soujunior.petjournal.ui.components.PetFilterList +import com.soujunior.petjournal.ui.components.Pets +import com.soujunior.petjournal.ui.components.SelectableButtonInfo +import com.soujunior.petjournal.ui.components.TextFieldCustom +import com.soujunior.petjournal.ui.components.TransactionTypeSelector +import com.soujunior.petjournal.ui.components.task.OneOffTask +import com.soujunior.petjournal.ui.components.task.RecurringTask +import com.soujunior.petjournal.ui.theme.ColorCustom +import com.soujunior.petjournal.ui.util.TransactionType +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class ScreenRegisterTaskTest { + + @get:Rule + val composeTestRule = createComposeRule() + + private val pets = listOf( + Pets(id = 1, name = "Rex"), + Pets(id = 2, name = "Mia"), + Pets(id = 3, name = "Thor") + ) + + private val sampleListOfTasks = listOf( + SelectableButtonInfo("Vacinas", ColorCustom.color_selectable_button_1), + SelectableButtonInfo("Consultas", ColorCustom.color_selectable_button_2), + SelectableButtonInfo("Remédios", ColorCustom.color_selectable_button_3) + ) + + @Test + fun groupSelectableButton_displaysTitleCorrectly() { + composeTestRule.setContent { + GroupSelectableButton( + listOfTasks = sampleListOfTasks, + onSelection = {} + ) + } + + composeTestRule.onNodeWithText("Essa tarefa é...") + .assertIsDisplayed() + } + + @Test + fun groupSelectableButton_displaysAllButtons() { + composeTestRule.setContent { + GroupSelectableButton( + listOfTasks = sampleListOfTasks, + onSelection = {} + ) + } + + sampleListOfTasks.forEach { buttonInfo -> + composeTestRule.onNodeWithText(buttonInfo.title).assertIsDisplayed() + } + } + + @Test + fun groupSelectableButton_selectsAndDeselectsButtonCorrectly() { + composeTestRule.setContent { + GroupSelectableButton( + listOfTasks = sampleListOfTasks, + onSelection = {} + ) + } + + val firstButton = sampleListOfTasks[0] + + composeTestRule.onNodeWithText(firstButton.title).performClick() + + composeTestRule.onNodeWithText(firstButton.title).performClick() + } + + @Test + fun groupSelectableButton_selectsOnlyOneButtonAtATime_ifLogicImpliesThat() { + composeTestRule.setContent { + GroupSelectableButton( + listOfTasks = sampleListOfTasks, + onSelection = {} + ) + } + + val firstButton = sampleListOfTasks[0] + val secondButton = sampleListOfTasks[1] + + composeTestRule.onNodeWithText(firstButton.title).performClick() + + composeTestRule.onNodeWithText(secondButton.title).performClick() + + } + + @Test + fun inputText_displaysTitleCorrectly() { + val testTitle = "Nome da Tarefa" + composeTestRule.setContent { + InputText( + titleText = testTitle, + textValue = "", + onEvent = {} + ) + } + + composeTestRule.onNodeWithText(testTitle).assertIsDisplayed() + } + + @Test + fun inputText_displaysPlaceholder_whenTextValueIsEmptyAndNotMasked() { + val testPlaceholder = "Digite o nome da tarefa" + composeTestRule.setContent { + InputText( + placeholderText = testPlaceholder, + textValue = "", + onEvent = {}, + hasAMask = false + ) + } + + composeTestRule.onNodeWithText(testPlaceholder).assertIsDisplayed() + } + + @Test + fun inputText_doesNotDisplayPlaceholder_whenTextValueIsNotEmpty() { + val testPlaceholder = "Digite o nome da tarefa" + composeTestRule.setContent { + InputText( + placeholderText = testPlaceholder, + textValue = "Minha Tarefa", + onEvent = {}, + hasAMask = false + ) + } + + composeTestRule.onNodeWithText(testPlaceholder).assertDoesNotExist() + } + + @Test + fun inputText_displaysErrorMessages_whenTextErrorIsProvided() { + val errorMessages = listOf("Nome muito curto", "Nome inválido") + composeTestRule.setContent { + InputText( + textValue = "Ops", + onEvent = {}, + isError = true, + textError = errorMessages + ) + } + errorMessages.forEach { errorMessage -> + composeTestRule.onNodeWithText(errorMessage).assertIsDisplayed() + } + } + + private val title = "Descrição" + private val placeholder = "Digite a descrição aqui..." + + @Test + fun shouldDisplayTitleAndPlaceholder() { + composeTestRule.setContent { + TextFieldCustom( + title = title, + placeholder = placeholder, + value = "", + onValueChange = {} + ) + } + + composeTestRule.onNodeWithText(title).assertIsDisplayed() + + composeTestRule.onNodeWithText(placeholder).assertIsDisplayed() + } + + @Test + fun shouldUpdateTextWhenTyping() { + var textValue = "" + composeTestRule.setContent { + TextFieldCustom( + title = title, + placeholder = placeholder, + value = textValue, + onValueChange = { textValue = it } + ) + } + + val inputText = "Descrição do produto" + + composeTestRule.onNode( + hasSetTextAction() + ).performTextInput(inputText) + + assert(textValue == inputText) + } + + @Test + fun shouldDisplayTitleAndAllOption() { + composeTestRule.setContent { + PetFilterList(listPet = pets) + } + + composeTestRule.onNodeWithText("Quais pets precisam dessa tarefa?").assertIsDisplayed() + + composeTestRule.onNodeWithText("Todos").assertIsDisplayed() + } + + @Test + fun shouldDisplayAllPetsFromList() { + composeTestRule.setContent { + PetFilterList(listPet = pets) + } + + pets.forEach { pet -> + composeTestRule.onNodeWithText(pet.name!!).assertIsDisplayed() + } + } + + @Test + fun shouldSelectAndUnselectPet() { + var selected: String? = null + composeTestRule.setContent { + PetFilterList( + listPet = pets, + onSelectedPet = { selected = it } + ) + } + + composeTestRule.onNodeWithText("Rex").performClick() + assert(selected == "Rex") + + composeTestRule.onNodeWithText("Rex").performClick() + assert(selected == "") + } + + @Test + fun shouldSelectAllOption() { + var selected: String? = null + composeTestRule.setContent { + PetFilterList( + listPet = pets, + onSelectedPet = { selected = it } + ) + } + + composeTestRule.onNodeWithText("Todos").performClick() + assert(selected == "Todos") + + composeTestRule.onNodeWithText("Todos").performClick() + assert(selected == "") + } + + @Test + fun shouldShowRecurringTaskWhenRecurrentSelected() { + composeTestRule.setContent { + var selectedType: TransactionType? = null + + Column { + TransactionTypeSelector( + onSelectionChanged = { type -> + selectedType = type + } + ) + + when (selectedType) { + TransactionType.Recurrent -> { + RecurringTask( + setOf(), + onAmPmSelector = {}, + onTime = { _, _ -> }, + onWeekDaySelected = {}, + onDaySelected = {} + ) + } + + TransactionType.OneOff -> { + OneOffTask( + onDateSelected = {}, + onAmPmSelector = {}, + onTime = { _, _ -> } + ) + } + + null -> {} + } + } + } + + composeTestRule.onNodeWithText("Recorrente").performClick() + } + + @Test + fun shouldShowOneOffTaskWhenOneOffSelected() { + composeTestRule.setContent { + var selectedType: TransactionType? = null + + Column { + TransactionTypeSelector( + onSelectionChanged = { type -> + selectedType = type + } + ) + + when (selectedType) { + TransactionType.Recurrent -> { + RecurringTask( + setOf(), + onAmPmSelector = {}, + onTime = { _, _ -> }, + onWeekDaySelected = {}, + onDaySelected = {} + ) + } + + TransactionType.OneOff -> { + OneOffTask( + onDateSelected = {}, + onAmPmSelector = {}, + onTime = { _, _ -> } + ) + } + + null -> {} + } + } + } + + composeTestRule.onNodeWithText("Pontual").performClick() + } + + @Test + fun shouldUpdateObservationText() { + composeTestRule.setContent { + val ob = remember { mutableStateOf("") } + + TextFieldCustom( + title = "Observação", + placeholder = "Digite aqui a sua observação", + value = ob.value, + onValueChange = { ob.value = it }, + ) + } + + composeTestRule.onNodeWithText("Digite aqui a sua observação").assertIsDisplayed() + + val text = "Precisa dar o remédio às 14h" + composeTestRule.onNodeWithText("Digite aqui a sua observação").performTextInput(text) + } + +} \ No newline at end of file From f08dcac499a8f095bda6970d840ade6cc08edd39 Mon Sep 17 00:00:00 2001 From: Vinicius Tavares Date: Wed, 22 Oct 2025 14:55:51 -0300 Subject: [PATCH 25/70] Creating TaskState and TaskEvent --- .../petjournal/ui/components/TaskCard.kt | 5 +- .../ui/components/data/TaskTypes.kt | 2 +- .../taskListScreen/TaskListEvent.kt | 6 ++ .../taskListScreen/TaskListState.kt | 13 +++++ .../taskListScreen/TaskListViewModel.kt | 55 +++++++++++++++++++ .../taskListScreen/components/Screen.kt | 3 +- .../domain/model/taskModel/TaskModel.kt | 13 +++++ 7 files changed, 92 insertions(+), 5 deletions(-) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListEvent.kt create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListState.kt create mode 100644 petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt index ce4084fd..19e0637f 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt @@ -37,9 +37,8 @@ import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.soujunior.petjournal.R import com.soujunior.petjournal.ui.components.data.TaskData -import com.soujunior.petjournal.ui.components.data.TaskDummyData +import com.soujunior.petjournal.ui.components.data.TaskFakeData import ir.kaaveh.sdpcompose.sdp import ir.kaaveh.sdpcompose.ssp @@ -217,7 +216,7 @@ fun TaskCard( private fun TaskCardPreview() { Column(Modifier.padding(8.sdp)) { TaskCard( - taskData = TaskDummyData.sampleTasks[0] + taskData = TaskFakeData.sampleTasks[0] ) // TaskCard( // taskData = TaskDummyData.sampleTasks[1] diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskTypes.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskTypes.kt index 9e8cfe48..eeca82e6 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskTypes.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskTypes.kt @@ -102,7 +102,7 @@ data class TaskData( ) // Dados dummy para exemplo/preview -object TaskDummyData { +object TaskFakeData { private val samplePets = listOf( PetData(id = "pet_001"), PetData(id = "pet_002"), diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListEvent.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListEvent.kt new file mode 100644 index 00000000..eb2d160d --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListEvent.kt @@ -0,0 +1,6 @@ +package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen + +sealed class TaskListEvent { + object AddTaskButton : TaskListEvent() + data class onDateFilterChange(val dateFilter: DateFilter) : TaskListEvent() +} \ No newline at end of file diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListState.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListState.kt new file mode 100644 index 00000000..a6a439e0 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListState.kt @@ -0,0 +1,13 @@ +package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen + +import com.soujunior.petjournal.ui.components.data.TaskData + +data class TaskListState ( + val tasks : List = emptyList(), + val selectedDateFilter: DateFilter = DateFilter.DAILY, + val error: String? = null +) + +enum class DateFilter{ + DAILY, WEEKLY, MONTHLY +} \ No newline at end of file diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt index 2cc1ec08..fab04703 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt @@ -1,2 +1,57 @@ package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen +import androidx.lifecycle.ViewModel +import com.soujunior.domain.model.response.GuardianNameResponse +import com.soujunior.petjournal.ui.screens_app.screens_pets.speciesChoiceScreen.PetFormEvent +import com.soujunior.petjournal.ui.screens_app.screens_pets.speciesChoiceScreen.PetFormState +import com.soujunior.petjournal.ui.screens_app.screens_pets.speciesChoiceScreen.ViewModelChoiceSpecies +import com.soujunior.petjournal.ui.states.TaskState +import com.soujunior.petjournal.ui.states._root_ide_package_.com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.TaskListState +import com.soujunior.petjournal.ui.util.ValidationEvent +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.emptyFlow +import kotlinx.coroutines.flow.receiveAsFlow + + +class FakeTaskListViewModel : TaskListViewModel() { + override var state: TaskListState + get() = PetFormState() + set(value) {} + override val validationEventChannel = Channel() + override val validationEvents = emptyFlow() + override fun success(name: GuardianNameResponse) {} + + override val taskState = MutableStateFlow(TaskState.Idle) + + override fun failed(exception: Throwable?) { /* No-op */ + } + + override fun onEvent(event: PetFormEvent) {} + + + override fun enableButton(): Boolean = true + + + override fun change(specieSelected: String?, specieWritten: String?) {} + + override fun savePetInformation(specie: String) {} + +} + +abstract class TaskListViewModel : ViewModel() { + abstract var state: TaskListState + abstract val validationEventChannel: Channel + open val validationEvents: Flow + get() = validationEventChannel.receiveAsFlow() + abstract val taskState: StateFlow + + abstract fun success(name: GuardianNameResponse) + abstract fun failed(exception: Throwable?) + abstract fun onEvent(event: TaskListEvent) + + // visualiza a tarefa baeado em periodos temporais (dia/mes/ano) + // cria tarefa +} \ No newline at end of file diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt index 34cce820..c2285b37 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt @@ -2,8 +2,9 @@ package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.comp import androidx.compose.runtime.Composable import androidx.navigation.NavController +import org.koin.androidx.compose.getViewModel @Composable fun Screen(navController: NavController){ - + val viewModel : TaskListViewModel = getViewModel() } \ No newline at end of file diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt new file mode 100644 index 00000000..9b4f3e18 --- /dev/null +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt @@ -0,0 +1,13 @@ +package com.soujunior.domain.model.taskModel + + +// TODO: Não editar isso enquanto o backend não fornecer um modelo para as tasks. +//data class TaskModel( +// val id: String, +// val titulo: String, +// val descricaoResumida: String, +// val descricaoCompleta: String, +// val dataHora: String, +// val tipo: TaskType, +// val pets: List = emptyList() +//) From ac591c56ec82b6255b486d44a23d15290535f6a4 Mon Sep 17 00:00:00 2001 From: Vinicius Tavares Date: Thu, 23 Oct 2025 14:28:42 -0300 Subject: [PATCH 26/70] Created tabSelector for day/week/month --- .../components/TabSelector.kt | 77 +++++++++++++++++++ .../taskListScreen/TaskListViewModel.kt | 49 ++++++------ .../taskListScreen/components/Screen.kt | 59 +++++++++++++- .../app/src/main/res/values/strings.xml | 4 + 4 files changed, 163 insertions(+), 26 deletions(-) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/TabSelector.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/TabSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/TabSelector.kt new file mode 100644 index 00000000..5328e40d --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/TabSelector.kt @@ -0,0 +1,77 @@ +package com.soujunior.petjournal.ui.screens_app.screens_pets.registerPetScreen.components + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.material3.Text +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Tab +import androidx.compose.material3.TabRow +import androidx.compose.material3.TabRowDefaults +import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.DateFilter +import com.soujunior.petjournal.ui.theme.PetJournalTheme +import com.soujunior.petjournal.R + +@Composable +fun TabSelector( + selectedFilter : DateFilter, + onFilterSelected: (DateFilter) -> Unit, + modifier: Modifier = Modifier +){ + val tabs = listOf( + DateFilter.DAILY, + DateFilter.WEEKLY, + DateFilter.MONTHLY + ) + val selectedIndex = tabs.indexOf(selectedFilter) + TabRow( + selectedTabIndex = selectedIndex, + modifier = modifier, + containerColor = Color.Transparent, + contentColor = MaterialTheme.colorScheme.primary, + indicator = { + tabPositions -> + TabRowDefaults.Indicator( + Modifier.tabIndicatorOffset(tabPositions[selectedIndex]), + color = MaterialTheme.colorScheme.primary + ) + } + ) { + tabs.forEachIndexed { + index, filter -> + Tab( + selected = selectedIndex == index, + onClick = { onFilterSelected(filter)}, + text = { + val textRes = when(filter){ + DateFilter.DAILY -> R.string.daily_tasks + DateFilter.WEEKLY -> R.string.weekly_tasks + DateFilter.MONTHLY -> R.string.monthly_tasks + } + Text( + text = stringResource(id = textRes), + fontWeight = if (selectedIndex == index) FontWeight.Bold else FontWeight.Normal, + color = if (selectedIndex == index) MaterialTheme.colorScheme.primary else Color.Gray + ) + }, + selectedContentColor = MaterialTheme.colorScheme.primary, + unselectedContentColor = Color.Gray + ) + } + } +} + +@Preview +@Composable +fun PreviewTabSelector(){ + TabSelector( + selectedFilter = DateFilter.DAILY, + onFilterSelected = {}, + modifier = Modifier.fillMaxWidth() + ) +} \ No newline at end of file diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt index fab04703..85e4d773 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt @@ -6,7 +6,6 @@ import com.soujunior.petjournal.ui.screens_app.screens_pets.speciesChoiceScreen. import com.soujunior.petjournal.ui.screens_app.screens_pets.speciesChoiceScreen.PetFormState import com.soujunior.petjournal.ui.screens_app.screens_pets.speciesChoiceScreen.ViewModelChoiceSpecies import com.soujunior.petjournal.ui.states.TaskState -import com.soujunior.petjournal.ui.states._root_ide_package_.com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.TaskListState import com.soujunior.petjournal.ui.util.ValidationEvent import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow @@ -16,30 +15,30 @@ import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.receiveAsFlow -class FakeTaskListViewModel : TaskListViewModel() { - override var state: TaskListState - get() = PetFormState() - set(value) {} - override val validationEventChannel = Channel() - override val validationEvents = emptyFlow() - override fun success(name: GuardianNameResponse) {} - - override val taskState = MutableStateFlow(TaskState.Idle) - - override fun failed(exception: Throwable?) { /* No-op */ - } - - override fun onEvent(event: PetFormEvent) {} - - - override fun enableButton(): Boolean = true - - - override fun change(specieSelected: String?, specieWritten: String?) {} - - override fun savePetInformation(specie: String) {} - -} +//class FakeTaskListViewModel : TaskListViewModel() { +// override var state: TaskListState +// get() = PetFormState() +// set(value) {} +// override val validationEventChannel = Channel() +// override val validationEvents = emptyFlow() +// override fun success(name: GuardianNameResponse) {} +// +// override val taskState = MutableStateFlow(TaskState.Idle) +// +// override fun failed(exception: Throwable?) { /* No-op */ +// } +// +// override fun onEvent(event: PetFormEvent) {} +// +// +// override fun enableButton(): Boolean = true +// +// +// override fun change(specieSelected: String?, specieWritten: String?) {} +// +// override fun savePetInformation(specie: String) {} +// +//} abstract class TaskListViewModel : ViewModel() { abstract var state: TaskListState diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt index c2285b37..53f6408d 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt @@ -1,10 +1,67 @@ package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.components +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.sp import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import com.soujunior.petjournal.R +import com.soujunior.petjournal.ui.components.NavigationBar +import com.soujunior.petjournal.ui.components.ScaffoldCustom +import com.soujunior.petjournal.ui.screens_app.screens_pets.registerPetScreen.components.TabSelector +import com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.DateFilter +import com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.TaskListViewModel +import com.soujunior.petjournal.ui.theme.RobotoRegular +import ir.kaaveh.sdpcompose.sdp +import ir.kaaveh.sdpcompose.ssp import org.koin.androidx.compose.getViewModel @Composable fun Screen(navController: NavController){ - val viewModel : TaskListViewModel = getViewModel() +// val viewModel : TaskListViewModel = getViewModel() + Column (modifier = Modifier){ + ScaffoldCustom( + modifier = Modifier, + navigationUp = navController, + showBottomBarNavigation = true, + bottomNavigationBar = { NavigationBar(navController) }, + contentToUse = { + Column(modifier = Modifier.padding(16.sdp)){ + + Text(text = stringResource(R.string.next_tasks), + fontSize = 16.ssp, + lineHeight = 24.ssp, + fontFamily = FontFamily(RobotoRegular), + fontWeight = FontWeight(400), + color = Color(0xFF222222), + textAlign = TextAlign.Center) + + TabSelector( + selectedFilter = DateFilter.DAILY, + onFilterSelected = {}, + modifier = Modifier.fillMaxWidth().padding(top = 16.sdp) + ) + + } + } + ) + + } +} + +@Composable +@Preview +private fun ScreenPreview(){ + val nav = rememberNavController() + Screen(nav) } \ No newline at end of file diff --git a/petJournal/app/src/main/res/values/strings.xml b/petJournal/app/src/main/res/values/strings.xml index be1d9d82..2337ab98 100644 --- a/petJournal/app/src/main/res/values/strings.xml +++ b/petJournal/app/src/main/res/values/strings.xml @@ -159,4 +159,8 @@ Ir para a HomePage AM PM + Próximas tarefas + Diárias + Semanais + Mensais \ No newline at end of file From 98135aa17f3788b6fbd545af55f93231e0b4df48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:20:56 -0400 Subject: [PATCH 27/70] Refactor: Update color theme for transaction type button --- .../src/main/java/com/soujunior/petjournal/ui/theme/Color.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt index 8fcf6daa..02768d65 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt @@ -95,7 +95,6 @@ object ColorCustom { val color_border_pet_icon = Color(0xFF9C4DCC) val color_title_pet_icon = Color(0xFF222222) val color_placeholder = Color(0xFFCCCCCC) - val color_shadow_dialog = Color(0x4D000000) - val color_border_dialog = Color(0xFF8D4CD2) - val color_background_button_dialog = Color(0xFF9C4DFF) + val color_text_button_transaction_type = Color(0xFF8dD4CD2) + val color_border_button_transaction_type = Color(0xFFA2A9B1) } \ No newline at end of file From 6cd5d547e2bce5fa4ed48d542bb048328f04a642 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:22:27 -0400 Subject: [PATCH 28/70] Refactor: Improve InputText component styling This commit refactors the `InputText` composable: - Updates padding from `16.sdp` to `16.dp`. - Modifies `titleText` styling: - Removes explicit `start` and `end` padding. - Changes text style from `MaterialTheme.typography.bodyMedium` to `MaterialTheme.typography.titleMedium`. - Adjusts `placeholderText` styling: - Sets text color to `ColorCustom.color_placeholder`. - Changes text style from a custom `TextStyle` to `MaterialTheme.typography.bodyMedium`. --- .../petjournal/ui/components/InputText.kt | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt index 0f8ab0ff..7e210fdb 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt @@ -40,7 +40,6 @@ import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp import com.soujunior.petjournal.R import com.soujunior.petjournal.ui.theme.ColorCustom import com.soujunior.petjournal.ui.theme.ColorGrid @@ -64,17 +63,16 @@ fun InputText( ) { var showPassword by remember { mutableStateOf(false) } - Column(modifier = modifier.padding(top = 16.sdp)) { + Column(modifier = modifier.padding(16.dp)) { Row { Text( text = titleText, textAlign = TextAlign.Start, color = MaterialTheme.colorScheme.scrim, - style = MaterialTheme.typography.bodyMedium, fontWeight = FontWeight(500), + style = MaterialTheme.typography.titleMedium, modifier = modifier .fillMaxWidth() - .padding(start = 24.sdp, end = 24.sdp) ) } Row { @@ -134,12 +132,8 @@ fun InputText( if (textValue.isEmpty() && !hasAMask) { Text( text = placeholderText, - style = TextStyle( - fontSize = 14.sp, - lineHeight = 21.sp, - fontWeight = FontWeight(300), - color = MaterialTheme.colorScheme.scrim, - ) + color = ColorCustom.color_placeholder, + style = MaterialTheme.typography.bodyMedium ) } } From fca4ac25fa1418269a1a25bdfdbdbcd826fadaf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:23:24 -0400 Subject: [PATCH 29/70] Refactor: adjust PetSelectorItem component --- .../ui/components/PetSelectorItem.kt | 84 +++++++++++-------- 1 file changed, 47 insertions(+), 37 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt index 7a2e0e89..2c4eaa32 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt @@ -56,7 +56,7 @@ fun PetIcon( ambientColor = ColorCustom.color_spot_pet_icon ) .padding(1.dp) - .size(66.dp) + .size(55.dp) .background( color = backgroundColor, shape = RoundedCornerShape(8.dp) @@ -160,46 +160,56 @@ fun PetFilterList( var selectedPets by remember { mutableStateOf(listOf()) } - LazyRow( - modifier = Modifier - .fillMaxWidth() - .padding(top = 20.dp), - horizontalArrangement = Arrangement.spacedBy(8.dp) - ) { - item { - PetFilterItem( - name = "Todos", - isSelected = selectedPets.contains(stringResource(R.string.label_all_pets)), - imageRes = null, - onSelect = { name -> - selectedPets = if (selectedPets.contains(name)) { - selectedPets - name - } else { - selectedPets + name + Column(modifier = Modifier.padding(16.dp)) { + Text( + text = "Quais pets precisam dessa tarefa?", + color = MaterialTheme.colorScheme.scrim, + fontWeight = FontWeight(500), + style = MaterialTheme.typography.titleMedium + ) + + LazyRow( + modifier = Modifier + .fillMaxWidth() + .padding(top = 20.dp, start = 10.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + item { + PetFilterItem( + name = "Todos", + isSelected = selectedPets.contains(stringResource(R.string.label_all_pets)), + imageRes = null, + onSelect = { name -> + selectedPets = if (selectedPets.contains(name)) { + selectedPets - name + } else { + selectedPets + name + } + onSelectedPet(if (selectedPets.contains(name)) name else "") } - onSelectedPet(if (selectedPets.contains(name)) name else "") - } - ) - } - items( - items = listPet, - key = { it.id } - ) { item -> - PetFilterItem( - name = item.name!!, - isSelected = selectedPets.contains(item.name), - imageRes = item.imageRes, - onSelect = { name -> - selectedPets = if (selectedPets.contains(name)) { - selectedPets - name - } else { - selectedPets + name + ) + } + items( + items = listPet, + key = { it.id } + ) { item -> + PetFilterItem( + name = item.name!!, + isSelected = selectedPets.contains(item.name), + imageRes = item.imageRes, + onSelect = { name -> + selectedPets = if (selectedPets.contains(name)) { + selectedPets - name + } else { + selectedPets + name + } + onSelectedPet(if (selectedPets.contains(name)) name else "") } - onSelectedPet(if (selectedPets.contains(name)) name else "") - } - ) + ) + } } } + } @Preview(showBackground = true, showSystemUi = false, device = "id:pixel_4_xl") From 4f3291a0e756d67c5b69cca6bc06d1330ab71abe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:23:56 -0400 Subject: [PATCH 30/70] feat: create RegisterTaskScreen --- .../registerTaskScreen/RegisterTaskScreen.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/RegisterTaskScreen.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/RegisterTaskScreen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/RegisterTaskScreen.kt new file mode 100644 index 00000000..f5987a1b --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/RegisterTaskScreen.kt @@ -0,0 +1,10 @@ +package com.soujunior.petjournal.ui.screens_app.screens_pets.registerTaskScreen + +import androidx.compose.runtime.Composable +import androidx.navigation.NavController +import com.soujunior.petjournal.ui.screens_app.screens_pets.registerTaskScreen.components.ScreenRegisterTask + +@Composable +fun RegisterTaskScreen(navController: NavController) { + ScreenRegisterTask(navController) +} \ No newline at end of file From 80c7e49eada4dd9d09b8425f8832c00540374edf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:24:29 -0400 Subject: [PATCH 31/70] feat: Create TransactionTypeSelector component --- .../ui/components/TransactionTypeSelector.kt | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt new file mode 100644 index 00000000..b8f49ada --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt @@ -0,0 +1,146 @@ +package com.soujunior.petjournal.ui.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +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.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.soujunior.petjournal.R +import com.soujunior.petjournal.ui.theme.ColorCustom +import com.soujunior.petjournal.ui.util.TransactionType + +@Composable +fun TransactionTypeSelector( + onSelectionChanged: (TransactionType?) -> Unit +) { + var selectedType by remember { mutableStateOf(null) } + + val selectedColor = ColorCustom.color_background_month_disabled + val unselectedColor = MaterialTheme.colorScheme.background + val borderColor = ColorCustom.color_border_button_transaction_type + + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.fillMaxWidth() + ) { + Row( + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.padding(16.dp) + ) { + ToggleButton( + text = stringResource(R.string.label_recurrent), + isSelected = selectedType == TransactionType.Recurrent, + onClick = { + val newType = TransactionType.Recurrent + selectedType = newType + onSelectionChanged(newType) + }, + selectedColor = selectedColor, + unselectedColor = unselectedColor, + borderColor = if (selectedType == TransactionType.Recurrent) selectedColor else borderColor + ) + + ToggleButton( + text = stringResource(R.string.label_one_off), + isSelected = selectedType == TransactionType.OneOff, + onClick = { + val newType = TransactionType.OneOff + selectedType = newType + onSelectionChanged(newType) + }, + selectedColor = selectedColor, + unselectedColor = unselectedColor, + borderColor = if (selectedType == TransactionType.OneOff) selectedColor else borderColor + ) + } + + if (selectedType == TransactionType.Recurrent) { + onSelectionChanged(selectedType) + } else { + onSelectionChanged(selectedType) + } + } +} + +@Composable +fun ToggleButton( + text: String, + isSelected: Boolean, + onClick: () -> Unit, + selectedColor: Color, + unselectedColor: Color, + borderColor: Color +) { + val backgroundColor = if (isSelected) selectedColor else unselectedColor + + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .width(150.dp) + .clip(RoundedCornerShape(50)) + .border(1.dp, borderColor, RoundedCornerShape(50)) + .background(backgroundColor) + .clickable { onClick() } + .padding(horizontal = 24.dp, vertical = 12.dp) + ) { + Text( + text = text, + color = ColorCustom.color_text_button_transaction_type, + style = MaterialTheme.typography.titleMedium, + ) + } +} + +@Preview(showBackground = true) +@Composable +fun TransactionTypeSelectorPreview() { + TransactionTypeSelector( + onSelectionChanged = {} + ) +} + +@Preview(showBackground = true) +@Composable +fun ToggleButtonPreview() { + Column(modifier = Modifier.padding(16.dp)) { + ToggleButton( + text = stringResource(R.string.label_recurrent), + isSelected = true, + onClick = {}, + selectedColor = ColorCustom.color_background_month_disabled, + unselectedColor = MaterialTheme.colorScheme.background, + borderColor = ColorCustom.color_border_button_transaction_type + ) + + ToggleButton( + text = stringResource(R.string.label_one_off), + isSelected = false, + onClick = {}, + selectedColor = ColorCustom.color_background_month_disabled, + unselectedColor = MaterialTheme.colorScheme.background, + borderColor = ColorCustom.color_border_button_transaction_type + ) + } + +} \ No newline at end of file From 66e9541c0ef092a2ea8a5d81955af13b940fb36b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:24:50 -0400 Subject: [PATCH 32/70] feat: Create TransactionType enum --- .../java/com/soujunior/petjournal/ui/util/TransactionType.kt | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/TransactionType.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/TransactionType.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/TransactionType.kt new file mode 100644 index 00000000..0a632ab5 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/TransactionType.kt @@ -0,0 +1,5 @@ +package com.soujunior.petjournal.ui.util + +enum class TransactionType { + Recurrent, OneOff +} \ No newline at end of file From 47bcb1c420548c678d928cfcc917e1bd1a8ec816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:25:07 -0400 Subject: [PATCH 33/70] Refactor: Rename DescriptionTextField to TextFieldCustom --- ...riptionTextField.kt => TextFieldCustom.kt} | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) rename petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/{DescriptionTextField.kt => TextFieldCustom.kt} (83%) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DescriptionTextField.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt similarity index 83% rename from petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DescriptionTextField.kt rename to petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt index e018df07..91c2864c 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DescriptionTextField.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt @@ -13,15 +13,15 @@ import androidx.compose.material3.OutlinedTextFieldDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.soujunior.petjournal.R import com.soujunior.petjournal.ui.theme.ColorCustom @Composable -fun DescriptionTextField( +fun TextFieldCustom( + title:String, + placeholder:String, value: String, onValueChange: (String) -> Unit, modifier: Modifier = Modifier @@ -31,8 +31,9 @@ fun DescriptionTextField( .padding(16.dp) ) { Text( - text = stringResource(R.string.label_description), - fontWeight = FontWeight.Bold, + text = title, + color = MaterialTheme.colorScheme.scrim, + fontWeight = FontWeight(500), style = MaterialTheme.typography.titleMedium, ) @@ -43,9 +44,9 @@ fun DescriptionTextField( onValueChange = onValueChange, placeholder = { Text( - text = stringResource(R.string.enter_the_task_description_here), + text = placeholder, color = ColorCustom.color_placeholder, - style = MaterialTheme.typography.bodySmall + style = MaterialTheme.typography.bodyMedium ) }, modifier = Modifier @@ -64,7 +65,9 @@ fun DescriptionTextField( @Preview @Composable fun DescriptionTextFieldPreview() { - DescriptionTextField( + TextFieldCustom( + title = "Título", + placeholder = "Descrição", value = "", onValueChange = {} ) From e37e6c849f7f1c38758dce7bcf6433269d14e719 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:25:22 -0400 Subject: [PATCH 34/70] Refactor: Remove redundant strings and add recurrence strings # Conflicts: # petJournal/app/src/main/res/values/strings.xml --- petJournal/app/src/main/res/values/strings.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/petJournal/app/src/main/res/values/strings.xml b/petJournal/app/src/main/res/values/strings.xml index be1d9d82..ddbe6fea 100644 --- a/petJournal/app/src/main/res/values/strings.xml +++ b/petJournal/app/src/main/res/values/strings.xml @@ -145,6 +145,8 @@ Ração Passeio Essa tarefa é... + Tarefa adicionada\ncom sucesso! + Nova tarefa Ativo nos meses Todos Descrição @@ -154,9 +156,9 @@ Abrir Calendário 00/00/0000 dd/MM/yyyy - Tarefa adicionada\ncom sucesso! - Nova tarefa Ir para a HomePage AM PM + Recorrente + Pontual \ No newline at end of file From 3ce4e77635e83c3adb85cb2b02d42f25586c70a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:25:38 -0400 Subject: [PATCH 35/70] Refactor: Adjust SelectableButton layout and style --- .../ui/components/SelectableButtonData.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt index 8eb8733c..740815ea 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt @@ -40,8 +40,7 @@ fun SelectableButton( ) { androidx.compose.material3.Button( modifier = modifierSelectableButton - .height(70.dp) - .padding(top = 15.dp, end = 15.dp, bottom = 15.dp) + .height(40.dp) .then( if (isSelected) { Modifier.shadow( @@ -120,14 +119,16 @@ fun GroupSelectableButton( ) { Text( text = stringResource(R.string.label_select_main_category), - style = MaterialTheme.typography.titleLarge, + style = MaterialTheme.typography.titleMedium, color = MaterialTheme.colorScheme.scrim, fontWeight = FontWeight(500), lineHeight = 24.sp ) FlowRow( - modifier = Modifier.fillMaxWidth() + modifier = Modifier + .fillMaxWidth() + .padding(top = 15.dp) ) { buttons.forEachIndexed { index, buttonInfo -> SelectableButton( @@ -142,7 +143,9 @@ fun GroupSelectableButton( onSelection("") } }, - modifierSelectableButton = Modifier.adaptiveWidthForTitle(buttonInfo.title) + modifierSelectableButton = Modifier + .adaptiveWidthForTitle(buttonInfo.title) + .padding(bottom = 15.dp, end = 15.dp) ) } } From 6bbc63c77d23a87c0f506f09453cb46baebc1540 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:25:57 -0400 Subject: [PATCH 36/70] feat: Create ScreenRegisterTask screen This commit introduces the `ScreenRegisterTask` composable, a new screen for registering tasks within the application. Key changes include: - Addition of `ScreenRegisterTask.kt` file. - Implementation of the `ScreenRegisterTask` composable function, which includes: - A `ScaffoldCustom` for the basic screen structure with a top app bar titled "Nova tarefa" (New Task) and bottom navigation. - A `LazyColumn` to display various input fields and components for task registration. - `InputText` for the task name. - `TextFieldCustom` for the task description and an observation field. - `GroupSelectableButton` (functionality not fully detailed in the diff). - `PetFilterList` to select a pet associated with the task. - `TransactionTypeSelector` to choose between recurrent and one-off task types. - A `@Preview` function `ScreenRegisterTaskPreview` is included for UI development and testing. --- .../components/ScreenRegisterTask.kt | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt new file mode 100644 index 00000000..ae84a260 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt @@ -0,0 +1,125 @@ +package com.soujunior.petjournal.ui.screens_app.screens_pets.registerTaskScreen.components + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import com.soujunior.petjournal.R +import com.soujunior.petjournal.ui.components.GroupSelectableButton +import com.soujunior.petjournal.ui.components.InputText +import com.soujunior.petjournal.ui.components.PetFilterList +import com.soujunior.petjournal.ui.components.Pets +import com.soujunior.petjournal.ui.components.ScaffoldCustom +import com.soujunior.petjournal.ui.components.TextFieldCustom +import com.soujunior.petjournal.ui.components.TransactionTypeSelector +import com.soujunior.petjournal.ui.util.TransactionType + +@Composable +fun ScreenRegisterTask(navController: NavController) { + + val listPet = listOf( + Pets( + id = 1, + imageRes = painterResource(R.drawable.image_jujuba), + name = "Jujuba" + ), + Pets( + id = 2, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ) + ) + + val nameTask = remember { mutableStateOf("") } + val desc = remember { mutableStateOf("") } + var selectedType by remember { mutableStateOf(null) } + + Column(modifier = Modifier) { + ScaffoldCustom( + modifier = Modifier, + navigationUp = navController, + showTopBar = true, + titleTopBar = stringResource(R.string.label_new_task), + showBottomBarNavigation = true, + contentToUse = { + LazyColumn( + contentPadding = it, + content = { + item { + GroupSelectableButton() + } + item { + InputText( + modifier = Modifier, + placeholderText = "Digite aqui o nome da tarefa", + titleText = "Nome da tarefa", + textValue = nameTask.value, + onEvent = { t -> + nameTask.value = t + }, + ) + } + item { + TextFieldCustom( + title = stringResource(R.string.label_description), + placeholder = stringResource(R.string.enter_the_task_description_here), + value = desc.value, + onValueChange = { d -> + desc.value = d + } + ) + } + item { + PetFilterList( + listPet, + onSelectedPet = {} + ) + } + item { + Column { + TransactionTypeSelector( + onSelectionChanged = { type -> + selectedType = type + } + ) + + when (selectedType) { + TransactionType.Recurrent -> Text(text = "Recorrente") + TransactionType.OneOff -> Text(text = "Pontual") + null -> {} + } + } + } + item { + TextFieldCustom( + title = "Observação", + placeholder = "Digite aqui a sua observação", + value = desc.value, + onValueChange = { d -> + desc.value = d + } + ) + } + } + ) + } + ) + } +} + +@Preview(showBackground = true, showSystemUi = true, device = "id:pixel_4_xl") +@Composable +fun ScreenRegisterTaskPreview() { + val nav = rememberNavController() + ScreenRegisterTask(nav) +} \ No newline at end of file From 877916d76d50ab94619eac96ab2cdc11cd69e8d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 2 Aug 2025 15:26:16 -0400 Subject: [PATCH 37/70] feat: integrate ScreenRegisterTask into MainActivity --- .../com/soujunior/petjournal/navigation/MainActivity.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/MainActivity.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/MainActivity.kt index e4db3ebb..65eed297 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/MainActivity.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/MainActivity.kt @@ -7,8 +7,9 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect import androidx.compose.ui.graphics.Color import androidx.core.view.WindowCompat +import androidx.navigation.compose.rememberNavController import com.google.accompanist.systemuicontroller.rememberSystemUiController -import com.soujunior.petjournal.ui.components.ActiveMonthsComponent +import com.soujunior.petjournal.ui.screens_app.screens_pets.registerTaskScreen.components.ScreenRegisterTask import com.soujunior.petjournal.ui.theme.PetJournalTheme class MainActivity : ComponentActivity() { @@ -18,7 +19,8 @@ class MainActivity : ComponentActivity() { setContent { ChangeSystemBars() // PresentationManager() - ActiveMonthsComponent(activeMonths = setOf("Jan", "Mar", "Mai")) + val nav = rememberNavController() + ScreenRegisterTask(nav) } } } From b297eb557f001ba2bb487b41e32ddcc7e8186a8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:09:10 -0400 Subject: [PATCH 38/70] feat: Add unfocused color for WheelTimePicker --- .../app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt index 02768d65..dff0a3be 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt @@ -97,4 +97,5 @@ object ColorCustom { val color_placeholder = Color(0xFFCCCCCC) val color_text_button_transaction_type = Color(0xFF8dD4CD2) val color_border_button_transaction_type = Color(0xFFA2A9B1) + val color_unfocused_wheelTimePicker = Color(0xFFDADADA) } \ No newline at end of file From 58179ea965e53dc68f00b124fed5442ee9006860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:10:23 -0400 Subject: [PATCH 39/70] feat: Create DayPicker composable --- .../ui/components/data/DayPicker.kt | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/DayPicker.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/DayPicker.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/DayPicker.kt new file mode 100644 index 00000000..a5e3d4a4 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/DayPicker.kt @@ -0,0 +1,98 @@ +package com.soujunior.petjournal.ui.components.data + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import kotlinx.coroutines.flow.distinctUntilChanged +import java.time.LocalDate + +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun DayPicker( + onDaySelected: (Int) -> Unit +) { + val currentDate = remember { LocalDate.now() } + val totalDays = remember { currentDate.lengthOfMonth() } + + val days = remember { (1..totalDays).toList() } + + val listState = rememberLazyListState(initialFirstVisibleItemIndex = currentDate.dayOfMonth - 1) + + val flingBehavior = rememberSnapFlingBehavior(lazyListState = listState) + + LaunchedEffect(listState) { + snapshotFlow { listState.firstVisibleItemIndex } + .distinctUntilChanged() + .collect { index -> + onDaySelected(days.getOrNull(index + 1) ?: days.last()) + } + } + + Column( + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text(text = "DIA", style = MaterialTheme.typography.bodySmall) + + Box( + modifier = Modifier + .height(120.dp) + .width(60.dp), + contentAlignment = Alignment.Center + ) { + LazyColumn( + state = listState, + flingBehavior = flingBehavior, + contentPadding = PaddingValues(vertical = 40.dp), + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.fillMaxHeight() + ) { + itemsIndexed(days) { index, day -> + val isSelected = listState.firstVisibleItemIndex == index + Text( + text = day.toString(), + fontSize = if (isSelected) 26.sp else 20.sp, + color = if (isSelected) Color.Black else Color.LightGray, + fontWeight = if (isSelected) FontWeight.Bold else FontWeight.Normal, + modifier = Modifier.padding(vertical = 4.dp) + ) + } + } + } + } +} + + +@Preview +@Composable +fun DayPickerPreview(){ + var selectedDay by remember { mutableStateOf(LocalDate.now().dayOfMonth) } + + DayPicker( + onDaySelected = { selectedDay = it } + ) +} \ No newline at end of file From b79d4d1da5c763e2ce501c329beea98ddc0fbf02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:10:44 -0400 Subject: [PATCH 40/70] feat: Create OneOffTask composable --- .../ui/components/task/OneOffTask.kt | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/OneOffTask.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/OneOffTask.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/OneOffTask.kt new file mode 100644 index 00000000..3edf7ff7 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/OneOffTask.kt @@ -0,0 +1,51 @@ +package com.soujunior.petjournal.ui.components.task + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.soujunior.petjournal.ui.components.clock.TimePickerWithPeriodSelector +import com.soujunior.petjournal.ui.components.data.CustomDatePicker + +@Composable +fun OneOffTask( + onDateSelected: (Long?) -> Unit = {}, + onAmPmSelector: (String?) -> Unit = {}, + onTime: (Int, Int) -> Unit = { _, _ -> } +) { + var selectedTimestamp by remember { mutableStateOf(null) } + + Column(modifier = Modifier.padding(start = 20.dp, end = 20.dp)) { + CustomDatePicker( + label = "Data", + value = selectedTimestamp, + onValueChange = { + selectedTimestamp = it + onDateSelected(selectedTimestamp) + }, + modifier = Modifier.fillMaxWidth() + ) + + TimePickerWithPeriodSelector( + onAmPmSelector = { amPmSelector -> + onAmPmSelector(amPmSelector) + }, + onTime = { hour, minute -> + onTime(hour, minute) + } + ) + } +} + +@Preview(showBackground = true) +@Composable +fun OneOffTaskPreview() { + OneOffTask() +} \ No newline at end of file From f80dfe965d5d79bc96a46f36f8a5205ad1be79c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:11:07 -0400 Subject: [PATCH 41/70] feat: Create PeriodSelector composable --- .../ui/components/PeriodSelector.kt | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PeriodSelector.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PeriodSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PeriodSelector.kt new file mode 100644 index 00000000..f20a537e --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PeriodSelector.kt @@ -0,0 +1,90 @@ +package com.soujunior.petjournal.ui.components + +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +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.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Path +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.soujunior.petjournal.ui.util.SelectedPeriodType + +@Composable +fun PeriodSelector( + selected: SelectedPeriodType, + onSelectionChanged: (SelectedPeriodType) -> Unit +) { + val items = listOf(SelectedPeriodType.Diária, SelectedPeriodType.Semanal, SelectedPeriodType.Mensal) + + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceEvenly + ) { + items.forEach { item -> + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .clickable { onSelectionChanged(item) } + .padding(horizontal = 8.dp) + ) { + Text( + text = item.name, + style = MaterialTheme.typography.bodyMedium, + color = if (selected == item) Color(0xFF8D4CD2) else Color.Black, + ) + if (selected == item) { + TriangleIndicator() + } else { + Spacer(modifier = Modifier.height(6.dp)) + } + } + } + } +} + +@Composable +fun TriangleIndicator( + color: Color = Color(0xFF8D4CD2), + modifier: Modifier = Modifier + .width(60.dp) + .height(2.dp) +) { + Canvas(modifier = modifier) { + val width = size.width + val height = size.height + + val inset = width * 0.1f + + val path = Path().apply { + moveTo(inset, 0f) + lineTo(width - inset, 0f) + lineTo(width, height) + lineTo(0f, height) + close() + } + + drawPath(path = path, color = color) + } +} + + +@Preview(showBackground = true) +@Composable +fun PeriodSelectorPreview() { + var selectedPeriod = SelectedPeriodType.Diária + PeriodSelector(selected = selectedPeriod) { + selectedPeriod = it + } +} \ No newline at end of file From ceefb67a52d855281fcb9bc8ea2b2773ab104e95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:11:26 -0400 Subject: [PATCH 42/70] feat: Create RecurringTask composable --- .../ui/components/task/RecurrentTask.kt | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/RecurrentTask.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/RecurrentTask.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/RecurrentTask.kt new file mode 100644 index 00000000..df35b3d9 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/RecurrentTask.kt @@ -0,0 +1,135 @@ +package com.soujunior.petjournal.ui.components.task + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +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.runtime.Composable +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.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.soujunior.petjournal.ui.components.ActiveMonthsComponent +import com.soujunior.petjournal.ui.components.AmPmSelector +import com.soujunior.petjournal.ui.components.PeriodSelector +import com.soujunior.petjournal.ui.components.WeekDaySelector +import com.soujunior.petjournal.ui.components.clock.TimePickerWithPeriodSelector +import com.soujunior.petjournal.ui.components.clock.WheelTimePicker +import com.soujunior.petjournal.ui.components.data.DayPicker +import com.soujunior.petjournal.ui.util.SelectedPeriodType + +@Composable +fun RecurringTask( + activeMonths: Set = setOf(), + onAmPmSelector: (String?) -> Unit = {}, + onTime: (Int?, Int?) -> Unit = { _, _ -> }, + onWeekDaySelected: (String?) -> Unit = {}, + onDaySelected: (Int?) -> Unit = {}, +) { + var selectedPeriod by remember { mutableStateOf(SelectedPeriodType.Diária) } + PeriodSelector( + selected = selectedPeriod, + onSelectionChanged = { selectedPeriod = it } + ) + + when (selectedPeriod) { + SelectedPeriodType.Diária -> { + TimePickerWithPeriodSelector( + onAmPmSelector = { amPmSelector -> + onAmPmSelector(amPmSelector) + }, + onTime = { hour, minute -> + onTime(hour, minute) + } + ) + } + + SelectedPeriodType.Semanal -> { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically + ) { + + WeekDaySelector( + onDaySelected = { weekDaySelected -> + onWeekDaySelected(weekDaySelected) + } + ) + + AmPmSelector( + onPeriodSelected = { amPmSelector -> + onAmPmSelector(amPmSelector) + } + ) + Box( + modifier = Modifier + .padding(start = 8.dp) + .height(150.dp) + .width(100.dp), + contentAlignment = Alignment.Center + ) { + WheelTimePicker( + onTimeChanged = { hour, minute -> + onTime(hour, minute) + } + ) + } + } + } + + SelectedPeriodType.Mensal -> { + Column { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically + ) { + + DayPicker( + onDaySelected = { daySelected -> + onDaySelected(daySelected) + } + ) + AmPmSelector( + onPeriodSelected = { amPmSelector -> + onAmPmSelector(amPmSelector) + } + ) + Box( + modifier = Modifier + .height(150.dp) + .width(100.dp), + contentAlignment = Alignment.Center + ) { + WheelTimePicker( + onTimeChanged = { hour, minute -> + onTime(hour, minute) + } + ) + } + } + ActiveMonthsComponent(activeMonths = activeMonths) + } + + } + } +} + +@Preview(showBackground = true) +@Composable +fun RecurringTaskPreview() { + RecurringTask() +} \ No newline at end of file From f2b51ba92a80238f9627964e9860a215ae095886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:11:44 -0400 Subject: [PATCH 43/70] Refactor: Make GroupSelectableButton dynamic --- .../ui/components/SelectableButtonData.kt | 59 ++++++++++--------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt index 740815ea..7924a58c 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt @@ -81,36 +81,11 @@ fun SelectableButton( @OptIn(ExperimentalLayoutApi::class) @Composable fun GroupSelectableButton( + listOfTasks: List, onSelection: (String) -> Unit = {} ) { - val buttons = listOf( - SelectableButtonInfo( - stringResource(R.string.label_selectable_button_vaccines), - ColorCustom.color_selectable_button_1 - ), - SelectableButtonInfo( - stringResource(R.string.label_selectable_button_consultations), - ColorCustom.color_selectable_button_2 - ), - SelectableButtonInfo( - stringResource(R.string.label_selectable_button_medicine), - ColorCustom.color_selectable_button_3 - ), - SelectableButtonInfo( - stringResource(R.string.label_selectable_button_bath), - ColorCustom.color_selectable_button_4 - ), - SelectableButtonInfo( - stringResource(R.string.label_selectable_button_food), - ColorCustom.color_selectable_button_5 - ), - SelectableButtonInfo( - stringResource(R.string.label_selectable_button_pet_walk), - ColorCustom.color_selectable_button_6 - ), - ) - val selectionState = remember { mutableStateListOf(*Array(buttons.size) { false }) } + val selectionState = remember { mutableStateListOf(*Array(listOfTasks.size) { false }) } Column( modifier = Modifier @@ -130,7 +105,7 @@ fun GroupSelectableButton( .fillMaxWidth() .padding(top = 15.dp) ) { - buttons.forEachIndexed { index, buttonInfo -> + listOfTasks.forEachIndexed { index, buttonInfo -> SelectableButton( titleButton = buttonInfo.title, colorButton = buttonInfo.color, @@ -162,5 +137,31 @@ data class SelectableButtonInfo( @Preview(showBackground = true, showSystemUi = true, device = "id:pixel_4_xl") @Composable fun CustomSelectableButtonPreview() { - GroupSelectableButton() + val listOfTasks = listOf( + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_vaccines), + ColorCustom.color_selectable_button_1 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_consultations), + ColorCustom.color_selectable_button_2 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_medicine), + ColorCustom.color_selectable_button_3 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_bath), + ColorCustom.color_selectable_button_4 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_food), + ColorCustom.color_selectable_button_5 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_pet_walk), + ColorCustom.color_selectable_button_6 + ), + ) + GroupSelectableButton(listOfTasks) } \ No newline at end of file From 1cc96ba92a00a74ace6ccb20c12899213edf5426 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:12:00 -0400 Subject: [PATCH 44/70] feat: Add SelectedPeriodType enum --- .../com/soujunior/petjournal/ui/util/SelectedPeriodType.kt | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/SelectedPeriodType.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/SelectedPeriodType.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/SelectedPeriodType.kt new file mode 100644 index 00000000..3fa0a40e --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/SelectedPeriodType.kt @@ -0,0 +1,5 @@ +package com.soujunior.petjournal.ui.util + +enum class SelectedPeriodType { + Diária, Semanal, Mensal +} \ No newline at end of file From ba315cbbe1b1724e330c467f1416fb2cbc33c1f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:12:25 -0400 Subject: [PATCH 45/70] Refactor: Update TextFieldCustom padding and add new string resources --- .../soujunior/petjournal/ui/components/TextFieldCustom.kt | 2 +- petJournal/app/src/main/res/values/strings.xml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt index 91c2864c..d8318f72 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt @@ -28,7 +28,7 @@ fun TextFieldCustom( ) { Column( modifier = modifier - .padding(16.dp) + .padding(start = 16.dp, end = 16.dp) ) { Text( text = title, diff --git a/petJournal/app/src/main/res/values/strings.xml b/petJournal/app/src/main/res/values/strings.xml index ddbe6fea..631122de 100644 --- a/petJournal/app/src/main/res/values/strings.xml +++ b/petJournal/app/src/main/res/values/strings.xml @@ -161,4 +161,10 @@ PM Recorrente Pontual + Data + Digite aqui o nome da tarefa + Nome da tarefa + Observação + Digite aqui a sua observação + Salvar \ No newline at end of file From 4ea5e675e23ef42ef43e2d4d4080a312b401f969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:12:42 -0400 Subject: [PATCH 46/70] feat: Create TimePickerWithPeriodSelector Composable --- .../clock/TimePickerWithPeriodSelector.kt | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/TimePickerWithPeriodSelector.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/TimePickerWithPeriodSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/TimePickerWithPeriodSelector.kt new file mode 100644 index 00000000..32ead607 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/TimePickerWithPeriodSelector.kt @@ -0,0 +1,47 @@ +package com.soujunior.petjournal.ui.components.clock + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +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.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.soujunior.petjournal.ui.components.AmPmSelector + +@Composable +fun TimePickerWithPeriodSelector( + onAmPmSelector: (String) -> Unit, + onTime: (Int, Int) -> Unit +) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically + ) { + AmPmSelector( + onPeriodSelected = { periodSelected -> + onAmPmSelector(periodSelected) + } + ) + Box( + modifier = Modifier + .padding(start = 8.dp) + .height(150.dp) + .width(100.dp), + contentAlignment = Alignment.Center + ) { + WheelTimePicker( + onTimeChanged = { hour, minute -> + onTime(hour, minute) + } + ) + } + } +} \ No newline at end of file From dcb9f30f4b3b124fcebec3ee2802963e9b56df77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:12:57 -0400 Subject: [PATCH 47/70] Refactor: Adjust TransactionTypeSelector button size --- .../petjournal/ui/components/TransactionTypeSelector.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt index b8f49ada..fbdacd92 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt @@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row 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 @@ -97,7 +98,7 @@ fun ToggleButton( Box( contentAlignment = Alignment.Center, modifier = Modifier - .width(150.dp) + .width(130.dp).height(50.dp) .clip(RoundedCornerShape(50)) .border(1.dp, borderColor, RoundedCornerShape(50)) .background(backgroundColor) From 7a5a3f7937653f04b67f57e2fd60e29c2a5afe0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:13:19 -0400 Subject: [PATCH 48/70] Refactor: Update WheelTimePicker component --- .../ui/components/clock/WheelTimePicker.kt | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt index ab19cec4..ceadee14 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.TextStyle @@ -32,6 +31,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import com.soujunior.petjournal.ui.theme.ColorCustom import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.filter import kotlin.math.abs @@ -59,7 +59,7 @@ fun WheelTimePicker( initialMinute: Int = 0, textStyle: TextStyle = MaterialTheme.typography.titleLarge, focusedColor: Color = Color.Black, - unfocusedColor: Color = Color.Gray, + unfocusedColor: Color = ColorCustom.color_unfocused_wheelTimePicker, onTimeChanged: (hour: Int, minute: Int) -> Unit ) { require(visibleItemsCount % 2 != 0) { "visibleItemsCount must be an odd number." } @@ -162,8 +162,10 @@ private fun PickerColumn( if (layoutInfo.visibleItemsInfo.isEmpty()) { -1 } else { - val viewportCenter = (layoutInfo.viewportStartOffset + layoutInfo.viewportEndOffset) / 2 - layoutInfo.visibleItemsInfo.minByOrNull { abs((it.offset + it.size / 2) - viewportCenter) }?.index ?: -1 + val viewportCenter = + (layoutInfo.viewportStartOffset + layoutInfo.viewportEndOffset) / 2 + layoutInfo.visibleItemsInfo.minByOrNull { abs((it.offset + it.size / 2) - viewportCenter) }?.index + ?: -1 } } } @@ -176,12 +178,14 @@ private fun PickerColumn( val layoutInfo = listState.layoutInfo if (layoutInfo.visibleItemsInfo.isEmpty()) return@collect - val viewportCenter = (layoutInfo.viewportStartOffset + layoutInfo.viewportEndOffset) / 2 + val viewportCenter = + (layoutInfo.viewportStartOffset + layoutInfo.viewportEndOffset) / 2 val centralItem = layoutInfo.visibleItemsInfo.minByOrNull { abs((it.offset + it.size / 2) - viewportCenter) } ?: return@collect - val itemDataIndex = (centralItem.index - halfVisibleItems).coerceIn(0, items.size - 1) + val itemDataIndex = + (centralItem.index - halfVisibleItems).coerceIn(0, items.size - 1) val delta = (centralItem.offset + centralItem.size / 2) - viewportCenter listState.animateScrollBy(delta.toFloat()) @@ -204,8 +208,14 @@ private fun PickerColumn( items(items.size) { dataIndex -> val lazyColumnIndex = dataIndex + halfVisibleItems val isFocused = (lazyColumnIndex == centralLazyColumnIndex) - val scale by animateFloatAsState(targetValue = if (isFocused) 1.2f else 1.0f, label = "scale") - val alpha by animateFloatAsState(targetValue = if (isFocused) 1.0f else 0.5f, label = "alpha") + val scale by animateFloatAsState( + targetValue = if (isFocused) 1.2f else 1.0f, + label = "scale" + ) + val alpha by animateFloatAsState( + targetValue = if (isFocused) 1.0f else 0.5f, + label = "alpha" + ) Box( modifier = Modifier.height(itemHeight), @@ -215,9 +225,9 @@ private fun PickerColumn( text = items[dataIndex], style = textStyle.copy( color = if (isFocused) focusedColor else unfocusedColor, - fontSize = textStyle.fontSize * scale + fontSize = 34.sp ), - modifier = Modifier.alpha(alpha) +// modifier = Modifier.alpha(alpha) ) } } From 805ac724ceeda7606280fe3f2406707575533e42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:13:44 -0400 Subject: [PATCH 49/70] feat: Enhance ScreenRegisterTask UI and functionality --- .../components/ScreenRegisterTask.kt | 253 +++++++++++++----- 1 file changed, 187 insertions(+), 66 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt index ae84a260..9e9f8abf 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt @@ -1,32 +1,69 @@ package com.soujunior.petjournal.ui.screens_app.screens_pets.registerTaskScreen.components +import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController import com.soujunior.petjournal.R +import com.soujunior.petjournal.ui.components.Button3 import com.soujunior.petjournal.ui.components.GroupSelectableButton import com.soujunior.petjournal.ui.components.InputText import com.soujunior.petjournal.ui.components.PetFilterList import com.soujunior.petjournal.ui.components.Pets import com.soujunior.petjournal.ui.components.ScaffoldCustom +import com.soujunior.petjournal.ui.components.SelectableButtonInfo import com.soujunior.petjournal.ui.components.TextFieldCustom import com.soujunior.petjournal.ui.components.TransactionTypeSelector +import com.soujunior.petjournal.ui.components.task.OneOffTask +import com.soujunior.petjournal.ui.components.task.RecurringTask +import com.soujunior.petjournal.ui.theme.ColorCustom import com.soujunior.petjournal.ui.util.TransactionType +import ir.kaaveh.sdpcompose.sdp @Composable fun ScreenRegisterTask(navController: NavController) { + val listOfTasks = listOf( + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_vaccines), + ColorCustom.color_selectable_button_1 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_consultations), + ColorCustom.color_selectable_button_2 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_medicine), + ColorCustom.color_selectable_button_3 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_bath), + ColorCustom.color_selectable_button_4 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_food), + ColorCustom.color_selectable_button_5 + ), + SelectableButtonInfo( + stringResource(R.string.label_selectable_button_pet_walk), + ColorCustom.color_selectable_button_6 + ), + ) + val listPet = listOf( Pets( id = 1, @@ -37,84 +74,168 @@ fun ScreenRegisterTask(navController: NavController) { id = 2, imageRes = painterResource(R.drawable.image_alfredo), name = "Alfredo" + ), + Pets( + id = 3, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ), + Pets( + id = 4, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ), + Pets( + id = 5, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ), + Pets( + id = 6, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ), + Pets( + id = 7, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ), + Pets( + id = 8, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ), + Pets( + id = 9, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" ) ) val nameTask = remember { mutableStateOf("") } val desc = remember { mutableStateOf("") } + val ob = remember { mutableStateOf("") } var selectedType by remember { mutableStateOf(null) } - Column(modifier = Modifier) { - ScaffoldCustom( - modifier = Modifier, - navigationUp = navController, - showTopBar = true, - titleTopBar = stringResource(R.string.label_new_task), - showBottomBarNavigation = true, - contentToUse = { - LazyColumn( - contentPadding = it, - content = { - item { - GroupSelectableButton() - } - item { - InputText( - modifier = Modifier, - placeholderText = "Digite aqui o nome da tarefa", - titleText = "Nome da tarefa", - textValue = nameTask.value, - onEvent = { t -> - nameTask.value = t - }, - ) - } - item { - TextFieldCustom( - title = stringResource(R.string.label_description), - placeholder = stringResource(R.string.enter_the_task_description_here), - value = desc.value, - onValueChange = { d -> - desc.value = d + ScaffoldCustom( + modifier = Modifier, + navigationUp = navController, + showTopBar = true, + titleTopBar = stringResource(R.string.label_new_task), + showBottomBarNavigation = true, + contentToUse = { paddingValues -> + Image( + painter = painterResource(R.drawable.rastro), + contentDescription = null, + modifier = Modifier + .fillMaxSize() + .offset(y = 300.sdp) + ) + LazyColumn( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues), + content = { + item { + GroupSelectableButton( + listOfTasks, + onSelection = { + + } + ) + } + item { + InputText( + modifier = Modifier.testTag("inputFieldTag"), + placeholderText = stringResource(R.string.enter_task_name_here), + titleText = stringResource(R.string.task_name), + textValue = nameTask.value, + onEvent = { t -> + nameTask.value = t + + }, + ) + } + item { + TextFieldCustom( + title = stringResource(R.string.label_description), + placeholder = stringResource(R.string.enter_the_task_description_here), + value = desc.value, + onValueChange = { d -> + desc.value = d + } + ) + } + item { + PetFilterList( + listPet, + onSelectedPet = { + + } + ) + } + item { + Column { + TransactionTypeSelector( + onSelectionChanged = { type -> + selectedType = type } ) - } - item { - PetFilterList( - listPet, - onSelectedPet = {} - ) - } - item { - Column { - TransactionTypeSelector( - onSelectionChanged = { type -> - selectedType = type - } - ) - - when (selectedType) { - TransactionType.Recurrent -> Text(text = "Recorrente") - TransactionType.OneOff -> Text(text = "Pontual") - null -> {} + + when (selectedType) { + TransactionType.Recurrent -> { + RecurringTask( + setOf(), + onAmPmSelector = { + + }, + onTime = { hour, minute -> + + }, + onWeekDaySelected = { + + }, + onDaySelected = { + + } + ) } - } - } - item { - TextFieldCustom( - title = "Observação", - placeholder = "Digite aqui a sua observação", - value = desc.value, - onValueChange = { d -> - desc.value = d + + TransactionType.OneOff -> { + OneOffTask( + onDateSelected = { + + }, + onAmPmSelector = { + + }, + onTime = { hour, minute -> + + } + ) } - ) + + null -> {} + } } } - ) - } - ) - } + item { + TextFieldCustom( + title = stringResource(R.string.label_observation), + placeholder = stringResource(R.string.enter_your_observation_here), + value = ob.value, + onValueChange = { o -> + ob.value = o + } + ) + } + item { + Button3(submit = { /*TODO*/ }, enableButton = true, text = stringResource(R.string.label_save_task)) + } + } + ) + } + ) } @Preview(showBackground = true, showSystemUi = true, device = "id:pixel_4_xl") From 45bf5b27787b560f4fc8e438fc6e33646617f3db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20de=20Oliveira=20Sim=C3=A3o?= Date: Sat, 30 Aug 2025 15:14:09 -0400 Subject: [PATCH 50/70] Test: Add UI tests for ScreenRegisterTask components --- .../components/ScreenRegisterTaskTest.kt | 360 ++++++++++++++++++ 1 file changed, 360 insertions(+) create mode 100644 petJournal/app/src/androidTest/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTaskTest.kt diff --git a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTaskTest.kt b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTaskTest.kt new file mode 100644 index 00000000..b8fe2ad3 --- /dev/null +++ b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTaskTest.kt @@ -0,0 +1,360 @@ +package com.soujunior.petjournal.ui.screens_app.screens_pets.registerTaskScreen.components + +import androidx.compose.foundation.layout.Column +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.hasSetTextAction +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.compose.ui.test.performTextInput +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.soujunior.petjournal.ui.components.GroupSelectableButton +import com.soujunior.petjournal.ui.components.InputText +import com.soujunior.petjournal.ui.components.PetFilterList +import com.soujunior.petjournal.ui.components.Pets +import com.soujunior.petjournal.ui.components.SelectableButtonInfo +import com.soujunior.petjournal.ui.components.TextFieldCustom +import com.soujunior.petjournal.ui.components.TransactionTypeSelector +import com.soujunior.petjournal.ui.components.task.OneOffTask +import com.soujunior.petjournal.ui.components.task.RecurringTask +import com.soujunior.petjournal.ui.theme.ColorCustom +import com.soujunior.petjournal.ui.util.TransactionType +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class ScreenRegisterTaskTest { + + @get:Rule + val composeTestRule = createComposeRule() + + private val pets = listOf( + Pets(id = 1, name = "Rex"), + Pets(id = 2, name = "Mia"), + Pets(id = 3, name = "Thor") + ) + + private val sampleListOfTasks = listOf( + SelectableButtonInfo("Vacinas", ColorCustom.color_selectable_button_1), + SelectableButtonInfo("Consultas", ColorCustom.color_selectable_button_2), + SelectableButtonInfo("Remédios", ColorCustom.color_selectable_button_3) + ) + + @Test + fun groupSelectableButton_displaysTitleCorrectly() { + composeTestRule.setContent { + GroupSelectableButton( + listOfTasks = sampleListOfTasks, + onSelection = {} + ) + } + + composeTestRule.onNodeWithText("Essa tarefa é...") + .assertIsDisplayed() + } + + @Test + fun groupSelectableButton_displaysAllButtons() { + composeTestRule.setContent { + GroupSelectableButton( + listOfTasks = sampleListOfTasks, + onSelection = {} + ) + } + + sampleListOfTasks.forEach { buttonInfo -> + composeTestRule.onNodeWithText(buttonInfo.title).assertIsDisplayed() + } + } + + @Test + fun groupSelectableButton_selectsAndDeselectsButtonCorrectly() { + composeTestRule.setContent { + GroupSelectableButton( + listOfTasks = sampleListOfTasks, + onSelection = {} + ) + } + + val firstButton = sampleListOfTasks[0] + + composeTestRule.onNodeWithText(firstButton.title).performClick() + + composeTestRule.onNodeWithText(firstButton.title).performClick() + } + + @Test + fun groupSelectableButton_selectsOnlyOneButtonAtATime_ifLogicImpliesThat() { + composeTestRule.setContent { + GroupSelectableButton( + listOfTasks = sampleListOfTasks, + onSelection = {} + ) + } + + val firstButton = sampleListOfTasks[0] + val secondButton = sampleListOfTasks[1] + + composeTestRule.onNodeWithText(firstButton.title).performClick() + + composeTestRule.onNodeWithText(secondButton.title).performClick() + + } + + @Test + fun inputText_displaysTitleCorrectly() { + val testTitle = "Nome da Tarefa" + composeTestRule.setContent { + InputText( + titleText = testTitle, + textValue = "", + onEvent = {} + ) + } + + composeTestRule.onNodeWithText(testTitle).assertIsDisplayed() + } + + @Test + fun inputText_displaysPlaceholder_whenTextValueIsEmptyAndNotMasked() { + val testPlaceholder = "Digite o nome da tarefa" + composeTestRule.setContent { + InputText( + placeholderText = testPlaceholder, + textValue = "", + onEvent = {}, + hasAMask = false + ) + } + + composeTestRule.onNodeWithText(testPlaceholder).assertIsDisplayed() + } + + @Test + fun inputText_doesNotDisplayPlaceholder_whenTextValueIsNotEmpty() { + val testPlaceholder = "Digite o nome da tarefa" + composeTestRule.setContent { + InputText( + placeholderText = testPlaceholder, + textValue = "Minha Tarefa", + onEvent = {}, + hasAMask = false + ) + } + + composeTestRule.onNodeWithText(testPlaceholder).assertDoesNotExist() + } + + @Test + fun inputText_displaysErrorMessages_whenTextErrorIsProvided() { + val errorMessages = listOf("Nome muito curto", "Nome inválido") + composeTestRule.setContent { + InputText( + textValue = "Ops", + onEvent = {}, + isError = true, + textError = errorMessages + ) + } + errorMessages.forEach { errorMessage -> + composeTestRule.onNodeWithText(errorMessage).assertIsDisplayed() + } + } + + private val title = "Descrição" + private val placeholder = "Digite a descrição aqui..." + + @Test + fun shouldDisplayTitleAndPlaceholder() { + composeTestRule.setContent { + TextFieldCustom( + title = title, + placeholder = placeholder, + value = "", + onValueChange = {} + ) + } + + composeTestRule.onNodeWithText(title).assertIsDisplayed() + + composeTestRule.onNodeWithText(placeholder).assertIsDisplayed() + } + + @Test + fun shouldUpdateTextWhenTyping() { + var textValue = "" + composeTestRule.setContent { + TextFieldCustom( + title = title, + placeholder = placeholder, + value = textValue, + onValueChange = { textValue = it } + ) + } + + val inputText = "Descrição do produto" + + composeTestRule.onNode( + hasSetTextAction() + ).performTextInput(inputText) + + assert(textValue == inputText) + } + + @Test + fun shouldDisplayTitleAndAllOption() { + composeTestRule.setContent { + PetFilterList(listPet = pets) + } + + composeTestRule.onNodeWithText("Quais pets precisam dessa tarefa?").assertIsDisplayed() + + composeTestRule.onNodeWithText("Todos").assertIsDisplayed() + } + + @Test + fun shouldDisplayAllPetsFromList() { + composeTestRule.setContent { + PetFilterList(listPet = pets) + } + + pets.forEach { pet -> + composeTestRule.onNodeWithText(pet.name!!).assertIsDisplayed() + } + } + + @Test + fun shouldSelectAndUnselectPet() { + var selected: String? = null + composeTestRule.setContent { + PetFilterList( + listPet = pets, + onSelectedPet = { selected = it } + ) + } + + composeTestRule.onNodeWithText("Rex").performClick() + assert(selected == "Rex") + + composeTestRule.onNodeWithText("Rex").performClick() + assert(selected == "") + } + + @Test + fun shouldSelectAllOption() { + var selected: String? = null + composeTestRule.setContent { + PetFilterList( + listPet = pets, + onSelectedPet = { selected = it } + ) + } + + composeTestRule.onNodeWithText("Todos").performClick() + assert(selected == "Todos") + + composeTestRule.onNodeWithText("Todos").performClick() + assert(selected == "") + } + + @Test + fun shouldShowRecurringTaskWhenRecurrentSelected() { + composeTestRule.setContent { + var selectedType: TransactionType? = null + + Column { + TransactionTypeSelector( + onSelectionChanged = { type -> + selectedType = type + } + ) + + when (selectedType) { + TransactionType.Recurrent -> { + RecurringTask( + setOf(), + onAmPmSelector = {}, + onTime = { _, _ -> }, + onWeekDaySelected = {}, + onDaySelected = {} + ) + } + + TransactionType.OneOff -> { + OneOffTask( + onDateSelected = {}, + onAmPmSelector = {}, + onTime = { _, _ -> } + ) + } + + null -> {} + } + } + } + + composeTestRule.onNodeWithText("Recorrente").performClick() + } + + @Test + fun shouldShowOneOffTaskWhenOneOffSelected() { + composeTestRule.setContent { + var selectedType: TransactionType? = null + + Column { + TransactionTypeSelector( + onSelectionChanged = { type -> + selectedType = type + } + ) + + when (selectedType) { + TransactionType.Recurrent -> { + RecurringTask( + setOf(), + onAmPmSelector = {}, + onTime = { _, _ -> }, + onWeekDaySelected = {}, + onDaySelected = {} + ) + } + + TransactionType.OneOff -> { + OneOffTask( + onDateSelected = {}, + onAmPmSelector = {}, + onTime = { _, _ -> } + ) + } + + null -> {} + } + } + } + + composeTestRule.onNodeWithText("Pontual").performClick() + } + + @Test + fun shouldUpdateObservationText() { + composeTestRule.setContent { + val ob = remember { mutableStateOf("") } + + TextFieldCustom( + title = "Observação", + placeholder = "Digite aqui a sua observação", + value = ob.value, + onValueChange = { ob.value = it }, + ) + } + + composeTestRule.onNodeWithText("Digite aqui a sua observação").assertIsDisplayed() + + val text = "Precisa dar o remédio às 14h" + composeTestRule.onNodeWithText("Digite aqui a sua observação").performTextInput(text) + } + +} \ No newline at end of file From c3b26bd5724f7ad62d803237a9e6c093a9b625b8 Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Wed, 29 Oct 2025 01:42:56 -0300 Subject: [PATCH 51/70] feat(ui): improve UI components styling and functionality - Update ActiveMonthsComponent with better styling - Enhance DateInputText component layout - Refactor DropDown component structure - Remove title text from DualActionButton for cleaner design - Improve InputText component with better padding and layout - Update NavigationBarItems styling These changes enhance the overall UI consistency and user experience. --- .../ui/components/ActiveMonthsComponent.kt | 6 ++++-- .../petjournal/ui/components/DateInputText.kt | 5 +++-- .../petjournal/ui/components/DropDown.kt | 5 ++--- .../ui/components/DualActionButton.kt | 13 ------------- .../petjournal/ui/components/InputText.kt | 18 ++++++++++-------- .../ui/components/NavigationBarItems.kt | 2 +- 6 files changed, 20 insertions(+), 29 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ActiveMonthsComponent.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ActiveMonthsComponent.kt index 5a83c5b6..36ad6244 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ActiveMonthsComponent.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ActiveMonthsComponent.kt @@ -74,7 +74,8 @@ fun ActiveMonthsComponent(activeMonths: Set) { Text( text = month, style = MaterialTheme.typography.labelLarge, - color = if (isActive) MaterialTheme.colorScheme.onPrimary else ColorCustom.color_border_dialog, + //todo: corrigir ColorCustom.color_border_dialog, + color = if (isActive) MaterialTheme.colorScheme.onPrimary else ColorCustom.error_color, fontWeight = FontWeight(400) ) } @@ -104,7 +105,8 @@ fun ActiveMonthsComponent(activeMonths: Set) { ) { Text( text = month, - color = if (isActive) MaterialTheme.colorScheme.onPrimary else ColorCustom.color_border_dialog, + //todo: corrigir ColorCustom.color_border_dialog, + color = if (isActive) MaterialTheme.colorScheme.onPrimary else ColorCustom.error_color, fontWeight = FontWeight(400) ) } diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DateInputText.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DateInputText.kt index e1d48763..9221ee6d 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DateInputText.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DateInputText.kt @@ -47,6 +47,7 @@ import ir.kaaveh.sdpcompose.ssp @Composable fun DateInputText( modifier: Modifier = Modifier, + textTitleModifier: Modifier = Modifier, textInputModifier: Modifier = Modifier, placeholderText: String = "Placeholder", titleText: String = "Title", @@ -67,9 +68,9 @@ fun DateInputText( color = MaterialTheme.colorScheme.scrim, style = MaterialTheme.typography.bodyMedium, fontWeight = FontWeight(500), - modifier = Modifier + modifier = textTitleModifier .fillMaxWidth() - .padding(start = 24.sdp, end = 24.sdp) + .padding(end = 24.sdp) ) } Row { diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DropDown.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DropDown.kt index e9dbf7e8..c75537cc 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DropDown.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DropDown.kt @@ -47,6 +47,7 @@ import ir.kaaveh.sdpcompose.sdp @Composable fun DropDown( modifier: Modifier = Modifier, + textTitleModifier: Modifier = Modifier, textInputModifier: Modifier = Modifier, placeholderText: String = "Porte do seu pet", titleText: String = "Title", @@ -66,9 +67,7 @@ fun DropDown( color = MaterialTheme.colorScheme.scrim, style = MaterialTheme.typography.bodyMedium, fontWeight = FontWeight(500), - modifier = Modifier - .fillMaxWidth() - .padding(start = 24.sdp, end = 24.sdp) + modifier = textTitleModifier.fillMaxWidth().padding(end = 24.sdp) ) } Row { diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DualActionButton.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DualActionButton.kt index 5e752de0..d99f56ba 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DualActionButton.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DualActionButton.kt @@ -43,20 +43,7 @@ fun DualActionButton( rightButtonTextColor: Color = MaterialTheme.colorScheme.primary, isLoading: Boolean = false ) { - Column(modifier = modifier) { - Row { - Text( - text = titleText, - textAlign = TextAlign.Start, - color = MaterialTheme.colorScheme.scrim, - style = MaterialTheme.typography.bodyMedium, - fontWeight = FontWeight(500), - modifier = Modifier - .fillMaxWidth() - .padding(start = 24.sdp, end = 24.sdp) - ) - } Row( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween, diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt index 7e210fdb..687a2d50 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt @@ -39,6 +39,7 @@ import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import com.soujunior.petjournal.R import com.soujunior.petjournal.ui.theme.ColorCustom @@ -59,11 +60,12 @@ fun InputText( onEvent: (String) -> Unit, hasAMask: Boolean = false, keyboardOptions: KeyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Text), - visualTransformation: VisualTransformation = VisualTransformation.None + visualTransformation: VisualTransformation = VisualTransformation.None, + textTitleModifier: Modifier = Modifier ) { var showPassword by remember { mutableStateOf(false) } - Column(modifier = modifier.padding(16.dp)) { + Column(modifier = modifier) { Row { Text( text = titleText, @@ -71,7 +73,7 @@ fun InputText( color = MaterialTheme.colorScheme.scrim, fontWeight = FontWeight(500), style = MaterialTheme.typography.titleMedium, - modifier = modifier + modifier = textTitleModifier .fillMaxWidth() ) } @@ -88,7 +90,7 @@ fun InputText( color = MaterialTheme.colorScheme.surface, shape = RoundedCornerShape(size = 12.dp) ) - .padding(2.sdp) + .padding(0.sdp) .fillMaxWidth() .testTag("inputField_test") .drawBehind { @@ -119,16 +121,16 @@ fun InputText( else PasswordVisualTransformation() } else visualTransformation, keyboardOptions = keyboardOptions, - decorationBox = { + decorationBox = { innerTextField -> Row( modifier = Modifier - .background(Color.White) - .padding(start = 14.sdp), + .padding(horizontal = 14.sdp), verticalAlignment = Alignment.CenterVertically ) { Box( modifier = Modifier.weight(1f) ) { + innerTextField() if (textValue.isEmpty() && !hasAMask) { Text( text = placeholderText, @@ -188,5 +190,5 @@ fun InputText( @Preview(showBackground = true, showSystemUi = false, device = "id:pixel_4_xl") @Composable fun InputTextPreview() { - InputText(Modifier, onEvent = {}, textValue = "") + InputText(textValue = "", onEvent = {},) } \ No newline at end of file diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/NavigationBarItems.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/NavigationBarItems.kt index 706ec91a..852d4803 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/NavigationBarItems.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/NavigationBarItems.kt @@ -25,7 +25,7 @@ sealed class NavigationBarItems( object Pets : NavigationBarItems( title = "Pets", - route = "pets/introRegisterPet", + route = "pets/petListScreen", icons = R.drawable.ic_pet, group = "pets" ) From 8e1a89cac00a241f7f25bb92852264c76df9b7d0 Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Wed, 29 Oct 2025 01:43:08 -0300 Subject: [PATCH 52/70] refactor(strings): update pet registration string label - Change 'Cadastro Pet' to 'Cadastro' for better UX - Simplifies the registration screen title --- petJournal/app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/petJournal/app/src/main/res/values/strings.xml b/petJournal/app/src/main/res/values/strings.xml index 631122de..6bcf5344 100644 --- a/petJournal/app/src/main/res/values/strings.xml +++ b/petJournal/app/src/main/res/values/strings.xml @@ -1,6 +1,6 @@ PetJournal - Cadastro Pet + Cadastro Raças Nome Pequeno (6kg a 14kg) From 3af5ae58c8d06a0120181796cc11e3f592fb6782 Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Wed, 29 Oct 2025 01:43:14 -0300 Subject: [PATCH 53/70] fix(ui): apply temporary color fixes to TaskSuccessDialog - Replace missing ColorCustom properties with error_color as temporary solution - Add TODO comments for proper color implementation - Ensures dialog renders correctly while proper colors are being defined This is a temporary fix that should be replaced once proper color definitions are available. --- .../ui/components/TaskSuccessDialog.kt | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskSuccessDialog.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskSuccessDialog.kt index e8f3f655..35736250 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskSuccessDialog.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskSuccessDialog.kt @@ -51,10 +51,13 @@ fun TaskSuccessDialog( modifier = modifier .shadow( elevation = 3.dp, - spotColor = ColorCustom.color_shadow_dialog, - ambientColor = ColorCustom.color_shadow_dialog + //todo: Corrigir ColorCustom.color_shadow_dialog, + spotColor = ColorCustom.error_color, + //todo: Corrigir ColorCustom.color_shadow_dialog, + ambientColor = ColorCustom.error_color ) - .border(2.dp, ColorCustom.color_border_dialog, RoundedCornerShape(16.dp)) + //todo: Corrigir ColorCustom.color_border_dialog, + .border(2.dp, ColorCustom.error_color, RoundedCornerShape(16.dp)) .width(330.dp) .height(338.dp) .background( @@ -90,7 +93,8 @@ fun TaskSuccessDialog( .fillMaxWidth() .padding(start = 16.dp, end = 16.dp), onClick = onNewTaskClick, - border = BorderStroke(1.dp, ColorCustom.color_background_button_dialog), + //todo: Corrigir ColorCustom.color_background_button_dialog, + border = BorderStroke(1.dp, ColorCustom.error_color), shape = RoundedCornerShape(12.dp) ) { Icon( @@ -99,14 +103,16 @@ fun TaskSuccessDialog( .height(24.dp), imageVector = Icons.Default.Add, contentDescription = null, - tint = ColorCustom.color_background_button_dialog + //todo: Corrigir ColorCustom.color_background_button_dialog, + tint = ColorCustom.error_color ) Spacer(modifier = Modifier.width(8.dp)) Text( text = stringResource(R.string.label_new_task), style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight(600), - color = ColorCustom.color_border_dialog + //todo: Corrigir ColorCustom.color_border_dialog, + color = ColorCustom.error_color ) } @@ -115,7 +121,8 @@ fun TaskSuccessDialog( .fillMaxWidth() .padding(start = 16.dp, end = 16.dp, top = 6.dp), onClick = onGoToHomeClick, - colors = ButtonDefaults.buttonColors(containerColor = ColorCustom.color_border_dialog), + //todo: Corrigir ColorCustom.color_border_dialog, + colors = ButtonDefaults.buttonColors(containerColor = ColorCustom.error_color), shape = RoundedCornerShape(12.dp) ) { Text( From 26f131e848a4081819faf102b59f3b9dc0f46bac Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Wed, 29 Oct 2025 01:47:40 -0300 Subject: [PATCH 54/70] feat(ui): improve register pet screen layout and add preview components - Refactor layout structure with better spacing and padding - Add navigationBarsPadding for better screen adaptation - Improve LazyColumn arrangement with consistent spacing - Add individual title labels for DualActionButton components - Create comprehensive preview components for all form elements - Enhance component styling and MaterialTheme usage - Remove redundant padding and improve component organization This improves the overall user experience and developer preview capabilities. --- .../registerPetScreen/components/Screen.kt | 332 +++++++++++++----- 1 file changed, 250 insertions(+), 82 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/Screen.kt index 14208cc3..6e3a9ac8 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/Screen.kt @@ -4,14 +4,20 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.AbsoluteAlignment import androidx.compose.ui.Alignment @@ -20,6 +26,8 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController @@ -39,7 +47,10 @@ import ir.kaaveh.sdpcompose.sdp fun Screen(navController: NavController) { Column(modifier = Modifier) { ScaffoldCustom( - modifier = Modifier, + modifier = Modifier + .navigationBarsPadding() + .fillMaxSize() + , navigationUp = navController, showTopBar = true, titleTopBar = stringResource(R.string.edit_pet_data), @@ -54,31 +65,25 @@ fun Screen(navController: NavController) { .offset(y = 300.sdp) .align(AbsoluteAlignment.Left) ) + LazyColumn( horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Top, + verticalArrangement = Arrangement.spacedBy(12.sdp), modifier = Modifier .fillMaxSize() .fillMaxHeight() - .padding( - top = it.calculateTopPadding() + 12.sdp, - bottom = it.calculateBottomPadding() + 2.sdp - ) + .padding(it) .background(Color.Transparent), + contentPadding = PaddingValues(horizontal = 24.sdp), content = { item { ImagePet() } item { InputText( - textInputModifier = Modifier - .testTag("inputField_test") - .padding( - start = 24.sdp, - end = 24.sdp, - bottom = 12.sdp, - top = 4.sdp - ), + modifier = Modifier, + textTitleModifier = Modifier.padding(bottom = 4.sdp), + textInputModifier = Modifier.testTag("inputField_test"), placeholderText = stringResource(R.string.placeholder_name_pet), titleText = stringResource(R.string.pet_name), textValue = "", @@ -87,12 +92,8 @@ fun Screen(navController: NavController) { } item { DropDown( - textInputModifier = Modifier.padding( - start = 24.sdp, - end = 24.sdp, - bottom = 12.sdp, - top = 4.sdp - ), + textInputModifier = Modifier, + textTitleModifier = Modifier.padding(bottom = 4.sdp), placeholderText = stringResource(R.string.placeholder_breed), titleText = stringResource(R.string.breed), textValue = "", @@ -101,12 +102,8 @@ fun Screen(navController: NavController) { } item { DropDown( - textInputModifier = Modifier.padding( - start = 24.sdp, - end = 24.sdp, - bottom = 12.sdp, - top = 4.sdp - ), + textInputModifier = Modifier, + textTitleModifier = Modifier.padding(bottom = 4.sdp), placeholderText = stringResource(R.string.placeholder_size), titleText = stringResource(R.string.size), textValue = "", @@ -115,44 +112,29 @@ fun Screen(navController: NavController) { } item { DateInputText( - textInputModifier = Modifier.padding( - start = 24.sdp, - end = 24.sdp, - bottom = 12.sdp, - top = 4.sdp - ), + textInputModifier = Modifier, + textTitleModifier = Modifier.padding(bottom = 4.sdp), titleText = stringResource(R.string.pet_birth_date), placeholderText = stringResource(R.string.placeholder_text_DD_MM_YYYY), textValue = "", onEvent = { }, - // Será necessário criar uma função para formatar a data -// visualTransformation = { date -> -// formatDate(date) -// } + // visualTransformation = { date -> + // formatDate(date) + // } ) } item { DropDown( - textInputModifier = Modifier.padding( - start = 24.sdp, - end = 24.sdp, - bottom = 12.sdp, - top = 4.sdp - ), - placeholderText = stringResource(R.string.placeholder_weight), - titleText = stringResource(R.string.weight), + textTitleModifier = Modifier.padding(bottom = 4.sdp), + placeholderText = stringResource(id = R.string.placeholder_weight), + titleText = stringResource(id = R.string.weight), textValue = "", onEvent = { } ) } item { DropDown( - textInputModifier = Modifier.padding( - start = 24.sdp, - end = 24.sdp, - bottom = 12.sdp, - top = 4.sdp - ), + textInputModifier = Modifier.padding(top = 4.sdp), placeholderText = stringResource(R.string.placeholder_type), titleText = stringResource(R.string.type), textValue = "", @@ -160,40 +142,58 @@ fun Screen(navController: NavController) { ) } item { - DualActionButton( - buttonModifier = Modifier.padding( - start = 32.sdp, - end = 24.sdp, - bottom = 32.sdp, - top = 8.sdp - ), - titleText = stringResource(R.string.pet_sex), - rightButtonSubmit = {}, - leftButtonSubmit = {}, - enableButton = true, - leftButtonText = stringResource(R.string.male), - rightButtonText = stringResource(R.string.female) - ) + Column{ + Row { + Text( + text = stringResource(R.string.pet_sex), + textAlign = TextAlign.Start, + color = MaterialTheme.colorScheme.scrim, + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight(500), + modifier = Modifier + .padding(bottom = 8.sdp) + .fillMaxWidth() + ) + } + DualActionButton( + buttonModifier = Modifier, + titleText = stringResource(R.string.pet_sex), + rightButtonSubmit = {}, + leftButtonSubmit = {}, + enableButton = true, + leftButtonText = stringResource(R.string.male), + rightButtonText = stringResource(R.string.female) + ) + } } item { - DualActionButton( - buttonModifier = Modifier.padding( - start = 32.sdp, - end = 24.sdp, - bottom = 32.sdp, - top = 8.sdp - ), - titleText = stringResource(R.string.castrated), - rightButtonSubmit = {}, - leftButtonSubmit = {}, - enableButton = true, - leftButtonText = stringResource(R.string.yes), - rightButtonText = stringResource(R.string.no), - leftButtonColor = ButtonDefaults.buttonColors(androidx.compose.material3.MaterialTheme.colorScheme.background), - rightButtonColor = ButtonDefaults.buttonColors(androidx.compose.material3.MaterialTheme.colorScheme.primary), - leftButtonTextColor = androidx.compose.material3.MaterialTheme.colorScheme.primary, - rightButtonTextColor = androidx.compose.material3.MaterialTheme.colorScheme.onPrimary, - ) + Column{ + Row { + Text( + text = stringResource(R.string.pet_registration), + textAlign = TextAlign.Start, + color = MaterialTheme.colorScheme.scrim, + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight(500), + modifier = Modifier + .padding(bottom = 8.sdp) + .fillMaxWidth() + ) + } + DualActionButton( + buttonModifier = Modifier, + titleText = stringResource(R.string.castrated), + rightButtonSubmit = {}, + leftButtonSubmit = {}, + enableButton = true, + leftButtonText = stringResource(R.string.yes), + rightButtonText = stringResource(R.string.no), + leftButtonColor = ButtonDefaults.buttonColors(MaterialTheme.colorScheme.background), + rightButtonColor = ButtonDefaults.buttonColors(MaterialTheme.colorScheme.primary), + leftButtonTextColor = MaterialTheme.colorScheme.primary, + rightButtonTextColor = MaterialTheme.colorScheme.onPrimary, + ) + } } item { Spacer(modifier = Modifier.height(20.sdp)) @@ -222,4 +222,172 @@ fun ScreenPreview() { Screen(nav) } ) +} + +@Preview(showBackground = true) +@Composable +fun InputTextPreview() { + PetJournalTheme { + InputText( + modifier = Modifier, + textTitleModifier = Modifier.padding(bottom = 4.sdp), + textInputModifier = Modifier.testTag("inputField_test"), + placeholderText = stringResource(R.string.placeholder_name_pet), + titleText = stringResource(R.string.pet_name), + textValue = "", + onEvent = { } + ) + } +} + +@Preview(showBackground = true) +@Composable +fun DropDownBreedPreview() { + PetJournalTheme { + DropDown( + textInputModifier = Modifier, + textTitleModifier = Modifier.padding(bottom = 4.sdp), + placeholderText = stringResource(R.string.placeholder_breed), + titleText = stringResource(R.string.breed), + textValue = "", + onEvent = { } + ) + } +} + +@Preview(showBackground = true) +@Composable +fun DropDownSizePreview() { + PetJournalTheme { + DropDown( + textInputModifier = Modifier, + textTitleModifier = Modifier.padding(bottom = 4.sdp), + placeholderText = stringResource(R.string.placeholder_size), + titleText = stringResource(R.string.size), + textValue = "", + onEvent = { } + ) + } +} + +@Preview(showBackground = true) +@Composable +fun DateInputTextPreview() { + PetJournalTheme { + DateInputText( + textInputModifier = Modifier, + textTitleModifier = Modifier.padding(bottom = 4.sdp), + titleText = stringResource(R.string.pet_birth_date), + placeholderText = stringResource(R.string.placeholder_text_DD_MM_YYYY), + textValue = "", + onEvent = { }, + // visualTransformation = { date -> + // formatDate(date) + // } + ) + } +} + +@Preview(showBackground = true) +@Composable +fun DropDownWeightPreview() { + PetJournalTheme { + DropDown( + textTitleModifier = Modifier.padding(bottom = 4.sdp), + placeholderText = stringResource(id = R.string.placeholder_weight), + titleText = stringResource(id = R.string.weight), + textValue = "", + onEvent = { } + ) + } +} + +@Preview(showBackground = true) +@Composable +fun DropDownTypePreview() { + PetJournalTheme { + DropDown( + textInputModifier = Modifier.padding(top = 4.sdp), + placeholderText = stringResource(R.string.placeholder_type), + titleText = stringResource(R.string.type), + textValue = "", + onEvent = { } + ) + } +} + +@Preview(showBackground = true) +@Composable +fun DualActionSexPreview() { + PetJournalTheme { + Column{ + Row { + Text( + text = stringResource(R.string.pet_sex), + textAlign = TextAlign.Start, + color = MaterialTheme.colorScheme.scrim, + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight(500), + modifier = Modifier + .padding(bottom = 8.sdp) + .fillMaxWidth() + ) + } + DualActionButton( + buttonModifier = Modifier, + titleText = stringResource(R.string.pet_sex), + rightButtonSubmit = {}, + leftButtonSubmit = {}, + enableButton = true, + leftButtonText = stringResource(R.string.male), + rightButtonText = stringResource(R.string.female) + ) + } + } +} + +@Preview(showBackground = true) +@Composable +fun DualActionCastratedPreview() { + PetJournalTheme { + Column{ + Row { + Text( + text = stringResource(R.string.pet_registration), + textAlign = TextAlign.Start, + color = MaterialTheme.colorScheme.scrim, + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight(500), + modifier = Modifier + .padding(bottom = 8.sdp) + .fillMaxWidth() + ) + } + DualActionButton( + buttonModifier = Modifier, + titleText = stringResource(R.string.castrated), + rightButtonSubmit = {}, + leftButtonSubmit = {}, + enableButton = true, + leftButtonText = stringResource(R.string.yes), + rightButtonText = stringResource(R.string.no), + leftButtonColor = ButtonDefaults.buttonColors(MaterialTheme.colorScheme.background), + rightButtonColor = ButtonDefaults.buttonColors(MaterialTheme.colorScheme.primary), + leftButtonTextColor = MaterialTheme.colorScheme.primary, + rightButtonTextColor = MaterialTheme.colorScheme.onPrimary, + ) + } + } +} + +@Preview(showBackground = true) +@Composable +fun Button3SavePreview() { + PetJournalTheme { + Button3( + submit = {}, + enableButton = true, + text = stringResource(R.string.save) + ) + } } \ No newline at end of file From 72a80bfd38993af74f696d271d8155d0f87cd64e Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Wed, 29 Oct 2025 01:47:48 -0300 Subject: [PATCH 55/70] fix(navigation): update pet list route and add navigation functionality - Update NavHostElements route from 'pets/petList' to 'pets/petListScreen' - Add navigation functionality to PetItemMore component - Connect pet list screen to register pet screen navigation - Remove commented navigation route This ensures proper navigation flow between pet list and registration screens. --- .../com/soujunior/petjournal/navigation/NavHostElements.kt | 3 +-- .../screens_pets/petListScreen/components/Screen.kt | 6 +++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/NavHostElements.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/NavHostElements.kt index 75918754..c9a1715d 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/NavHostElements.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/NavHostElements.kt @@ -55,8 +55,7 @@ fun NavHostMainContent() { composable("account_manager") { AccountManager() } composable("tutorScreen") { TutorScreen(navController) } composable("pets/introRegisterPet") { IntroRegisterPetScreen(navController) } -// composable("pets/introRegisterPet") { RegisterPetScreen(navController) } - composable("pets/petList") { PetListScreen(navController) } + composable("pets/petListScreen") { PetListScreen(navController) } composable("pets/registerPet") { RegisterPetScreen(navController) } composable("pets/speciesChoice") { SpeciesChoiceScreen(navController) } diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/components/Screen.kt index 4f1221b5..64061903 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/components/Screen.kt @@ -141,7 +141,11 @@ fun Screen(navController: NavController) { ) } item { - PetItemMore(onClick = {}) + PetItemMore( + onClick = { + navController.navigate("pets/registerPet") + } + ) } } From 511af56d9066a20af4341fca3b2a4c8b7e28923e Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Wed, 29 Oct 2025 01:48:03 -0300 Subject: [PATCH 56/70] fix(test): correct parameter order in RegisterPetScreenTest - Fix parameter order in InputText test components - Ensure consistent parameter ordering for better test reliability - Update test structure to match component interface changes This improves test consistency and prevents parameter order issues. --- .../petjournal/screen_pets/RegisterPetScreenTest.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/screen_pets/RegisterPetScreenTest.kt b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/screen_pets/RegisterPetScreenTest.kt index 8c302940..a1f83870 100644 --- a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/screen_pets/RegisterPetScreenTest.kt +++ b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/screen_pets/RegisterPetScreenTest.kt @@ -60,10 +60,10 @@ class RegisterPetScreenTest { composeTestRule.setContent { InputText( - titleText = stringResource(R.string.pet_name), placeholderText = stringResource(R.string.placeholder_name_pet), + titleText = stringResource(R.string.pet_name), textValue = actualText, - onEvent = { actualText = it } + onEvent = { actualText = it }, ) } @@ -81,9 +81,9 @@ class RegisterPetScreenTest { InputText( titleText = stringResource(R.string.pet_name), textValue = "", - onEvent = {}, isError = true, textError = listOf(errorMessage), + onEvent = {}, ) } From 528fe13c082093dfb3151d1dc5f312d33214ed13 Mon Sep 17 00:00:00 2001 From: Vinicius Tavares Date: Wed, 29 Oct 2025 09:27:07 -0300 Subject: [PATCH 57/70] fixed size of the bottom button from the TaskCard component --- petJournal/app/build.gradle.kts | 2 +- .../petjournal/ui/components/TaskCard.kt | 50 +++++++++--------- .../taskListScreen/components/Screen.kt | 14 ++--- .../components/TabSelector.kt | 25 ++++----- .../components/TaskDateComponent.kt | 51 +++++++++++++++++++ 5 files changed, 93 insertions(+), 49 deletions(-) rename petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/{registerPetScreen => taskListScreen}/components/TabSelector.kt (74%) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt diff --git a/petJournal/app/build.gradle.kts b/petJournal/app/build.gradle.kts index 567b704f..fe81049f 100644 --- a/petJournal/app/build.gradle.kts +++ b/petJournal/app/build.gradle.kts @@ -98,7 +98,7 @@ dependencies { // MATERIAL 3 - STATUS BAR implementation("com.google.accompanist:accompanist-systemuicontroller:0.30.1") implementation("androidx.navigation:navigation-compose:2.6.0-beta01") - implementation("androidx.compose.material3:material3:1.1.2") + implementation("androidx.compose.material3:material3:1.2.1") // COMPOSE implementation("androidx.activity:activity-compose:1.7.1") implementation("androidx.compose.ui:ui:$composeUiVersion") diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt index 19e0637f..1f4a4d09 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt @@ -44,19 +44,21 @@ import ir.kaaveh.sdpcompose.ssp @Composable fun TaskCard( - taskData: TaskData + taskData: TaskData, + modifier: Modifier = Modifier ) { var expanded by remember { mutableStateOf(false) } Box( - modifier = Modifier.clip(RectangleShape) + modifier = modifier.clip(RectangleShape) ) { Surface( - shape = RoundedCornerShape(8.sdp), + shape = RoundedCornerShape(16.sdp), tonalElevation = 2.dp, modifier = Modifier + .fillMaxWidth() .padding(2.sdp) - .animateContentSize() // Animates the size change + .animateContentSize() ) { // Background icon when expanded - outside the Surface if (expanded) { @@ -72,15 +74,13 @@ fun TaskCard( ) } Column { - // Main content: Title/Date on Start, Description on End Row( modifier = Modifier .fillMaxWidth() - .padding(4.sdp), + .padding(2.sdp), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.Top ) { - // Left side: Title and Date Column( modifier = Modifier .padding(horizontal = 8.sdp) @@ -187,22 +187,19 @@ fun TaskCard( Box( modifier = Modifier .fillMaxWidth() + .height(20.sdp) .background(taskData.tipo.cor) - .clickable { expanded = !expanded } // Toggles the expanded state + .clickable { expanded = !expanded }, ) { - Row( + Text( + text = if (expanded) "Ver Menos" else "Ver Mais", + fontSize = 10.ssp, + color = MaterialTheme.colorScheme.background, + style = MaterialTheme.typography.displaySmall, modifier = Modifier - .fillMaxWidth() - .padding(vertical = 6.sdp), - horizontalArrangement = Arrangement.Center - ) { - Text( - text = if (expanded) "Ver Menos" else "Ver Mais", - fontSize = 10.ssp, - color = MaterialTheme.colorScheme.background, - style = MaterialTheme.typography.displaySmall - ) - } + .align(Alignment.Center) + .offset(y = -6.sdp) + ) } } } @@ -218,11 +215,12 @@ private fun TaskCardPreview() { TaskCard( taskData = TaskFakeData.sampleTasks[0] ) -// TaskCard( -// taskData = TaskDummyData.sampleTasks[1] -// ) -// TaskCard( -// taskData = TaskDummyData.sampleTasks[2] -// ) + TaskCard( + taskData = TaskFakeData.sampleTasks[1] + ) + TaskCard( + taskData = TaskFakeData.sampleTasks[2] + ) } } + diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt index 53f6408d..a29bd9c3 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt @@ -12,19 +12,16 @@ import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.sp import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController import com.soujunior.petjournal.R import com.soujunior.petjournal.ui.components.NavigationBar import com.soujunior.petjournal.ui.components.ScaffoldCustom -import com.soujunior.petjournal.ui.screens_app.screens_pets.registerPetScreen.components.TabSelector +import com.soujunior.petjournal.ui.components.data.TaskFakeData import com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.DateFilter -import com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.TaskListViewModel import com.soujunior.petjournal.ui.theme.RobotoRegular import ir.kaaveh.sdpcompose.sdp import ir.kaaveh.sdpcompose.ssp -import org.koin.androidx.compose.getViewModel @Composable fun Screen(navController: NavController){ @@ -35,8 +32,8 @@ fun Screen(navController: NavController){ navigationUp = navController, showBottomBarNavigation = true, bottomNavigationBar = { NavigationBar(navController) }, - contentToUse = { - Column(modifier = Modifier.padding(16.sdp)){ + contentToUse = { paddingValues -> + Column(modifier = Modifier.padding(paddingValues).padding(horizontal = 8.sdp, vertical = 16.sdp)){ Text(text = stringResource(R.string.next_tasks), fontSize = 16.ssp, @@ -52,6 +49,11 @@ fun Screen(navController: NavController){ modifier = Modifier.fillMaxWidth().padding(top = 16.sdp) ) + TaskDateComponent( + date = "5 de Janeiro", + tasks = TaskFakeData.sampleTasks.take(4) + ) + } } ) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/TabSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TabSelector.kt similarity index 74% rename from petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/TabSelector.kt rename to petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TabSelector.kt index 5328e40d..1694c535 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/TabSelector.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TabSelector.kt @@ -1,12 +1,11 @@ -package com.soujunior.petjournal.ui.screens_app.screens_pets.registerPetScreen.components +package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.components import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Text import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.PrimaryTabRow import androidx.compose.material3.Tab -import androidx.compose.material3.TabRow -import androidx.compose.material3.TabRowDefaults -import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -14,9 +13,9 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.DateFilter -import com.soujunior.petjournal.ui.theme.PetJournalTheme import com.soujunior.petjournal.R +@OptIn(ExperimentalMaterial3Api::class) @Composable fun TabSelector( selectedFilter : DateFilter, @@ -29,21 +28,16 @@ fun TabSelector( DateFilter.MONTHLY ) val selectedIndex = tabs.indexOf(selectedFilter) - TabRow( + + PrimaryTabRow( selectedTabIndex = selectedIndex, modifier = modifier, containerColor = Color.Transparent, contentColor = MaterialTheme.colorScheme.primary, - indicator = { - tabPositions -> - TabRowDefaults.Indicator( - Modifier.tabIndicatorOffset(tabPositions[selectedIndex]), - color = MaterialTheme.colorScheme.primary - ) - } - ) { + divider = {/*sem divider*/} + ){ tabs.forEachIndexed { - index, filter -> + index, filter -> Tab( selected = selectedIndex == index, onClick = { onFilterSelected(filter)}, @@ -56,7 +50,6 @@ fun TabSelector( Text( text = stringResource(id = textRes), fontWeight = if (selectedIndex == index) FontWeight.Bold else FontWeight.Normal, - color = if (selectedIndex == index) MaterialTheme.colorScheme.primary else Color.Gray ) }, selectedContentColor = MaterialTheme.colorScheme.primary, diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt new file mode 100644 index 00000000..12847333 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt @@ -0,0 +1,51 @@ +package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import com.soujunior.petjournal.ui.components.TaskCard +import com.soujunior.petjournal.ui.components.data.TaskData +import com.soujunior.petjournal.ui.components.data.TaskFakeData +import ir.kaaveh.sdpcompose.sdp +import ir.kaaveh.sdpcompose.ssp + +@Composable +fun TaskDateComponent( + date: String, + tasks: List, + modifier: Modifier = Modifier +) { + Column( + modifier = modifier, + verticalArrangement = Arrangement.spacedBy(8.sdp) + ) { + Text( + text = date, + style = MaterialTheme.typography.titleLarge, + fontSize = 20.ssp, + modifier = Modifier.padding(bottom = 8.sdp, start = 16.sdp) + ) + + tasks.forEach { taskData -> + TaskCard(taskData = taskData) + } + } + +} + +@Preview +@Composable +private fun Preview() { + TaskDateComponent( + date = "5 de Janeiro", + tasks = TaskFakeData.sampleTasks.take(3) + ) +} + From 0cafa37e6e954f0ac38c86f0b391c769603633e8 Mon Sep 17 00:00:00 2001 From: Vinicius Tavares Date: Wed, 29 Oct 2025 09:58:31 -0300 Subject: [PATCH 58/70] fixed size of the texts form bottom button and edit task button --- .../petjournal/ui/components/TaskCard.kt | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt index 1f4a4d09..7077f7dd 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt @@ -53,7 +53,7 @@ fun TaskCard( modifier = modifier.clip(RectangleShape) ) { Surface( - shape = RoundedCornerShape(16.sdp), + shape = RoundedCornerShape(10.sdp), tonalElevation = 2.dp, modifier = Modifier .fillMaxWidth() @@ -170,14 +170,11 @@ fun TaskCard( ), shape = RoundedCornerShape(50.sdp), colors = ButtonDefaults.buttonColors(MaterialTheme.colorScheme.background) - ) { - // TODO: AJUSTAR A COR DO BOTÃO PARA A COR DA TAREFA Text( text = "Editar Tarefa", fontSize = 10.ssp, color = taskData.tipo.cor, - style = MaterialTheme.typography.headlineLarge ) } } @@ -195,10 +192,8 @@ fun TaskCard( text = if (expanded) "Ver Menos" else "Ver Mais", fontSize = 10.ssp, color = MaterialTheme.colorScheme.background, - style = MaterialTheme.typography.displaySmall, modifier = Modifier .align(Alignment.Center) - .offset(y = -6.sdp) ) } } @@ -215,12 +210,12 @@ private fun TaskCardPreview() { TaskCard( taskData = TaskFakeData.sampleTasks[0] ) - TaskCard( - taskData = TaskFakeData.sampleTasks[1] - ) - TaskCard( - taskData = TaskFakeData.sampleTasks[2] - ) +// TaskCard( +// taskData = TaskFakeData.sampleTasks[1] +// ) +// TaskCard( +// taskData = TaskFakeData.sampleTasks[2] +// ) } } From 67da8b48736348d711d02b3faec19429a81c3469 Mon Sep 17 00:00:00 2001 From: Vinicius Tavares Date: Wed, 29 Oct 2025 15:48:39 -0300 Subject: [PATCH 59/70] Added lazycolumn to screen --- .../taskListScreen/components/Screen.kt | 42 +++++++++++++++---- .../components/TaskDateComponent.kt | 8 +++- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt index a29bd9c3..a96d5148 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt @@ -3,6 +3,7 @@ package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.comp import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -19,6 +20,7 @@ import com.soujunior.petjournal.ui.components.NavigationBar import com.soujunior.petjournal.ui.components.ScaffoldCustom import com.soujunior.petjournal.ui.components.data.TaskFakeData import com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.DateFilter +import com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.components.TaskDateComponent import com.soujunior.petjournal.ui.theme.RobotoRegular import ir.kaaveh.sdpcompose.sdp import ir.kaaveh.sdpcompose.ssp @@ -33,7 +35,10 @@ fun Screen(navController: NavController){ showBottomBarNavigation = true, bottomNavigationBar = { NavigationBar(navController) }, contentToUse = { paddingValues -> - Column(modifier = Modifier.padding(paddingValues).padding(horizontal = 8.sdp, vertical = 16.sdp)){ + + Column(modifier = Modifier + .padding(paddingValues) + .padding(horizontal = 8.sdp, vertical = 16.sdp)){ Text(text = stringResource(R.string.next_tasks), fontSize = 16.ssp, @@ -46,13 +51,35 @@ fun Screen(navController: NavController){ TabSelector( selectedFilter = DateFilter.DAILY, onFilterSelected = {}, - modifier = Modifier.fillMaxWidth().padding(top = 16.sdp) + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.sdp) ) - TaskDateComponent( - date = "5 de Janeiro", - tasks = TaskFakeData.sampleTasks.take(4) - ) + LazyColumn { + item{ + TaskDateComponent( + date = "5 de Janeiro", + tasks = TaskFakeData.sampleTasks.take(2), + modifier = Modifier.padding(top = 16.sdp) + ) + } + item { + TaskDateComponent( + date = "3 de Fevereiro", + tasks = TaskFakeData.sampleTasks.take(1), + modifier = Modifier.padding(top = 16.sdp) + ) + } + item{ + TaskDateComponent( + date = "30 de Setembro", + tasks = TaskFakeData.sampleTasks.take(3), + modifier = Modifier.padding(top = 16.sdp) + ) + } + } + } } @@ -66,4 +93,5 @@ fun Screen(navController: NavController){ private fun ScreenPreview(){ val nav = rememberNavController() Screen(nav) -} \ No newline at end of file +} + diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt index 12847333..112435d5 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt @@ -30,11 +30,15 @@ fun TaskDateComponent( text = date, style = MaterialTheme.typography.titleLarge, fontSize = 20.ssp, - modifier = Modifier.padding(bottom = 8.sdp, start = 16.sdp) + modifier = Modifier.padding(bottom = 8.sdp) ) tasks.forEach { taskData -> - TaskCard(taskData = taskData) + TaskCard( + taskData = taskData, + modifier = Modifier.padding(start = 8.sdp) + + ) } } From 6cdf70bb13a79d432cbe50a063dac30964787b38 Mon Sep 17 00:00:00 2001 From: Vinicius Tavares Date: Fri, 31 Oct 2025 13:58:02 -0300 Subject: [PATCH 60/70] Adicionados objetos de request para a tela de criacao de tarefas --- .../petjournal/ui/components/TaskCard.kt | 2 +- .../ui/components/data/TaskTypes.kt | 27 +++++++------- .../petjournal/ui/util/DateFormatter.kt | 36 +++++++++++++++++++ petJournal/domain/build.gradle.kts | 1 + .../request/taskModels/DailyTaskModel.kt | 11 ++++++ .../request/taskModels/MonthlyTaskModel.kt | 13 +++++++ .../request/taskModels/PontualTaskModel.kt | 11 ++++++ .../request/taskModels/WeeklyTaskModel.kt | 12 +++++++ .../domain/model/taskModel/TaskModel.kt | 26 ++++++++++++++ 9 files changed, 125 insertions(+), 14 deletions(-) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/DateFormatter.kt create mode 100644 petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/DailyTaskModel.kt create mode 100644 petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/MonthlyTaskModel.kt create mode 100644 petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/PontualTaskModel.kt create mode 100644 petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/WeeklyTaskModel.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt index 7077f7dd..a454e189 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt @@ -95,7 +95,7 @@ fun TaskCard( ) Text( - text = taskData.dataHora, + text = taskData.startAt, style = MaterialTheme.typography.titleMedium, color = Color.Gray, fontSize = 10.ssp diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskTypes.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskTypes.kt index eeca82e6..abf7bee3 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskTypes.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskTypes.kt @@ -86,7 +86,7 @@ object TaskTypes { } } -data class PetData( +data class FakePetData( val id: String, val imageRes: String = "" // String vazia por enquanto ) @@ -96,20 +96,21 @@ data class TaskData( val titulo: String, val descricaoResumida: String, val descricaoCompleta: String, - val dataHora: String, + val startAt: String, + val endAt: String = "", val tipo: TaskType, - val pets: List = emptyList() + val pets: List = emptyList() ) // Dados dummy para exemplo/preview object TaskFakeData { private val samplePets = listOf( - PetData(id = "pet_001"), - PetData(id = "pet_002"), - PetData(id = "pet_003"), - PetData(id = "pet_004"), - PetData(id = "pet_005"), - PetData(id = "pet_006") + FakePetData(id = "pet_001"), + FakePetData(id = "pet_002"), + FakePetData(id = "pet_003"), + FakePetData(id = "pet_004"), + FakePetData(id = "pet_005"), + FakePetData(id = "pet_006") ) val sampleTasks = listOf( @@ -118,7 +119,7 @@ object TaskFakeData { titulo = "Carprofeno", descricaoResumida = "Anti-inflamatorio não esteroide para alivio da dor e inflamação", descricaoCompleta = "Medicamento anti-inflamatório não esteroide para alívio da dor e inflamação. Deve ser administrado com cuidado e seguindo as instruções veterinárias. Dosagem recomendada conforme peso do animal.", - dataHora = "12/08/2025 - 10:30", + startAt = "12/08/2025 - 10:30", tipo = TaskTypes.MEDICAMENTOS, pets = listOf(samplePets[0], samplePets[1], samplePets[2]) ), @@ -127,7 +128,7 @@ object TaskFakeData { titulo = "Vacina Antirrábica", descricaoResumida = "Vacina obrigatória contra raiva para proteção do pet", descricaoCompleta = "Vacina antirrábica anual obrigatória. Essencial para proteção contra a raiva e exigida por lei. Deve ser aplicada por veterinário e gera certificado de vacinação.", - dataHora = "15/08/2025 - 14:00", + startAt = "15/08/2025 - 14:00", tipo = TaskTypes.VACINA, pets = listOf(samplePets[0]) ), @@ -136,7 +137,7 @@ object TaskFakeData { titulo = "Consulta de Rotina", descricaoResumida = "Check-up geral para avaliação da saúde do pet", descricaoCompleta = "Consulta veterinária de rotina para avaliação geral da saúde, verificação de peso, exame físico completo e orientações sobre cuidados preventivos.", - dataHora = "20/08/2025 - 09:15", + startAt = "20/08/2025 - 09:15", tipo = TaskTypes.CONSULTAS, pets = listOf(samplePets[1], samplePets[3]) ), @@ -145,7 +146,7 @@ object TaskFakeData { titulo = "Ração Premium", descricaoResumida = "Trocar para ração premium conforme orientação veterinária", descricaoCompleta = "Mudança gradual para ração premium de alta qualidade. Fazer transição lenta misturando com a ração atual por 7 dias. Quantidade: 200g por dia dividida em 2 refeições.", - dataHora = "18/08/2025 - 18:00", + startAt = "18/08/2025 - 18:00", tipo = TaskTypes.RACAO, pets = listOf(samplePets[0], samplePets[2], samplePets[4], samplePets[5]) ) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/DateFormatter.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/DateFormatter.kt new file mode 100644 index 00000000..a31f92da --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/DateFormatter.kt @@ -0,0 +1,36 @@ +package com.soujunior.petjournal.ui.util + +import java.time.LocalDateTime +import java.time.Month +import java.time.format.DateTimeFormatter + +object DateFormatter{ + + private val inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") + + fun formatDaily(dateString: String) : String{ + val localDateTime = LocalDateTime.parse(dateString, inputFormatter) + val day = localDateTime.dayOfMonth.toString().padStart(2, '0') + val monthName = getMonthName(localDateTime.monthValue) + return "$day de $monthName" + } + + private fun getMonthName(month: Int): String{ + return when(month){ + 1 -> "Jan" + 2 -> "Fev" + 3 -> "Mar" + 4 -> "Abr" + 5 -> "Mai" + 6 -> "Jun" + 7 -> "Jul" + 8 -> "Ago" + 9 -> "Set" + 10 -> "Out" + 11 -> "Nov" + 12 -> "Dez" + else -> "" + } + } + +} \ No newline at end of file diff --git a/petJournal/domain/build.gradle.kts b/petJournal/domain/build.gradle.kts index 268c6740..15e41ca4 100644 --- a/petJournal/domain/build.gradle.kts +++ b/petJournal/domain/build.gradle.kts @@ -33,6 +33,7 @@ android { } dependencies { + implementation("androidx.annotation:annotation-jvm:1.9.1") val dependencies = rootProject.ext["dependencies"] as Map // Obtendo as dependências do arquivo ext implementation(dependencies["coroutineCore"]!!) // Implementação da dependência coroutineCore implementation(dependencies["coroutineAndroid"]!!) // Implementação da dependência coroutineAndroid diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/DailyTaskModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/DailyTaskModel.kt new file mode 100644 index 00000000..d48ca187 --- /dev/null +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/DailyTaskModel.kt @@ -0,0 +1,11 @@ +package com.soujunior.domain.model.request.taskModels + +data class DailyTaskModel( + val title: String, + val description: String, + val note : String = "", + val start_at : String, + val end_at : String, + val tag_id : String, + val pets: List +) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/MonthlyTaskModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/MonthlyTaskModel.kt new file mode 100644 index 00000000..ca38e64e --- /dev/null +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/MonthlyTaskModel.kt @@ -0,0 +1,13 @@ +package com.soujunior.domain.model.request.taskModels + +data class MonthlyTaskModel ( + val title : String, + val description: String, + val note : String = "", + val tag_id : String, + val time : String, + val end_at: String, + val days_of_month : List, + val pets: List +) + diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/PontualTaskModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/PontualTaskModel.kt new file mode 100644 index 00000000..e915bbd9 --- /dev/null +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/PontualTaskModel.kt @@ -0,0 +1,11 @@ +package com.soujunior.domain.model.request.taskModels + +data class PontualTaskModel( + val title: String, + val description: String, + val note : String = "", + val scheduledAt : String, + val tag_id : String, + val pets: List + +) \ No newline at end of file diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/WeeklyTaskModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/WeeklyTaskModel.kt new file mode 100644 index 00000000..b9d7be46 --- /dev/null +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/WeeklyTaskModel.kt @@ -0,0 +1,12 @@ +package com.soujunior.domain.model.request.taskModels + +data class WeeklyTaskModel( + val title: String, + val description: String, + val note : String = "", + val start_at : String, + val end_at : String, + val days_of_week : List, + val tag_id : String, + val pets: List +) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt index 9b4f3e18..9a2b5c9b 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt @@ -1,5 +1,8 @@ package com.soujunior.domain.model.taskModel +import androidx.annotation.DrawableRes +import com.soujunior.domain.model.PetInformationModel + // TODO: Não editar isso enquanto o backend não fornecer um modelo para as tasks. //data class TaskModel( @@ -11,3 +14,26 @@ package com.soujunior.domain.model.taskModel // val tipo: TaskType, // val pets: List = emptyList() //) + +data class TaskTagModel( + val id: String, + val name: String, + val color: String, + @DrawableRes val icone: Int? = null, // Recebe um vetor drawable + @DrawableRes val iconeVector: Int? = null // Recebe um drawable vector +) + + +// TODO: Criar objetos para os requests pontuais/diarios/semanais/mensais +data class TaskModel( + val id: String, + val description: String, + val note : String = "", + val tagId : String, + val scheduledAt : String = "", //se for pontual + val startAt : String = "", //se for diario/ + val endAt: String = "", + val daysOfWeek : List = emptyList(), + val daysOfMonth : List = emptyList(), + val pets: List +) \ No newline at end of file From a8d8f5e8ee40539cac313c5434175e0c44047487 Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Thu, 6 Nov 2025 01:45:45 -0300 Subject: [PATCH 61/70] test(deps): add mockk-android dependency for android tests --- petJournal/app/build.gradle.kts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/petJournal/app/build.gradle.kts b/petJournal/app/build.gradle.kts index 567b704f..c312105e 100644 --- a/petJournal/app/build.gradle.kts +++ b/petJournal/app/build.gradle.kts @@ -120,7 +120,8 @@ dependencies { androidTestImplementation("androidx.test:runner:1.5.2") androidTestImplementation("androidx.arch.core:core-testing:2.1.0") - testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.5.2") + androidTestImplementation("io.mockk:mockk-android:1.12.0") + androidTestImplementation("io.mockk:mockk-agent:1.12.0") testImplementation("junit:junit:4.13.2") testImplementation("io.mockk:mockk:1.12.0") testImplementation("com.willowtreeapps.assertk:assertk-jvm:0.25") From 0ce481f1292636f5fd03d47547086e1558c1b0ff Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Thu, 6 Nov 2025 01:45:48 -0300 Subject: [PATCH 62/70] test(ui): add PetFilterList tests and expand ScreenRegisterTask tests --- .../componentes/PetFilterListTest.kt | 90 +++++++++++++++++++ .../components/ScreenRegisterTaskTest.kt | 77 ++++++++++++++-- 2 files changed, 162 insertions(+), 5 deletions(-) create mode 100644 petJournal/app/src/androidTest/java/com/soujunior/petjournal/componentes/PetFilterListTest.kt diff --git a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/componentes/PetFilterListTest.kt b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/componentes/PetFilterListTest.kt new file mode 100644 index 00000000..359d3c7f --- /dev/null +++ b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/componentes/PetFilterListTest.kt @@ -0,0 +1,90 @@ +package com.soujunior.petjournal.componentes + +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.hasParent +import androidx.compose.ui.test.hasTestTag +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.performClick +import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +import androidx.compose.ui.res.painterResource +import com.soujunior.petjournal.R // Para carregar imagens de preview +import com.soujunior.petjournal.ui.components.PetFilterList +import com.soujunior.petjournal.ui.components.Pets +import io.mockk.mockk +import org.mockito.Mockito.verify + +@RunWith(AndroidJUnit4::class) +class PetFilterListTest { + + @get:Rule + val composeTestRule = createComposeRule() + + private val mockOnSelectedPet: (String) -> Unit = mockk(relaxed = true) + + private val dummyPetList = listOf( + Pets( + id = 1, + imageRes = null, + name = "Jujuba" + ), + Pets( + id = 2, + imageRes = null, + name = "Alfredo" + ) + ) + + @Before + fun setUp() { + composeTestRule.setContent { + val listWithPainters = dummyPetList.map { + it.copy(imageRes = painterResource(id = R.drawable.penguim)) + } + + PetFilterList( + listPet = listWithPainters, + onSelectedPet = mockOnSelectedPet + ) + } + } + + @Test + fun test_PetFilterList_DisplaysItems() { + composeTestRule.onNodeWithTag("PetItem_Todos").assertIsDisplayed() + composeTestRule.onNodeWithTag("PetItem_Jujuba").assertIsDisplayed() + composeTestRule.onNodeWithTag("PetItem_Alfredo").assertIsDisplayed() + } + + @Test + fun test_PetFilterList_SelectsAndDeselectsPet() { + val jujubaSelectedIconMatcher = + hasParent(hasTestTag("PetItem_Jujuba")) and hasTestTag("SelectedIcon") + + composeTestRule.onNode(jujubaSelectedIconMatcher).assertDoesNotExist() + + composeTestRule.onNodeWithTag("PetItem_Jujuba").performClick() + + composeTestRule.onNode(jujubaSelectedIconMatcher).assertIsDisplayed() + + composeTestRule.onNodeWithTag("PetItem_Jujuba").performClick() + + composeTestRule.onNode(jujubaSelectedIconMatcher).assertDoesNotExist() + } + + @Test + fun test_PetFilterList_CallbackIsCalledOnSelection() { + composeTestRule.onNodeWithTag("PetItem_Alfredo").performClick() + + verify { mockOnSelectedPet("Alfredo") } + + composeTestRule.onNodeWithTag("PetItem_Todos").performClick() + + verify { mockOnSelectedPet("Todos") } + } +} \ No newline at end of file diff --git a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTaskTest.kt b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTaskTest.kt index b8fe2ad3..1970ae55 100644 --- a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTaskTest.kt +++ b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTaskTest.kt @@ -1,11 +1,15 @@ package com.soujunior.petjournal.ui.screens_app.screens_pets.registerTaskScreen.components +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.hasSetTextAction import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performTextInput @@ -111,7 +115,7 @@ class ScreenRegisterTaskTest { InputText( titleText = testTitle, textValue = "", - onEvent = {} + onEvent = {}, ) } @@ -126,7 +130,6 @@ class ScreenRegisterTaskTest { placeholderText = testPlaceholder, textValue = "", onEvent = {}, - hasAMask = false ) } @@ -141,7 +144,6 @@ class ScreenRegisterTaskTest { placeholderText = testPlaceholder, textValue = "Minha Tarefa", onEvent = {}, - hasAMask = false ) } @@ -154,9 +156,9 @@ class ScreenRegisterTaskTest { composeTestRule.setContent { InputText( textValue = "Ops", - onEvent = {}, isError = true, - textError = errorMessages + textError = errorMessages, + onEvent = {}, ) } errorMessages.forEach { errorMessage -> @@ -299,6 +301,61 @@ class ScreenRegisterTaskTest { composeTestRule.onNodeWithText("Recorrente").performClick() } + @Test + fun test_TransactionTypeSelector_TogglesConditionalUI_Correctly() { + + composeTestRule.setContent { + var selectedType: TransactionType? = null + + Column { + TransactionTypeSelector( + onSelectionChanged = { type -> + selectedType = type + } + ) + + when (selectedType) { + TransactionType.Recurrent -> { + Box(modifier = Modifier.testTag("RecurringTaskComponent")) { + RecurringTask( + setOf(), + onAmPmSelector = {}, + onTime = { _, _ -> }, + onWeekDaySelected = {}, + onDaySelected = {} + ) + } + } + + TransactionType.OneOff -> { + Box(modifier = Modifier.testTag("OneOffTaskComponent")) { + OneOffTask( + onDateSelected = {}, + onAmPmSelector = {}, + onTime = { _, _ -> } + ) + } + } + + null -> {} + } + } + } + + composeTestRule.onNodeWithTag("RecurringTaskComponent").assertDoesNotExist() + composeTestRule.onNodeWithTag("OneOffTaskComponent").assertDoesNotExist() + + composeTestRule.onNodeWithTag("TaskRecurrent").performClick() + + composeTestRule.onNodeWithTag("RecurringTaskComponent").assertIsDisplayed() + composeTestRule.onNodeWithTag("OneOffTaskComponent").assertDoesNotExist() + + composeTestRule.onNodeWithTag("TaskOneOff").performClick() + + composeTestRule.onNodeWithTag("RecurringTaskComponent").assertDoesNotExist() + composeTestRule.onNodeWithTag("OneOffTaskComponent").assertIsDisplayed() + } + @Test fun shouldShowOneOffTaskWhenOneOffSelected() { composeTestRule.setContent { @@ -357,4 +414,14 @@ class ScreenRegisterTaskTest { composeTestRule.onNodeWithText("Digite aqui a sua observação").performTextInput(text) } + @Test + fun test_TransactionTypeSelector_ShowsConditionalUI() { + composeTestRule.onNodeWithTag("RecurringTaskComponent").assertDoesNotExist() + + composeTestRule.onNodeWithTag("TaskRecurrent").performClick() + + composeTestRule.onNodeWithTag("RecurringTaskComponent").assertIsDisplayed() + composeTestRule.onNodeWithTag("OneOffTaskComponent").assertDoesNotExist() + } + } \ No newline at end of file From c4f3b6a5dd9f527279658fdf47a23445d58f022b Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Thu, 6 Nov 2025 01:45:52 -0300 Subject: [PATCH 63/70] refactor(ui): improve UI components with spacing and test tags --- .../petjournal/ui/components/InputText.kt | 4 +-- .../ui/components/PeriodSelector.kt | 1 + .../ui/components/PetSelectorItem.kt | 32 ++++++++++++++++--- .../ui/components/SelectableButtonData.kt | 32 ++++++++++--------- .../ui/components/TextFieldCustom.kt | 1 - .../ui/components/TransactionTypeSelector.kt | 4 +-- .../ui/components/clock/WheelTimePicker.kt | 3 +- .../ui/components/task/OneOffTask.kt | 2 +- .../ui/components/task/RecurrentTask.kt | 8 +++-- .../registerPetScreen/components/Screen.kt | 3 +- 10 files changed, 58 insertions(+), 32 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt index 687a2d50..d200d00e 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt @@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column 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 @@ -27,7 +28,6 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.draw.shadow import androidx.compose.ui.geometry.CornerRadius -import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource @@ -39,7 +39,6 @@ import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import com.soujunior.petjournal.R import com.soujunior.petjournal.ui.theme.ColorCustom @@ -77,6 +76,7 @@ fun InputText( .fillMaxWidth() ) } + Spacer(modifier = Modifier.height(8.dp)) Row { BasicTextField( modifier = textInputModifier diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PeriodSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PeriodSelector.kt index f20a537e..8f79e586 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PeriodSelector.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PeriodSelector.kt @@ -56,6 +56,7 @@ fun PeriodSelector( @Composable fun TriangleIndicator( + //TODO: colocar na tabela de cores. color: Color = Color(0xFF8D4CD2), modifier: Modifier = Modifier .width(60.dp) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt index 2c4eaa32..6d991f39 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt @@ -31,6 +31,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.VectorPainter import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight @@ -77,6 +78,7 @@ fun PetIcon( modifier = Modifier .size(32.dp) .offset(y = 4.dp) + .testTag("SelectedIcon") ) } @@ -129,6 +131,7 @@ fun PetFilterItem( modifier = Modifier .padding(start = 8.dp, end = 8.dp) .clickable { onSelect(name) } + .testTag("PetItem_$name") ) { PetIcon( imageRes = if (name == "Todos") painterResource(id = R.drawable.icon_pet_selected) else imageRes, @@ -160,9 +163,9 @@ fun PetFilterList( var selectedPets by remember { mutableStateOf(listOf()) } - Column(modifier = Modifier.padding(16.dp)) { + Column(modifier = Modifier) { Text( - text = "Quais pets precisam dessa tarefa?", + text = stringResource(R.string.which_pets_need_this_task), color = MaterialTheme.colorScheme.scrim, fontWeight = FontWeight(500), style = MaterialTheme.typography.titleMedium @@ -171,12 +174,12 @@ fun PetFilterList( LazyRow( modifier = Modifier .fillMaxWidth() - .padding(top = 20.dp, start = 10.dp), + .padding(top = 8.dp, start = 10.dp), horizontalArrangement = Arrangement.spacedBy(8.dp) ) { item { PetFilterItem( - name = "Todos", + name = stringResource(R.string.label_all_pets), isSelected = selectedPets.contains(stringResource(R.string.label_all_pets)), imageRes = null, onSelect = { name -> @@ -225,7 +228,26 @@ fun PetFilterListPreview() { id = 2, imageRes = painterResource(R.drawable.image_alfredo), name = "Alfredo" - ) + ),Pets( + id = 1423, + imageRes = painterResource(R.drawable.image_jujuba), + name = "Jujuba" + ), + Pets( + id = 245, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ), + Pets( + id = 1455, + imageRes = painterResource(R.drawable.image_jujuba), + name = "Jujuba" + ), + Pets( + id = 6452, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ) ) PetFilterList( diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt index 7924a58c..c2ab27ac 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt @@ -1,6 +1,7 @@ package com.soujunior.petjournal.ui.components import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ExperimentalLayoutApi import androidx.compose.foundation.layout.FlowRow @@ -8,6 +9,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text @@ -38,7 +40,7 @@ fun SelectableButton( modifierSelectableButton: Modifier = Modifier, onSelectionChanged: (String, Boolean) -> Unit ) { - androidx.compose.material3.Button( + Button( modifier = modifierSelectableButton .height(40.dp) .then( @@ -78,19 +80,21 @@ fun SelectableButton( } } + + @OptIn(ExperimentalLayoutApi::class) @Composable fun GroupSelectableButton( listOfTasks: List, - onSelection: (String) -> Unit = {} + onSelection: (String) -> Unit = {}, + modifier: Modifier = Modifier, + maxItemsInEachRow: Int = Int.MAX_VALUE ) { - val selectionState = remember { mutableStateListOf(*Array(listOfTasks.size) { false }) } Column( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp) + modifier = modifier, + verticalArrangement = Arrangement.spacedBy(8.dp) ) { Text( text = stringResource(R.string.label_select_main_category), @@ -99,11 +103,10 @@ fun GroupSelectableButton( fontWeight = FontWeight(500), lineHeight = 24.sp ) - FlowRow( - modifier = Modifier - .fillMaxWidth() - .padding(top = 15.dp) + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(15.dp), + maxItemsInEachRow = maxItemsInEachRow ) { listOfTasks.forEachIndexed { index, buttonInfo -> SelectableButton( @@ -120,7 +123,7 @@ fun GroupSelectableButton( }, modifierSelectableButton = Modifier .adaptiveWidthForTitle(buttonInfo.title) - .padding(bottom = 15.dp, end = 15.dp) + .padding(bottom = 15.dp) ) } } @@ -133,10 +136,9 @@ data class SelectableButtonInfo( val color: Color ) - -@Preview(showBackground = true, showSystemUi = true, device = "id:pixel_4_xl") +@Preview() @Composable -fun CustomSelectableButtonPreview() { +fun CustomSelectableButtonWithoutDevicePreview() { val listOfTasks = listOf( SelectableButtonInfo( stringResource(R.string.label_selectable_button_vaccines), @@ -164,4 +166,4 @@ fun CustomSelectableButtonPreview() { ), ) GroupSelectableButton(listOfTasks) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt index d8318f72..d7ce79f6 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TextFieldCustom.kt @@ -28,7 +28,6 @@ fun TextFieldCustom( ) { Column( modifier = modifier - .padding(start = 16.dp, end = 16.dp) ) { Text( text = title, diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt index fbdacd92..898ad828 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt @@ -42,12 +42,12 @@ fun TransactionTypeSelector( Column( horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.fillMaxWidth() + modifier = Modifier ) { Row( horizontalArrangement = Arrangement.spacedBy(16.dp), verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.padding(16.dp) + modifier = Modifier ) { ToggleButton( text = stringResource(R.string.label_recurrent), diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt index ceadee14..4745640c 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt @@ -23,6 +23,7 @@ import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.TextStyle @@ -227,7 +228,7 @@ private fun PickerColumn( color = if (isFocused) focusedColor else unfocusedColor, fontSize = 34.sp ), -// modifier = Modifier.alpha(alpha) + modifier = Modifier//.alpha(alpha) ) } } diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/OneOffTask.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/OneOffTask.kt index 3edf7ff7..90fd3575 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/OneOffTask.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/OneOffTask.kt @@ -22,7 +22,7 @@ fun OneOffTask( ) { var selectedTimestamp by remember { mutableStateOf(null) } - Column(modifier = Modifier.padding(start = 20.dp, end = 20.dp)) { + Column(modifier = Modifier) { CustomDatePicker( label = "Data", value = selectedTimestamp, diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/RecurrentTask.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/RecurrentTask.kt index df35b3d9..06a2e449 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/RecurrentTask.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/RecurrentTask.kt @@ -56,7 +56,8 @@ fun RecurringTask( Row( modifier = Modifier .fillMaxWidth() - .padding(top = 16.dp), +// .padding(top = 16.dp) +, horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically ) { @@ -74,7 +75,7 @@ fun RecurringTask( ) Box( modifier = Modifier - .padding(start = 8.dp) +// .padding(start = 8.dp) .height(150.dp) .width(100.dp), contentAlignment = Alignment.Center @@ -93,7 +94,8 @@ fun RecurringTask( Row( modifier = Modifier .fillMaxWidth() - .padding(top = 16.dp), +// .padding(top = 16.dp) + , horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically ) { diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/Screen.kt index 6e3a9ac8..3cc0bb74 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/Screen.kt @@ -49,8 +49,7 @@ fun Screen(navController: NavController) { ScaffoldCustom( modifier = Modifier .navigationBarsPadding() - .fillMaxSize() - , + .fillMaxSize(), navigationUp = navController, showTopBar = true, titleTopBar = stringResource(R.string.edit_pet_data), From fac9f5b953e8b090b2a2e81bb9d7d5ff036e6301 Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Thu, 6 Nov 2025 01:45:55 -0300 Subject: [PATCH 64/70] feat(ui): improve register task screen layout and functionality --- .../components/ScreenRegisterTask.kt | 205 +++++++++++++++++- .../app/src/main/res/values/strings.xml | 1 + 2 files changed, 200 insertions(+), 6 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt index 9e9f8abf..bb3dd269 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt @@ -1,11 +1,18 @@ package com.soujunior.petjournal.ui.screens_app.screens_pets.registerTaskScreen.components import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material.ModalDrawer import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -16,6 +23,7 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController import com.soujunior.petjournal.R @@ -31,6 +39,7 @@ import com.soujunior.petjournal.ui.components.TransactionTypeSelector import com.soujunior.petjournal.ui.components.task.OneOffTask import com.soujunior.petjournal.ui.components.task.RecurringTask import com.soujunior.petjournal.ui.theme.ColorCustom +import com.soujunior.petjournal.ui.theme.PetJournalTheme import com.soujunior.petjournal.ui.util.TransactionType import ir.kaaveh.sdpcompose.sdp @@ -121,6 +130,8 @@ fun ScreenRegisterTask(navController: NavController) { modifier = Modifier, navigationUp = navController, showTopBar = true, + //todo: o valor desse Title bar precisa ser passado por parametro, + // assim ele se comportara tanto como "Nova tarefa" quanto "Editar tarefa". titleTopBar = stringResource(R.string.label_new_task), showBottomBarNavigation = true, contentToUse = { paddingValues -> @@ -135,14 +146,11 @@ fun ScreenRegisterTask(navController: NavController) { modifier = Modifier .fillMaxSize() .padding(paddingValues), + verticalArrangement = Arrangement.spacedBy(12.sdp), + contentPadding = PaddingValues(horizontal = 14.sdp), content = { item { - GroupSelectableButton( - listOfTasks, - onSelection = { - - } - ) + GroupSelectableButton(listOfTasks) } item { InputText( @@ -243,4 +251,189 @@ fun ScreenRegisterTask(navController: NavController) { fun ScreenRegisterTaskPreview() { val nav = rememberNavController() ScreenRegisterTask(nav) +} + + +private val listOfTasks = listOf( + SelectableButtonInfo( + "Vacinas", + ColorCustom.color_selectable_button_1 + ), + SelectableButtonInfo( + "Consultas", + ColorCustom.color_selectable_button_2 + ), + SelectableButtonInfo( + "Remédios", + ColorCustom.color_selectable_button_3 + ), + SelectableButtonInfo( + "Banho", + ColorCustom.color_selectable_button_4 + ), + SelectableButtonInfo( + "Comida", + ColorCustom.color_selectable_button_5 + ), + SelectableButtonInfo( + "Passeio", + ColorCustom.color_selectable_button_6 + ), +) + +@Preview(showBackground = true) +@Composable +fun GroupSelectableButtonPreview() { + PetJournalTheme { + GroupSelectableButton( + listOfTasks, + onSelection = { + + } + ) + } +} + +@Preview(showBackground = true) +@Composable +fun InputTextTaskNamePreview() { + val nameTask = remember { mutableStateOf("") } + PetJournalTheme { + InputText( + modifier = Modifier.testTag("inputFieldTag"), + placeholderText = stringResource(R.string.enter_task_name_here), + titleText = stringResource(R.string.task_name), + textValue = nameTask.value, + onEvent = { t -> + nameTask.value = t + }, + ) + } +} + +@Preview(showBackground = true) +@Composable +fun TextFieldCustomDescriptionPreview() { + val desc = remember { mutableStateOf("") } + PetJournalTheme { + TextFieldCustom( + title = stringResource(R.string.label_description), + placeholder = stringResource(R.string.enter_the_task_description_here), + value = desc.value, + onValueChange = { d -> + desc.value = d + } + ) + } +} + +@Preview(showBackground = true) +@Composable +fun PetFilterListPreview() { + val listPet = listOf( + Pets( + id = 1, + imageRes = painterResource(R.drawable.image_jujuba), + name = "Jujuba" + ), + Pets( + id = 2, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ), + Pets( + id = 3, + imageRes = painterResource(R.drawable.image_alfredo), + name = "Alfredo" + ) + ) + PetJournalTheme { + PetFilterList( + listPet, + onSelectedPet = { + + } + ) + } +} + +@Preview(showBackground = true) +@Composable +fun TransactionTypeSelectorPreview() { + var selectedType by remember { mutableStateOf(null) } + PetJournalTheme { + TransactionTypeSelector( + onSelectionChanged = { type -> + selectedType = type + } + ) + } +} + +@Preview(showBackground = true) +@Composable +fun RecurringTaskPreview() { + PetJournalTheme { + RecurringTask( + setOf(), + onAmPmSelector = { + + }, + onTime = { hour, minute -> + + }, + onWeekDaySelected = { + + }, + onDaySelected = { + + } + ) + } +} + +@Preview(showBackground = true) +@Composable +fun OneOffTaskPreview() { + PetJournalTheme { + OneOffTask( + onDateSelected = { + + }, + onAmPmSelector = { + + }, + onTime = { hour, minute -> + + } + ) + } +} + +@Preview(showBackground = true) +@Composable +fun TextFieldCustomObservationPreview() { + val ob = remember { mutableStateOf("") } + PetJournalTheme { + TextFieldCustom( + title = stringResource(R.string.label_observation), + placeholder = stringResource(R.string.enter_your_observation_here), + value = ob.value, + onValueChange = { o -> + ob.value = o + } + ) + } +} + +@Preview(showBackground = true) +@Composable +fun Button3SaveTaskPreview() { + PetJournalTheme { + Button3( + submit = { /*TODO*/ }, + enableButton = true, + text = stringResource(R.string.label_save_task) + ) + } } \ No newline at end of file diff --git a/petJournal/app/src/main/res/values/strings.xml b/petJournal/app/src/main/res/values/strings.xml index 6bcf5344..c85b4cf4 100644 --- a/petJournal/app/src/main/res/values/strings.xml +++ b/petJournal/app/src/main/res/values/strings.xml @@ -167,4 +167,5 @@ Observação Digite aqui a sua observação Salvar + Quais pets precisam dessa tarefa? \ No newline at end of file From 63bc817660ffebaeaa3f7b5370ea606317ac3658 Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Thu, 6 Nov 2025 01:45:58 -0300 Subject: [PATCH 65/70] refactor(navigation): restore PresentationManager in MainActivity --- .../java/com/soujunior/petjournal/navigation/MainActivity.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/MainActivity.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/MainActivity.kt index 65eed297..651c5e25 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/MainActivity.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/MainActivity.kt @@ -18,9 +18,7 @@ class MainActivity : ComponentActivity() { WindowCompat.setDecorFitsSystemWindows(window, false) setContent { ChangeSystemBars() -// PresentationManager() - val nav = rememberNavController() - ScreenRegisterTask(nav) + PresentationManager() } } } From a282520cb7f32a97f756774f824851bcb9a455ae Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Fri, 7 Nov 2025 18:15:32 -0300 Subject: [PATCH 66/70] feat: add task cards component and pre-commit config --- .github/workflows/petJournalAndroid.yml | 2 +- .idea/workspace.xml | 2 +- README.md | 4 +- doc/architecture/architecture.md | 14 ++--- doc/pattern/FormEvent.md | 8 +-- doc/pattern/FormState.md | 2 +- doc/pattern/FormStateAndFormFormEvent.md | 2 +- doc/screens/Screens.md | 60 +++++++++---------- doc/screens/aguardando_codigo.md | 7 +-- doc/screens/ambiente_do_usuario.md | 6 +- doc/screens/cadastro.md | 7 +-- doc/screens/esqueceu_a_senha.md | 8 +-- doc/screens/login.md | 7 +-- doc/screens/splash_screen.md | 3 +- doc/screens/tela_padrao_especie.md | 4 +- doc/screens/tela_padrao_inicial.md | 8 +-- doc/screens/tela_padrao_raca_e_porte.md | 2 +- doc/screens/troque_a_senha.md | 7 +-- petJournal/.gitignore | 2 +- petJournal/.pre-commit-config.yaml | 16 +++++ petJournal/app/.gitignore | 2 +- petJournal/app/build.gradle.kts | 2 +- petJournal/app/proguard-rules.pro | 2 +- .../petjournal/ExampleInstrumentedTest.kt | 2 +- .../LoginAccountConfirmationDialogTest.kt | 2 +- .../NameGenderInstrumentedTest.kt | 2 +- .../NavHostMainContentInstrumentedTest.kt | 2 +- .../petjournal/navigation/navHostMock.kt | 2 +- .../screen_pets/RegisterPetScreenTest.kt | 2 +- .../application/PetJournalApplicationKoin.kt | 2 +- .../petjournal/navigation/NavHostElements.kt | 2 - .../petjournal/ui/components/AmPmSelector.kt | 2 +- .../petjournal/ui/components/Breadcrumb.kt | 2 +- .../petjournal/ui/components/Button.kt | 2 +- .../petjournal/ui/components/Button2.kt | 2 +- .../petjournal/ui/components/CardButton.kt | 3 - .../ui/components/CreateTitleAndImageLogo.kt | 2 +- .../ui/components/DashedInputText.kt | 2 +- .../petjournal/ui/components/DateInputText.kt | 3 - .../petjournal/ui/components/DayButton.kt | 2 +- .../ui/components/DualActionButton.kt | 2 +- .../HeaderImageLogoImagePasswordAndTitle.kt | 2 +- .../petjournal/ui/components/ImageLogo.kt | 2 - .../petjournal/ui/components/ImagePet.kt | 2 - .../IndeterminateCircularIndicator.kt | 2 +- .../petjournal/ui/components/InputSpecies.kt | 2 +- .../petjournal/ui/components/InputText.kt | 2 +- .../petjournal/ui/components/LoadingText.kt | 2 +- .../petjournal/ui/components/MenuRow.kt | 2 +- .../petjournal/ui/components/NavigationBar.kt | 2 +- .../petjournal/ui/components/PetItem.kt | 2 +- .../ui/components/PetSelectorItem.kt | 2 +- .../petjournal/ui/components/PrivacyPolicy.kt | 2 +- .../ui/components/PrivacyPolicyCheckbox.kt | 2 +- .../ui/components/RadioButtonWithText.kt | 2 +- .../petjournal/ui/components/RoundedSquare.kt | 2 +- .../ui/components/ScaffoldCustom.kt | 2 +- .../ui/components/SelectableButtonData.kt | 2 +- .../petjournal/ui/components/Shimmer.kt | 2 +- .../petjournal/ui/components/TaskCard.kt | 1 - .../ui/components/WeekDaySelector.kt | 2 +- .../ui/components/clock/WheelTimePicker.kt | 2 +- .../ui/components/data/CustomDatePicker.kt | 4 +- .../petjournal/ui/components/mask/MaskDate.kt | 2 +- .../ui/components/mask/MaskPhone.kt | 2 +- .../AwaitingCodeFormEvent.kt | 2 +- .../awaitingCodeScreen/AwaitingCodeScreen.kt | 1 - .../AwaitingCodeViewModel.kt | 2 +- .../awaitingCodeScreen/components/Footer.kt | 2 +- .../awaitingCodeScreen/components/Header.kt | 2 +- .../components/OTPTextField.kt | 2 +- .../awaitingCodeScreen/components/Screen.kt | 2 +- .../components/VerificationCodeInput.kt | 2 +- .../ChangePasswordScreen.kt | 2 +- .../ChangePasswordViewModel.kt | 2 +- .../ChangePasswordViewModelImpl.kt | 2 +- .../LogoutDevicesChangingPassword.kt | 2 +- .../ForgotPasswordFormState.kt | 2 +- .../ForgotPasswordScreen.kt | 2 +- .../ForgotPasswordViewModel.kt | 2 +- .../ForgotPasswordViewModelImpl.kt | 2 +- .../forgotPasswordScreen/components/Footer.kt | 2 +- .../forgotPasswordScreen/components/Screen.kt | 2 +- .../loginScreen/LoginFormState.kt | 2 +- .../loginScreen/LoginScreen.kt | 2 +- .../loginScreen/LoginViewModel.kt | 2 +- .../loginScreen/LoginViewModelImpl.kt | 2 +- .../components/AccountConfirmationDialog.kt | 2 +- .../loginScreen/components/Footer.kt | 2 +- .../RememberPasswordAndForgotSection.kt | 2 +- .../registerScreen/RegisterFormEvent.kt | 2 +- .../registerScreen/RegisterScreen.kt | 2 +- .../registerScreen/RegisterViewModel.kt | 2 +- .../registerScreen/RegisterViewModelImpl.kt | 2 +- .../registerScreen/components/Screen.kt | 2 +- .../registerScreen/state/StatesRegister.kt | 2 +- .../homeScreen/HomeScreenViewModelImpl.kt | 2 +- .../screen_home/homeScreen/HomeState.kt | 2 +- .../homeScreen/components/Carousel.kt | 1 - .../screen_home/homeScreen/components/Menu.kt | 1 - .../homeScreen/components/NaturalModel.kt | 2 +- .../homeScreen/components/Screen.kt | 2 +- .../screen_tutor/tutorScreen/TutorScreen.kt | 2 +- .../splashScreen/SplashScreen.kt | 2 +- .../splashScreen/SplashViewModel.kt | 2 +- .../IntroRegisterPetScreen.kt | 2 +- .../IntroRegisterPetViewModel.kt | 2 +- .../IntroRegisterPetViewModelImpl.kt | 2 +- .../components/GridVectors.kt | 2 +- .../components/Header.kt | 2 +- .../components/Screen.kt | 2 +- .../petBirthDateScreen/BirthDateFormState.kt | 1 - .../petBirthDateScreen/BirthDateViewModel.kt | 2 +- .../BirthDateViewModelImpl.kt | 2 +- .../petBirthDateScreen/PetBirthDateScreen.kt | 2 - .../components/CastrationSelector.kt | 2 +- .../petBirthDateScreen/components/Header.kt | 2 +- .../petBirthDateScreen/components/Screen.kt | 2 +- .../petListScreen/PetListScreen.kt | 2 +- .../petListScreen/PetListViewModel.kt | 2 +- .../petListScreen/PetListViewModelImpl.kt | 2 +- .../petListScreen/components/PetItemMore.kt | 2 +- .../petListScreen/components/Screen.kt | 2 +- .../NameGenderFormState.kt | 1 - .../PetNameAndGenderScreen.kt | 2 - .../ViewModelNameGender.kt | 2 +- .../ViewModelNameGenderImpl.kt | 2 +- .../components/GenderSelector.kt | 4 +- .../components/Header.kt | 2 +- .../components/Screen.kt | 2 +- .../petRaceAndSizeScreen/RaceSizeFormState.kt | 1 - .../petRaceAndSizeScreen/ViewModelRaceSize.kt | 2 +- .../ViewModelRaceSizeImpl.kt | 2 +- .../petRaceAndSizeScreen/components/Header.kt | 2 +- .../petRaceAndSizeScreen/components/Screen.kt | 2 +- .../registerPetScreen/RegisterPetScreen.kt | 2 +- .../registerPetScreen/ViewModelRegisterPet.kt | 2 +- .../registerPetScreen/components/Screen.kt | 2 +- .../ViewModelChoiceSpecies.kt | 2 +- .../ViewModelChoiceSpeciesImpl.kt | 2 +- .../components/GridVectors.kt | 2 +- .../speciesChoiceScreen/components/Header.kt | 2 +- .../speciesChoiceScreen/components/Screen.kt | 2 +- .../taskListScreen/TaskListEvent.kt | 2 +- .../taskListScreen/TaskListScreen.kt | 2 +- .../taskListScreen/TaskListState.kt | 2 +- .../taskListScreen/TaskListViewModel.kt | 2 +- .../taskListScreen/TaskListViewModelImpl.kt | 2 +- .../taskListScreen/components/Screen.kt | 3 - .../taskListScreen/components/TabSelector.kt | 2 +- .../components/TaskDateComponent.kt | 1 - .../soujunior/petjournal/ui/states/States.kt | 2 +- .../petjournal/ui/states/TaskState.kt | 2 +- .../soujunior/petjournal/ui/theme/Color.kt | 2 +- .../soujunior/petjournal/ui/theme/Shapes.kt | 2 +- .../soujunior/petjournal/ui/theme/Theme.kt | 2 +- .../petjournal/ui/theme/Typography.kt | 2 +- .../ui/util/AdaptiveWidthForTitle.kt | 2 +- .../soujunior/petjournal/ui/util/Constants.kt | 2 +- .../petjournal/ui/util/DateFormatter.kt | 2 +- .../petjournal/ui/util/GetScreenInch.kt | 2 +- .../petjournal/ui/util/ToggleList.kt | 2 +- .../com/soujunior/petjournal/ui/util/Util.kt | 2 +- .../petjournal/ui/util/ValidationEvent.kt | 2 +- .../petjournal/ui/util/calcDefault.kt | 2 +- .../app/src/main/res/drawable/ic_home.xml | 1 - .../app/src/main/res/drawable/logo_roxo.xml | 40 ++++++------- .../app/src/main/res/drawable/logo_white.xml | 40 ++++++------- .../main/res/mipmap-anydpi-v26/icon_app.xml | 2 +- .../res/mipmap-anydpi-v26/icon_app_round.xml | 2 +- petJournal/app/src/main/res/values/colors.xml | 2 +- .../main/res/values/icon_app_background.xml | 2 +- .../src/main/res/values/privacy_policy.xml | 2 +- petJournal/app/src/main/res/values/splash.xml | 2 +- .../app/src/main/res/values/strings.xml | 2 +- petJournal/app/src/main/res/values/themes.xml | 2 +- .../app/src/main/res/xml/backup_rules.xml | 2 +- .../main/res/xml/data_extraction_rules.xml | 2 +- .../soujunior/petjournal/setup/FormMock.kt | 1 - .../petjournal/setup/MainCoroutineRule.kt | 2 +- .../ui/awaitingCodeScreen/AwaitingCodeTest.kt | 2 +- .../ChangePasswordViewModelTest.kt | 2 +- .../ForgotPasswordMethodTest.kt | 2 +- .../ui/loginScreen/LoginMethodTest.kt | 2 +- .../petBirthDate/PetBirthDateViewModelTest.kt | 2 +- .../petNameAndGender/PetNameViewModelTest.kt | 2 +- .../PetViewModelRaceSizeTest.kt | 2 +- .../ui/registerScreen/RegisterMethodTest.kt | 2 +- petJournal/data/.gitignore | 2 +- petJournal/data/build.gradle.kts | 2 +- petJournal/data/proguard-rules.pro | 2 +- petJournal/data/src/main/AndroidManifest.xml | 2 +- .../com/soujunior/data/remote/AuthService.kt | 2 +- .../soujunior/data/remote/GuardianService.kt | 2 +- .../adapters/NetworkResultCallAdapter.kt | 2 +- .../adapters/internal/NetworkResultCall.kt | 2 +- .../NetworkResultCallAdapterFactory.kt | 2 +- .../data/repository/AppInfoDataImpl.kt | 2 +- .../data/repository/AuthRepositoryImpl.kt | 2 +- .../data/util/checker/NetworkChecker.kt | 2 +- .../soujunior/data/util/manager/JwtManager.kt | 2 +- petJournal/database/.gitignore | 2 +- petJournal/database/build.gradle | 1 - petJournal/database/proguard-rules.pro | 2 +- .../database/src/main/AndroidManifest.xml | 2 +- .../database/converter/Converter.kt | 2 +- .../database/dao/ApplicationInformationDao.kt | 1 - .../database/entity/GuardianProfile.kt | 2 +- .../database/entity/PetInformation.kt | 2 - .../repository/AppInfoDataBaseImpl.kt | 2 +- .../repository/GuardianLocalDataSourceImpl.kt | 2 +- .../java/com/petjournal/setup/FormMock.kt | 1 - petJournal/dependencies.gradle | 2 +- petJournal/domain/.gitignore | 2 +- petJournal/domain/build.gradle.kts | 2 +- petJournal/domain/proguard-rules.pro | 2 +- .../domain/src/main/AndroidManifest.xml | 2 +- .../domain/model/PetInformationModel.kt | 2 +- .../com/soujunior/domain/model/mapper/User.kt | 2 +- .../domain/model/request/AwaitingCodeModel.kt | 2 +- .../model/request/ChangePasswordModel.kt | 2 +- .../model/request/ForgotPasswordModel.kt | 2 +- .../domain/model/request/LoginModel.kt | 2 +- .../domain/model/request/PetRaceItemModel.kt | 2 +- .../domain/model/request/PetSizeItemModel.kt | 2 +- .../domain/model/request/SignUpModel.kt | 2 +- .../request/taskModels/MonthlyTaskModel.kt | 1 - .../request/taskModels/PontualTaskModel.kt | 2 +- .../model/response/AccessTokenResponse.kt | 2 +- .../model/response/GuardianNameResponse.kt | 2 +- .../domain/model/response/MessageResponse.kt | 2 +- .../domain/model/response/PetResponse.kt | 2 +- .../domain/model/response/UserInfoResponse.kt | 2 +- .../domain/model/taskModel/TaskModel.kt | 4 +- .../soujunior/domain/network/NetworkResult.kt | 2 +- .../domain/repository/AppInfoDataBase.kt | 2 +- .../repository/AppInfoDataBaseRepository.kt | 2 +- .../domain/repository/AuthRepository.kt | 2 +- .../repository/GuardianLocalDataSource.kt | 2 +- .../domain/repository/GuardianRepository.kt | 2 +- .../domain/repository/ValidationRepository.kt | 2 +- .../use_case/auth/AwaitingCodeUseCase.kt | 2 +- .../use_case/auth/ChangePasswordUseCase.kt | 2 +- .../use_case/auth/CheckLoginStatusUseCase.kt | 2 +- .../use_case/auth/ForgotPasswordUseCase.kt | 2 +- .../use_case/auth/GetSavedPasswordUseCase.kt | 2 +- .../domain/use_case/auth/LoginUseCase.kt | 2 +- .../domain/use_case/auth/SignUpUseCase.kt | 2 +- .../domain/use_case/base/BaseUseCase.kt | 2 +- .../domain/use_case/base/DataResult.kt | 1 - .../guardian/GetGuardianNameUseCase.kt | 2 +- .../guardian/GetPetRegistrationWentLive.kt | 2 +- .../guardian/SetPetRegistrationWentLive.kt | 2 +- .../use_case/pet/GetListPetRacesUseCase.kt | 2 +- .../use_case/pet/GetListPetSizesUseCase.kt | 2 +- .../domain/src/main/res/values/strings.xml | 2 +- .../domain/setup/MainCoroutineRule.kt | 2 +- .../use_case/auth/AwaitingCodeUseCaseTest.kt | 2 +- .../pet/CreatePetInformationApiUseCaseTest.kt | 2 +- .../pet/GetListPetRacesUseCaseTest.kt | 2 +- .../pet/GetListPetSizesUseCaseTest.kt | 2 +- .../pet/GetPetInformationUseCaseTest.kt | 2 +- .../pet/SavePetInformationUseCaseTest.kt | 2 +- .../pet/UpdatePetInformationUseCaseTest.kt | 2 +- .../usecase/auth/ChangePasswordUseCaseTest.kt | 2 +- petJournal/gradle.properties | 2 +- 266 files changed, 353 insertions(+), 380 deletions(-) create mode 100644 petJournal/.pre-commit-config.yaml diff --git a/.github/workflows/petJournalAndroid.yml b/.github/workflows/petJournalAndroid.yml index 69484275..c1b2acac 100644 --- a/.github/workflows/petJournalAndroid.yml +++ b/.github/workflows/petJournalAndroid.yml @@ -66,7 +66,7 @@ jobs: # JAVA_HOME: /opt/hostedtoolcache/Java_1.8.0 # - name: Run unit tests - # run: ./gradlew test + # run: ./gradlew test # working-directory: petJournal # - name: Upload unit tests report diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 26173778..3617d00e 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -48,4 +48,4 @@ - \ No newline at end of file + diff --git a/README.md b/README.md index 0f0ffdc7..77cf1e88 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Ao entrar em nosso projeto voluntário, valorizamos sua contribuição e entusia ## 4. Telas e seus diagramas de funcionamento -Nesta seção, você encontrará informações detalhadas sobre as diferentes telas do nosso aplicativo e sobre seus funcionamentos. +Nesta seção, você encontrará informações detalhadas sobre as diferentes telas do nosso aplicativo e sobre seus funcionamentos. - [Splash](doc/screens/splash_screen.md) - [Login](doc/screens/login.md) - [Cadastro](doc/screens/cadastro.md) @@ -52,7 +52,7 @@ Nesta seção, você encontrará informações detalhadas sobre as diferentes te ## 5. Padrões de Design e Melhores Práticas - Utilizamos os recursos a baixo em nosso app, o que torna importante conhecer tais padrões. + Utilizamos os recursos a baixo em nosso app, o que torna importante conhecer tais padrões. - [FormEvent](doc/pattern/FormEvent.md) - [FormState](doc/pattern/FormState.md) - [FormState e FormEvent](doc/pattern/FormStateAndFormEvent.md) diff --git a/doc/architecture/architecture.md b/doc/architecture/architecture.md index 18f9d6dc..fb4b68b9 100644 --- a/doc/architecture/architecture.md +++ b/doc/architecture/architecture.md @@ -1,20 +1,20 @@ - **Visão Geral da Arquitetura**: MVVM para separação da lógica de negócios e interface do usuário. - + ![arquitetura-basic.svg](https://github.com/PetJournal/petjournal.android/assets/42920754/13b05a7f-afe4-466f-8cb3-8e753fffb0dc) - + - **Diagrama da Arquitetura expandido**: - + ![arquitetura-Cópia do arquitetura.drawio.svg](https://github.com/PetJournal/petjournal.android/assets/42920754/4b80e624-e101-42aa-9708-0565b4f99d54) - + - **Organização das pastas:** - **Modulos** : ![modulos.png](https://github.com/PetJournal/petjournal.android/assets/42920754/3ccdde18-4ae3-4717-993b-6144b4857322) - + - **App, Domain, Data, Database** : - -

+ +

diff --git a/doc/pattern/FormEvent.md b/doc/pattern/FormEvent.md index 86bad7c9..fd14bd8d 100644 --- a/doc/pattern/FormEvent.md +++ b/doc/pattern/FormEvent.md @@ -26,12 +26,12 @@ Para utilizar um padrão semelhante em outras telas, siga estas etapas: val error: String? = null ) ``` - + ```kotlin class ScreenViewModel : ViewModel() { private val _state = MutableLiveData() val state: LiveData = _state - + fun onEvent(event: ScreenEvent) { when (event) { is ScreenEvent.EventA -> { @@ -46,7 +46,7 @@ Para utilizar um padrão semelhante em outras telas, siga estas etapas: } } } - + ``` 3. **Emita eventos a partir da UI**: Na interface do usuário, emita os eventos apropriados em resposta às ações do usuário. ```kotlin @@ -75,4 +75,4 @@ Usar `FormEvent` ajuda a manter uma arquitetura clara e reativa, facilitando o g --- -Nota: Sinta-se à vontade para adaptar ou expandir este texto conforme necessário para nossa documentação! \ No newline at end of file +Nota: Sinta-se à vontade para adaptar ou expandir este texto conforme necessário para nossa documentação! diff --git a/doc/pattern/FormState.md b/doc/pattern/FormState.md index 68064fb0..35608a14 100644 --- a/doc/pattern/FormState.md +++ b/doc/pattern/FormState.md @@ -67,4 +67,4 @@ Utilizar o `FormState` ajuda a manter seu código organizado, facilita a leitura --- -Nota: Sinta-se à vontade para adaptar ou expandir este texto conforme necessário para nossa documentação! \ No newline at end of file +Nota: Sinta-se à vontade para adaptar ou expandir este texto conforme necessário para nossa documentação! diff --git a/doc/pattern/FormStateAndFormFormEvent.md b/doc/pattern/FormStateAndFormFormEvent.md index d0319ea2..ab9c7b60 100644 --- a/doc/pattern/FormStateAndFormFormEvent.md +++ b/doc/pattern/FormStateAndFormFormEvent.md @@ -85,4 +85,4 @@ A integração de `FormState` e `FormEvent` oferece uma maneira organizada e efi --- -Nota: Sinta-se à vontade para adaptar ou expandir este texto conforme necessário para nossa documentação! \ No newline at end of file +Nota: Sinta-se à vontade para adaptar ou expandir este texto conforme necessário para nossa documentação! diff --git a/doc/screens/Screens.md b/doc/screens/Screens.md index 35f7202a..95cf3a00 100644 --- a/doc/screens/Screens.md +++ b/doc/screens/Screens.md @@ -4,81 +4,81 @@ - **Fluxo de Navegação**: Transição para a tela de Login. - **Componentes Principais**: Logo do app e animação. - **UX/Design:** - + - + - **Login:** - **Descrição**: Tela para autenticação do usuário. - **Componentes Principais**: Campos de email e senha, botões de login. - **Diagrama UML:** - + ![fluxoTelas-login.svg](https://github.com/PetJournal/petjournal.android/assets/42920754/3cae1a55-fe11-42f5-b05b-345c968521d8) - + - **UX/Design:** - + - + - **Cadastro:** - **Descrição**: Tela para cadastrar uma nova conta. - **Diagrama UML:** - + ![fluxoTelas-registro.drawio.svg](https://github.com/PetJournal/petjournal.android/assets/42920754/8ef35f86-7653-45d4-95e4-3f37da3f589f) - + - **UX/Design:** - + - - + + - **Esqueceu a senha:** - **Diagrama UML:** - + ![fluxoTelas-esqueceu_sua_senha.drawio.svg](https://github.com/PetJournal/petjournal.android/assets/42920754/7f71071b-64d3-4e48-bd24-28e1289cd577g) - + - **UX/Design:** - + - - + + - **Aguardando código:** - **Diagrama UML:** - + ![fluxoTelas-aguardando_codigo.drawio.svg](https://github.com/PetJournal/petjournal.android/assets/42920754/adf3322a-e755-41d8-908c-33a5d8a86aba) - + - **UX/Design:** - + - + - **Troque a senha:** - **Diagrama UML:** - + ![fluxoTelas-troque_sua_senha.drawio.svg](https://github.com/PetJournal/petjournal.android/assets/42920754/84c9e097-405c-4a67-a78c-3d62900b9e16) - + - **UX/Design:** - + - **Ambiente do usuário:** - **Diagrama UML:** - - ![Home](https://github.com/PetJournal/petjournal.android/assets/42920754/26a580eb-4d1d-4aac-a1ba-ef8e33652bb5) + + ![Home](https://github.com/PetJournal/petjournal.android/assets/42920754/26a580eb-4d1d-4aac-a1ba-ef8e33652bb5) - **UX/Design:** - + - **Tela padrão inicial:** - **Diagrama UML:** - + ![IntroNomeGenero](https://github.com/PetJournal/petjournal.android/assets/42920754/13642153-2b67-430f-969e-f129f531df1e) - + - **UX/Design:** - + - + - **Tela padrão espécie:** - **Diagrama UML:** - **UX/Design:** diff --git a/doc/screens/aguardando_codigo.md b/doc/screens/aguardando_codigo.md index 12d8f620..ace549b6 100644 --- a/doc/screens/aguardando_codigo.md +++ b/doc/screens/aguardando_codigo.md @@ -1,9 +1,8 @@ - **Aguardando código:** - **Diagrama UML:** - + ![fluxoTelas-aguardando_codigo.drawio.svg](https://github.com/PetJournal/petjournal.android/assets/42920754/adf3322a-e755-41d8-908c-33a5d8a86aba) - + - **UX/Design:** - + - \ No newline at end of file diff --git a/doc/screens/ambiente_do_usuario.md b/doc/screens/ambiente_do_usuario.md index 9fc9c53d..31102c90 100644 --- a/doc/screens/ambiente_do_usuario.md +++ b/doc/screens/ambiente_do_usuario.md @@ -1,8 +1,8 @@ - **Ambiente do usuário:** - **Diagrama UML:** - - ![Home](https://github.com/PetJournal/petjournal.android/assets/42920754/26a580eb-4d1d-4aac-a1ba-ef8e33652bb5) + + ![Home](https://github.com/PetJournal/petjournal.android/assets/42920754/26a580eb-4d1d-4aac-a1ba-ef8e33652bb5) - **UX/Design:** - + diff --git a/doc/screens/cadastro.md b/doc/screens/cadastro.md index ffb2e15d..c940e812 100644 --- a/doc/screens/cadastro.md +++ b/doc/screens/cadastro.md @@ -1,10 +1,9 @@ - **Cadastro:** - **Descrição**: Tela para cadastrar uma nova conta. - **Diagrama UML:** - + ![fluxoTelas-registro.drawio.svg](https://github.com/PetJournal/petjournal.android/assets/42920754/8ef35f86-7653-45d4-95e4-3f37da3f589f) - + - **UX/Design:** - + - \ No newline at end of file diff --git a/doc/screens/esqueceu_a_senha.md b/doc/screens/esqueceu_a_senha.md index 82cf9090..8698f104 100644 --- a/doc/screens/esqueceu_a_senha.md +++ b/doc/screens/esqueceu_a_senha.md @@ -1,10 +1,8 @@ - **Esqueceu a senha:** - **Diagrama UML:** - + ![fluxoTelas-esqueceu_sua_senha.drawio.svg](https://github.com/PetJournal/petjournal.android/assets/42920754/7f71071b-64d3-4e48-bd24-28e1289cd577g) - + - **UX/Design:** - + - - \ No newline at end of file diff --git a/doc/screens/login.md b/doc/screens/login.md index 5dd9d266..a9e64f6a 100644 --- a/doc/screens/login.md +++ b/doc/screens/login.md @@ -2,10 +2,9 @@ - **Descrição**: Tela para autenticação do usuário. - **Componentes Principais**: Campos de email e senha, botões de login. - **Diagrama UML:** - + ![fluxoTelas-login.svg](https://github.com/PetJournal/petjournal.android/assets/42920754/3cae1a55-fe11-42f5-b05b-345c968521d8) - + - **UX/Design:** - + - diff --git a/doc/screens/splash_screen.md b/doc/screens/splash_screen.md index ba7a2b3f..553adcf4 100644 --- a/doc/screens/splash_screen.md +++ b/doc/screens/splash_screen.md @@ -3,6 +3,5 @@ - **Fluxo de Navegação**: Transição para a tela de Login. - **Componentes Principais**: Logo do app e animação. - **UX/Design:** - + - \ No newline at end of file diff --git a/doc/screens/tela_padrao_especie.md b/doc/screens/tela_padrao_especie.md index 32d962f7..ec38cc75 100644 --- a/doc/screens/tela_padrao_especie.md +++ b/doc/screens/tela_padrao_especie.md @@ -1,7 +1,7 @@ - **Tela padrão espécie:** - **Diagrama UML:** - + - **UX/Design:** - + diff --git a/doc/screens/tela_padrao_inicial.md b/doc/screens/tela_padrao_inicial.md index 768c6c09..6b3d4963 100644 --- a/doc/screens/tela_padrao_inicial.md +++ b/doc/screens/tela_padrao_inicial.md @@ -1,8 +1,8 @@ - **Tela padrão inicial:** - **Diagrama UML:** - + ![IntroNomeGenero](https://github.com/PetJournal/petjournal.android/assets/42920754/13642153-2b67-430f-969e-f129f531df1e) - + - **UX/Design:** - - \ No newline at end of file + + diff --git a/doc/screens/tela_padrao_raca_e_porte.md b/doc/screens/tela_padrao_raca_e_porte.md index 17f04dd2..8730e844 100644 --- a/doc/screens/tela_padrao_raca_e_porte.md +++ b/doc/screens/tela_padrao_raca_e_porte.md @@ -5,4 +5,4 @@ - **UX/Design:** - \ No newline at end of file + diff --git a/doc/screens/troque_a_senha.md b/doc/screens/troque_a_senha.md index 787d89a7..d9f77a59 100644 --- a/doc/screens/troque_a_senha.md +++ b/doc/screens/troque_a_senha.md @@ -1,9 +1,8 @@ - **Troque a senha:** - **Diagrama UML:** - + ![fluxoTelas-troque_sua_senha.drawio.svg](https://github.com/PetJournal/petjournal.android/assets/42920754/84c9e097-405c-4a67-a78c-3d62900b9e16) - + - **UX/Design:** - - + diff --git a/petJournal/.gitignore b/petJournal/.gitignore index 994c4777..0f8e3c9b 100644 --- a/petJournal/.gitignore +++ b/petJournal/.gitignore @@ -16,4 +16,4 @@ petJournal/.idea/discord.xml petJournal/.idea/gradle.xml petJournal/.idea/inspectionProfiles/Project_Default.xml petJournal/.idea/vcs.xml -/.idea/workspace.xml \ No newline at end of file +/.idea/workspace.xml diff --git a/petJournal/.pre-commit-config.yaml b/petJournal/.pre-commit-config.yaml new file mode 100644 index 00000000..56f2b364 --- /dev/null +++ b/petJournal/.pre-commit-config.yaml @@ -0,0 +1,16 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.6.0 + hooks: + - id: mixed-line-ending + - id: trailing-whitespace + - id: end-of-file-fixer + + # - repo: local + # hooks: + # - id: ktlint + # name: Ktlint + # entry: cmd /c gradlew.bat ktlintCheck + # language: system + # types: [kotlin] + # pass_filenames: false diff --git a/petJournal/app/.gitignore b/petJournal/app/.gitignore index 42afabfd..796b96d1 100644 --- a/petJournal/app/.gitignore +++ b/petJournal/app/.gitignore @@ -1 +1 @@ -/build \ No newline at end of file +/build diff --git a/petJournal/app/build.gradle.kts b/petJournal/app/build.gradle.kts index fe81049f..e19c7bca 100644 --- a/petJournal/app/build.gradle.kts +++ b/petJournal/app/build.gradle.kts @@ -127,4 +127,4 @@ dependencies { testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.5.2") androidTestImplementation("androidx.test.ext:junit:1.1.3") androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0") -} \ No newline at end of file +} diff --git a/petJournal/app/proguard-rules.pro b/petJournal/app/proguard-rules.pro index ff59496d..2f9dc5a4 100644 --- a/petJournal/app/proguard-rules.pro +++ b/petJournal/app/proguard-rules.pro @@ -18,4 +18,4 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +#-renamesourcefileattribute SourceFile diff --git a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/ExampleInstrumentedTest.kt b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/ExampleInstrumentedTest.kt index c619ae1c..7a43b002 100644 --- a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/ExampleInstrumentedTest.kt +++ b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/ExampleInstrumentedTest.kt @@ -16,4 +16,4 @@ // val appContext = InstrumentationRegistry.getInstrumentation().targetContext // assertEquals("com.soujunior.petjournal", appContext.packageName) // } -//} \ No newline at end of file +//} diff --git a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/login/LoginAccountConfirmationDialogTest.kt b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/login/LoginAccountConfirmationDialogTest.kt index ec48dcc6..7555cac8 100644 --- a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/login/LoginAccountConfirmationDialogTest.kt +++ b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/login/LoginAccountConfirmationDialogTest.kt @@ -40,4 +40,4 @@ class LoginAccountConfirmationDialogTest { composeTestRule.onNodeWithText("Confirmação do E-mail").assertDoesNotExist() } -} \ No newline at end of file +} diff --git a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/nameGenderScreen/NameGenderInstrumentedTest.kt b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/nameGenderScreen/NameGenderInstrumentedTest.kt index 60688232..976fd1c5 100644 --- a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/nameGenderScreen/NameGenderInstrumentedTest.kt +++ b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/nameGenderScreen/NameGenderInstrumentedTest.kt @@ -136,4 +136,4 @@ class NameGenderInstrumentedTest { composeTestRule.onNodeWithTag("button3_test").performClick() } -} \ No newline at end of file +} diff --git a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/navigation/NavHostMainContentInstrumentedTest.kt b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/navigation/NavHostMainContentInstrumentedTest.kt index 537cd419..042824a4 100644 --- a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/navigation/NavHostMainContentInstrumentedTest.kt +++ b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/navigation/NavHostMainContentInstrumentedTest.kt @@ -94,4 +94,4 @@ class NavHostMainContentInstrumentedTest { assertEquals(navController.currentDestination?.route, "pets/nameAndGender/{arg}") assertEquals(navController.currentBackStackEntry?.arguments?.getString("arg"), "Gato") } -} \ No newline at end of file +} diff --git a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/navigation/navHostMock.kt b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/navigation/navHostMock.kt index fed4cb72..bc32bc78 100644 --- a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/navigation/navHostMock.kt +++ b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/navigation/navHostMock.kt @@ -25,4 +25,4 @@ fun navHostMock(navController: NavHostController, startDestination: String) { composable("pets/nameAndGender/{arg}") { backStackEntry -> PetNameAndGenderScreen(backStackEntry.arguments?.getString("arg"), navController) } composable("pets/RaceAndSize/{arg}") { navBackStackEntry -> PetRaceAndSizeScreen( idPetInformation = navBackStackEntry.arguments?.getString("arg"), navController = navController ) } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/screen_pets/RegisterPetScreenTest.kt b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/screen_pets/RegisterPetScreenTest.kt index 8c302940..6b65bb0a 100644 --- a/petJournal/app/src/androidTest/java/com/soujunior/petjournal/screen_pets/RegisterPetScreenTest.kt +++ b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/screen_pets/RegisterPetScreenTest.kt @@ -464,4 +464,4 @@ class RegisterPetScreenTest { assertTrue(petCastrate) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/application/PetJournalApplicationKoin.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/application/PetJournalApplicationKoin.kt index a38b20ad..9be7ac8e 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/application/PetJournalApplicationKoin.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/application/PetJournalApplicationKoin.kt @@ -23,4 +23,4 @@ class PetJournalApplicationKoin : Application() { } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/NavHostElements.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/NavHostElements.kt index 75918754..51582cdb 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/NavHostElements.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/NavHostElements.kt @@ -82,5 +82,3 @@ fun NavHostMainContent() { } } } - - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/AmPmSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/AmPmSelector.kt index acb20413..7b7101e2 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/AmPmSelector.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/AmPmSelector.kt @@ -103,4 +103,4 @@ fun AmPmSelectorPreview() { onPeriodSelected = {}, ) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Breadcrumb.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Breadcrumb.kt index 684dc853..5a06af8e 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Breadcrumb.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Breadcrumb.kt @@ -105,4 +105,4 @@ private fun buildString(screens: List, index: Int): AnnotatedString{ @Composable private fun PreviewScreenIndicator(){ Breadcrumb(index = 2) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Button.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Button.kt index de255fc6..62e1bb98 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Button.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Button.kt @@ -87,4 +87,4 @@ fun ButtonPreview() { Button2(submit = { /*TODO*/ }, enableButton = false) } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Button2.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Button2.kt index a87cf217..9d5b44dc 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Button2.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Button2.kt @@ -70,4 +70,4 @@ fun Button2( @Composable fun Button2Preview() { Button2(submit = { /*TODO*/ }, enableButton = true, text = "Macho") -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/CardButton.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/CardButton.kt index 25257e8f..23d068a9 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/CardButton.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/CardButton.kt @@ -41,6 +41,3 @@ fun CardButton( } } } - - - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/CreateTitleAndImageLogo.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/CreateTitleAndImageLogo.kt index a43da3bb..b6062ae6 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/CreateTitleAndImageLogo.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/CreateTitleAndImageLogo.kt @@ -159,4 +159,4 @@ fun TesteImage() { .padding(top = 20.dp), ) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DashedInputText.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DashedInputText.kt index 7c1c0a65..c2373d07 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DashedInputText.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DashedInputText.kt @@ -214,4 +214,4 @@ fun DashedInputText( @Composable fun DashedInputTextPreview() { DashedInputText(Modifier, onEvent = {}, textValue = "") -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DateInputText.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DateInputText.kt index e1d48763..aad54ab2 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DateInputText.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DateInputText.kt @@ -179,6 +179,3 @@ fun DateInputText( fun DateInputTextPreview() { DateInputText(textValue = "", onEvent = {}, textError = null, placeholderText = "13/05/1996") } - - - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DayButton.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DayButton.kt index d9cc8507..72b28bbd 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DayButton.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DayButton.kt @@ -73,4 +73,4 @@ fun DayButtonPreview() { onDaySelected = {}, selectedDay = remember { mutableStateOf("Seg") } ) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DualActionButton.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DualActionButton.kt index 5e752de0..5484e140 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DualActionButton.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/DualActionButton.kt @@ -132,4 +132,4 @@ fun DualActionButtonPreview() { leftButtonText = "Macho", rightButtonText = "Fêmea" ) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/HeaderImageLogoImagePasswordAndTitle.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/HeaderImageLogoImagePasswordAndTitle.kt index b774cef5..29d1c217 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/HeaderImageLogoImagePasswordAndTitle.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/HeaderImageLogoImagePasswordAndTitle.kt @@ -172,4 +172,4 @@ fun TesteImages() { .padding(top = 20.dp), ) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ImageLogo.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ImageLogo.kt index af5babb3..daa279d0 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ImageLogo.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ImageLogo.kt @@ -39,5 +39,3 @@ fun ImageLogo( fun teste(){ ImageLogo() } - - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ImagePet.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ImagePet.kt index 018e21ad..423eda1f 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ImagePet.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ImagePet.kt @@ -105,5 +105,3 @@ fun ImagePet( fun ImagePetPreview() { ImagePet() } - - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/IndeterminateCircularIndicator.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/IndeterminateCircularIndicator.kt index c6a80d1e..94120cd1 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/IndeterminateCircularIndicator.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/IndeterminateCircularIndicator.kt @@ -24,4 +24,4 @@ fun IndeterminateCircularIndicator(modifier: Modifier = Modifier) { backgroundColor = MaterialTheme.colorScheme.primary, ) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputSpecies.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputSpecies.kt index 6c0067c0..8be383f3 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputSpecies.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputSpecies.kt @@ -102,4 +102,4 @@ fun InputSpecies( ) } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt index 0f8ab0ff..b1cd3da4 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/InputText.kt @@ -195,4 +195,4 @@ fun InputText( @Composable fun InputTextPreview() { InputText(Modifier, onEvent = {}, textValue = "") -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/LoadingText.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/LoadingText.kt index 1f66f29e..3e5d844b 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/LoadingText.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/LoadingText.kt @@ -37,4 +37,4 @@ fun LoadingText( modifier = modifierText ) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/MenuRow.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/MenuRow.kt index 7d071aba..504c0f19 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/MenuRow.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/MenuRow.kt @@ -32,4 +32,4 @@ fun MenuRow(items: List>) { } } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/NavigationBar.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/NavigationBar.kt index 1802bc9b..80c688ef 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/NavigationBar.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/NavigationBar.kt @@ -89,4 +89,4 @@ fun NavigationBar(navController: NavController) { fun NavigationBarPreview() { val nav = rememberNavController() NavigationBar(nav) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetItem.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetItem.kt index 82ef1432..c7eba977 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetItem.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetItem.kt @@ -70,4 +70,4 @@ fun PetItem( @Composable private fun previewPetItem(){ PetItem(modifier = Modifier, imageRes = "", name = "", onClick = {}) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt index 7a2e0e89..824baf14 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PetSelectorItem.kt @@ -222,4 +222,4 @@ fun PetFilterListPreview() { listPet, onSelectedPet = {} ) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PrivacyPolicy.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PrivacyPolicy.kt index 9968a92c..da8287a3 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PrivacyPolicy.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PrivacyPolicy.kt @@ -163,4 +163,4 @@ fun BoxWithPrivacyPolicyText() { } } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PrivacyPolicyCheckbox.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PrivacyPolicyCheckbox.kt index d4a98291..0a0e548b 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PrivacyPolicyCheckbox.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PrivacyPolicyCheckbox.kt @@ -93,4 +93,4 @@ fun PrivacyPolicyCheckbox( if (showPrivacyPolicy) { PrivacyPolicy() } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/RadioButtonWithText.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/RadioButtonWithText.kt index 20dc7c13..1c700ed6 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/RadioButtonWithText.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/RadioButtonWithText.kt @@ -44,4 +44,4 @@ fun RadioButtonWithText( color = if (isDarkMode) MaterialTheme.colorScheme.primary else Color.Unspecified ) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/RoundedSquare.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/RoundedSquare.kt index d35f2543..b3a3ebc0 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/RoundedSquare.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/RoundedSquare.kt @@ -170,4 +170,4 @@ fun RoundedSquare( } } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ScaffoldCustom.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ScaffoldCustom.kt index 1a68028b..f348f0b4 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ScaffoldCustom.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/ScaffoldCustom.kt @@ -119,4 +119,4 @@ fun ScaffoldCustomPreview() { showBottomBarNavigation = true, bottomNavigationBar = { NavigationBar(nav) } ) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt index 8eb8733c..7a31b975 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/SelectableButtonData.kt @@ -160,4 +160,4 @@ data class SelectableButtonInfo( @Composable fun CustomSelectableButtonPreview() { GroupSelectableButton() -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Shimmer.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Shimmer.kt index fa7e47d8..777ccdde 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Shimmer.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Shimmer.kt @@ -44,4 +44,4 @@ fun Shimmer(modifier: Modifier = Modifier) { ) ) ) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt index a454e189..f4a5bf89 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt @@ -218,4 +218,3 @@ private fun TaskCardPreview() { // ) } } - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/WeekDaySelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/WeekDaySelector.kt index b3013bfe..80d78cbc 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/WeekDaySelector.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/WeekDaySelector.kt @@ -56,4 +56,4 @@ fun WeekDaySelectorPreview() { WeekDaySelector( onDaySelected = {}, ) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt index ab19cec4..fee93c43 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/clock/WheelTimePicker.kt @@ -248,4 +248,4 @@ fun TimePickerPreview() { ) } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/CustomDatePicker.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/CustomDatePicker.kt index 7bad1d38..5e1ecbb0 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/CustomDatePicker.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/CustomDatePicker.kt @@ -165,7 +165,7 @@ fun CustomDatePickerPreview() { label = "Data de Nascimento", value = selectedTimestamp, onValueChange = { selectedTimestamp = it }, - modifier = customModifier, + modifier = customModifier, textStyle = boldTextStyle, colors = redBorderColors ) @@ -182,4 +182,4 @@ fun CustomDatePickerPreview() { modifier = Modifier.fillMaxWidth(0.6f) ) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/mask/MaskDate.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/mask/MaskDate.kt index a09909cd..423aff7b 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/mask/MaskDate.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/mask/MaskDate.kt @@ -40,4 +40,4 @@ fun formatDate(text: AnnotatedString): TransformedText { } } return TransformedText(annotatedString, dateOffsetTranslator) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/mask/MaskPhone.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/mask/MaskPhone.kt index 29c4c178..78a05a37 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/mask/MaskPhone.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/mask/MaskPhone.kt @@ -42,4 +42,4 @@ fun mobileNumberFilter(text: AnnotatedString): TransformedText { } } return TransformedText(annotatedString, phoneNumberOffsetTranslator) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/AwaitingCodeFormEvent.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/AwaitingCodeFormEvent.kt index c0a53534..85cb46f4 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/AwaitingCodeFormEvent.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/AwaitingCodeFormEvent.kt @@ -5,4 +5,4 @@ sealed class AwaitingCodeFormEvent { data class EmailChanged(val email: String) : AwaitingCodeFormEvent() object Submit : AwaitingCodeFormEvent() object ResendCode : AwaitingCodeFormEvent() -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/AwaitingCodeScreen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/AwaitingCodeScreen.kt index 25b8d247..efbf702c 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/AwaitingCodeScreen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/AwaitingCodeScreen.kt @@ -35,4 +35,3 @@ fun AwaitingCodeScreen(arg: String?, navController: NavController) { } Screen(navController, viewModel) } - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/AwaitingCodeViewModel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/AwaitingCodeViewModel.kt index 4e95fd04..7c296a39 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/AwaitingCodeViewModel.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/AwaitingCodeViewModel.kt @@ -21,4 +21,4 @@ abstract class AwaitingCodeViewModel : ViewModel() { abstract fun success(resultPostAwaitingCode: String) abstract fun onEvent(event: com.soujunior.petjournal.ui.screens_app.account_manager.awaitingCodeScreen.AwaitingCodeFormEvent) abstract fun enableButton(): Boolean -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/Footer.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/Footer.kt index 69e1e0e8..a59d717e 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/Footer.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/Footer.kt @@ -54,4 +54,4 @@ fun Footer(navController: NavController, viewModel: AwaitingCodeViewModel) { isLoading = taskState is TaskState.Loading ) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/Header.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/Header.kt index 7bc398f1..b182c927 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/Header.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/Header.kt @@ -18,4 +18,4 @@ fun Header() { styleTitle = MaterialTheme.typography.bodyMedium ) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/OTPTextField.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/OTPTextField.kt index 2084d913..8ed732a4 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/OTPTextField.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/OTPTextField.kt @@ -163,4 +163,4 @@ private fun TextFieldSingleView(index: Int, text: String, isError: Boolean = fal color = Color.Black, textAlign = TextAlign.Center ) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/Screen.kt index 0e2a3b57..25d1877d 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/Screen.kt @@ -96,4 +96,4 @@ fun Screen(navController: NavController, viewModel: AwaitingCodeViewModel) { } } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/VerificationCodeInput.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/VerificationCodeInput.kt index dec03492..984b45d0 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/VerificationCodeInput.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/awaitingCodeScreen/components/VerificationCodeInput.kt @@ -57,4 +57,4 @@ fun VerificationCodeInput(viewModel: AwaitingCodeViewModel) { } ) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/ChangePasswordScreen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/ChangePasswordScreen.kt index 3260b876..70e0cbc3 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/ChangePasswordScreen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/ChangePasswordScreen.kt @@ -29,4 +29,4 @@ fun ChangePasswordScreen(navController: NavController) { } } Screen(viewModel, navController) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/ChangePasswordViewModel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/ChangePasswordViewModel.kt index 35d2dede..0bd6c2c3 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/ChangePasswordViewModel.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/ChangePasswordViewModel.kt @@ -25,4 +25,4 @@ abstract class ChangePasswordViewModel : ViewModel() { abstract fun onEvent(event: ChangePasswordFormEvent) abstract fun disconnectOtherDevices() abstract fun enableButton(): Boolean -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/ChangePasswordViewModelImpl.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/ChangePasswordViewModelImpl.kt index d0869a8f..e7885e85 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/ChangePasswordViewModelImpl.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/ChangePasswordViewModelImpl.kt @@ -132,4 +132,4 @@ class ChangePasswordViewModelImpl( _taskState.value = TaskState.Idle } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/components/LogoutDevicesChangingPassword.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/components/LogoutDevicesChangingPassword.kt index 8fd3c8e6..69fbb8fa 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/components/LogoutDevicesChangingPassword.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/changePasswordScreen/components/LogoutDevicesChangingPassword.kt @@ -82,4 +82,4 @@ fun LogoutDevicesChangingPassword( if (showPrivacyPolicy) { PrivacyPolicy() } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordFormState.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordFormState.kt index 9b5cb705..b1a52641 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordFormState.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordFormState.kt @@ -3,4 +3,4 @@ package com.soujunior.petjournal.ui.screens_app.account_manager.forgotPasswordSc data class ForgotPasswordFormState( val email: String = "", val emailError: List? = null -) \ No newline at end of file +) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordScreen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordScreen.kt index 666d115b..811f627d 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordScreen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordScreen.kt @@ -28,4 +28,4 @@ fun ForgotPasswordScreen(navController: NavController) { } } Screen(navController, viewModel) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordViewModel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordViewModel.kt index 8e7109aa..769fd1fc 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordViewModel.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordViewModel.kt @@ -23,4 +23,4 @@ abstract class ForgotPasswordViewModel : ViewModel() { abstract fun submitData() abstract fun onEvent(event: ForgotPasswordFormEvent) abstract fun enableButton(): Boolean -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordViewModelImpl.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordViewModelImpl.kt index c66a846d..fe03be64 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordViewModelImpl.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/ForgotPasswordViewModelImpl.kt @@ -87,4 +87,4 @@ class ForgotPasswordViewModelImpl( val emailResult = validation.validateEmail(state.email) return state.email.isNotBlank() && emailResult.errorMessage == null } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/components/Footer.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/components/Footer.kt index 49f6364d..342e6a69 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/components/Footer.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/components/Footer.kt @@ -108,4 +108,4 @@ fun FooterPreview() { ) } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/components/Screen.kt index bdad9668..125dbe51 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/forgotPasswordScreen/components/Screen.kt @@ -73,4 +73,4 @@ fun Screen(navController: NavController, viewModel: ForgotPasswordViewModel) { } } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginFormState.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginFormState.kt index c3d2f054..158a16c3 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginFormState.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginFormState.kt @@ -6,4 +6,4 @@ data class LoginFormState( val password: String = "", val passwordError: List? = null, val rememberPassword: Boolean = false -) \ No newline at end of file +) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginScreen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginScreen.kt index a8cab235..6b02ac4e 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginScreen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginScreen.kt @@ -61,4 +61,4 @@ fun LoginScreen(navController: NavController) { } } Screen(navController) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginViewModel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginViewModel.kt index 6f3e36e1..3952a8f5 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginViewModel.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginViewModel.kt @@ -54,4 +54,4 @@ abstract class LoginViewModel : ViewModel() { abstract fun submitData() abstract fun enableButton(): Boolean abstract fun onEvent(event: LoginFormEvent) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginViewModelImpl.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginViewModelImpl.kt index caa365f2..e2c262d9 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginViewModelImpl.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/LoginViewModelImpl.kt @@ -140,4 +140,4 @@ class LoginViewModelImpl( _taskState.value = TaskState.Idle } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/components/AccountConfirmationDialog.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/components/AccountConfirmationDialog.kt index ea8e9c65..0279c460 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/components/AccountConfirmationDialog.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/components/AccountConfirmationDialog.kt @@ -82,4 +82,4 @@ fun AccountConfirmationDialog(onDismiss: () -> Unit) { @Composable fun PreviewSimpleDialog() { AccountConfirmationDialog(onDismiss = {}) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/components/Footer.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/components/Footer.kt index 43afddf1..b6b6c68b 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/components/Footer.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/components/Footer.kt @@ -84,4 +84,4 @@ fun Footer( ) } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/components/RememberPasswordAndForgotSection.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/components/RememberPasswordAndForgotSection.kt index 801cce33..a148ce73 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/components/RememberPasswordAndForgotSection.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/loginScreen/components/RememberPasswordAndForgotSection.kt @@ -67,4 +67,4 @@ fun RememberPasswordAndForgotSection(navController: NavController, viewModel: Lo }) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterFormEvent.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterFormEvent.kt index 1b3e40e5..9208e830 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterFormEvent.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterFormEvent.kt @@ -9,4 +9,4 @@ sealed class RegisterFormEvent { data class ConfirmPasswordChanged(val confirmPassword: String) : RegisterFormEvent() data class PrivacyPolicyChanged(val privacyPolicy: Boolean) : RegisterFormEvent() object Submit : RegisterFormEvent() -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterScreen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterScreen.kt index 40502490..0761781e 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterScreen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterScreen.kt @@ -28,4 +28,4 @@ fun RegisterScreen(navController: NavController) { } } Screen( navController, viewModel) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterViewModel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterViewModel.kt index 7811ee0e..c541ddb5 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterViewModel.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterViewModel.kt @@ -71,4 +71,4 @@ abstract class RegisterViewModel : ViewModel() { repeatedPassword: String? = null, privacy: Boolean? = null ) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterViewModelImpl.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterViewModelImpl.kt index 938c217c..4d16e944 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterViewModelImpl.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/RegisterViewModelImpl.kt @@ -176,4 +176,4 @@ class RegisterViewModelImpl( _taskState.value = TaskState.Idle } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/components/Screen.kt index 4e075c81..ce0966cf 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/components/Screen.kt @@ -294,4 +294,4 @@ private fun RegisterScreenPreview() { PetJournalTheme { Screen(nav) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/state/StatesRegister.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/state/StatesRegister.kt index cc8395dc..01f571d2 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/state/StatesRegister.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/account_manager/registerScreen/state/StatesRegister.kt @@ -5,4 +5,4 @@ import androidx.compose.runtime.mutableStateOf object StatesRegister { var showPrivacyPolicy = compositionLocalOf { mutableStateOf(false) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/HomeScreenViewModelImpl.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/HomeScreenViewModelImpl.kt index 8e9789b4..067d11ea 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/HomeScreenViewModelImpl.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/HomeScreenViewModelImpl.kt @@ -66,4 +66,4 @@ class HomeScreenViewModelImpl( logoutUseCase.doWork() } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/HomeState.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/HomeState.kt index 4fce5475..91565755 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/HomeState.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/HomeState.kt @@ -3,4 +3,4 @@ package com.soujunior.petjournal.ui.screens_app.screen_home.homeScreen data class HomeState( val name : String = "", val getNameError : Boolean = false -) \ No newline at end of file +) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Carousel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Carousel.kt index 096b6cec..6a358714 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Carousel.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Carousel.kt @@ -73,4 +73,3 @@ fun Carousel(imageIds: List) { } } } - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Menu.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Menu.kt index a62e4773..64b952b9 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Menu.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Menu.kt @@ -30,4 +30,3 @@ fun Menu(navController: NavController) { ) } } - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/NaturalModel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/NaturalModel.kt index 1945c1fb..8e6b0fab 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/NaturalModel.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/NaturalModel.kt @@ -22,4 +22,4 @@ val natural = listOf( 5.0f, "Decription Sample 3", ) -) \ No newline at end of file +) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Screen.kt index 83e4315f..d3602ce2 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Screen.kt @@ -181,4 +181,4 @@ fun HomeScreenPreview() { PetJournalTheme { Screen(nav) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_tutor/tutorScreen/TutorScreen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_tutor/tutorScreen/TutorScreen.kt index 3103bfd9..bc2346a6 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_tutor/tutorScreen/TutorScreen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_tutor/tutorScreen/TutorScreen.kt @@ -34,4 +34,4 @@ fun TutorScreen(navController: NavController) { } ) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_apresentation/splashScreen/SplashScreen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_apresentation/splashScreen/SplashScreen.kt index e38d3010..5a9f5f3a 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_apresentation/splashScreen/SplashScreen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_apresentation/splashScreen/SplashScreen.kt @@ -58,4 +58,4 @@ fun SplashScreen(navController: NavHostController) { modifier = Modifier.align(Alignment.BottomCenter) ) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_apresentation/splashScreen/SplashViewModel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_apresentation/splashScreen/SplashViewModel.kt index 954c86eb..352d449a 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_apresentation/splashScreen/SplashViewModel.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_apresentation/splashScreen/SplashViewModel.kt @@ -36,4 +36,4 @@ class SplashViewModel( else failure() } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/IntroRegisterPetScreen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/IntroRegisterPetScreen.kt index d0580c76..9ee594d0 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/IntroRegisterPetScreen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/IntroRegisterPetScreen.kt @@ -7,4 +7,4 @@ import com.soujunior.petjournal.ui.screens_app.screens_pets.introRegisterPetScre @Composable fun IntroRegisterPetScreen(navController: NavController) { Screen(navController) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/IntroRegisterPetViewModel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/IntroRegisterPetViewModel.kt index 53c0d9ef..edd8595e 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/IntroRegisterPetViewModel.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/IntroRegisterPetViewModel.kt @@ -41,4 +41,4 @@ abstract class IntroRegisterPetViewModel : ViewModel() { abstract fun setWasViewed() abstract fun getName() abstract fun getWasViewed() -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/IntroRegisterPetViewModelImpl.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/IntroRegisterPetViewModelImpl.kt index ecdc4565..1efe2b8f 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/IntroRegisterPetViewModelImpl.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/IntroRegisterPetViewModelImpl.kt @@ -84,4 +84,4 @@ class IntroRegisterPetViewModelImpl( _taskState.value = TaskState.Idle } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/components/GridVectors.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/components/GridVectors.kt index a266054e..d4ae3d2e 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/components/GridVectors.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/components/GridVectors.kt @@ -132,4 +132,4 @@ private fun calcDefault(sizeToMultiply: Int, quantity: Int): Dp { private fun GridPrev() { GridVectors() -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/components/Header.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/components/Header.kt index 7951b976..386f2311 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/components/Header.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/components/Header.kt @@ -49,4 +49,4 @@ fun Header(name: String?) { ) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/components/Screen.kt index d7712da9..76e562ab 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/introRegisterPetScreen/components/Screen.kt @@ -132,4 +132,4 @@ fun IntroRegister(){ PetJournalTheme { Screen(nav) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/BirthDateFormState.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/BirthDateFormState.kt index d49b2916..d2a71812 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/BirthDateFormState.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/BirthDateFormState.kt @@ -12,4 +12,3 @@ data class BirthDateFormState( val castration: Boolean? = null, val castrationError: List? = null ) - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/BirthDateViewModel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/BirthDateViewModel.kt index 76026435..9807c034 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/BirthDateViewModel.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/BirthDateViewModel.kt @@ -62,4 +62,4 @@ abstract class BirthDateViewModel : ViewModel() { abstract fun createPetInformation() abstract fun successPetUpdate(unit: Unit) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/BirthDateViewModelImpl.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/BirthDateViewModelImpl.kt index 5db8b2ed..be57efd8 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/BirthDateViewModelImpl.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/BirthDateViewModelImpl.kt @@ -164,4 +164,4 @@ class BirthDateViewModelImpl( return "" } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/PetBirthDateScreen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/PetBirthDateScreen.kt index 24b42ab1..1c14dbfa 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/PetBirthDateScreen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/PetBirthDateScreen.kt @@ -8,5 +8,3 @@ import com.soujunior.petjournal.ui.screens_app.screens_pets.petBirthDateScreen.c fun PetBirthScreen(idPetInformation: String?, navController: NavController) { Screen(idPetInformation, navController) } - - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/components/CastrationSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/components/CastrationSelector.kt index a94b7ec0..da492142 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/components/CastrationSelector.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/components/CastrationSelector.kt @@ -149,4 +149,4 @@ fun CastrationSelectorPreview() { clearSelection = { true }, textError = null, ) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/components/Header.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/components/Header.kt index b96c2173..334db35a 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/components/Header.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/components/Header.kt @@ -69,4 +69,4 @@ fun Header( @Composable private fun PreviewHeader() { Header() -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/components/Screen.kt index 1506d738..0f247d0e 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petBirthDateScreen/components/Screen.kt @@ -217,4 +217,4 @@ fun BirthDatePreview() { PetJournalTheme { Screen("1", nav) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListScreen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListScreen.kt index 8511a520..b4bde972 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListScreen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListScreen.kt @@ -7,4 +7,4 @@ import com.soujunior.petjournal.ui.screens_app.screens_pets.petListScreen.compon @Composable fun PetListScreen(navController: NavController) { Screen(navController) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListViewModel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListViewModel.kt index 79d8f4f2..a065746b 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListViewModel.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListViewModel.kt @@ -34,4 +34,4 @@ abstract class PetListViewModel : ViewModel() { abstract fun success() abstract fun failed(exception: Throwable?) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListViewModelImpl.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListViewModelImpl.kt index 106bde0f..c3e59007 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListViewModelImpl.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListViewModelImpl.kt @@ -34,4 +34,4 @@ class PetListViewModelImpl : PetListViewModel() { validationEventChannel.send(ValidationEvent.Failed) } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/components/PetItemMore.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/components/PetItemMore.kt index 57be70d9..4a5ecbc3 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/components/PetItemMore.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/components/PetItemMore.kt @@ -54,4 +54,4 @@ fun PetItemMore(modifier: Modifier = Modifier, onClick: () -> Unit) { fontSize = 16.ssp, ) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/components/Screen.kt index 4f1221b5..4833204e 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/components/Screen.kt @@ -159,4 +159,4 @@ fun PetListPrev() { PetJournalTheme { Screen(nav) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/NameGenderFormState.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/NameGenderFormState.kt index 3dc2398b..4aeb21a0 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/NameGenderFormState.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/NameGenderFormState.kt @@ -8,4 +8,3 @@ data class NameGenderFormState( val specie: String = "", val idPetInformation: Long? = null ) - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/PetNameAndGenderScreen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/PetNameAndGenderScreen.kt index e6c1182c..9ab80d36 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/PetNameAndGenderScreen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/PetNameAndGenderScreen.kt @@ -8,5 +8,3 @@ import com.soujunior.petjournal.ui.screens_app.screens_pets.petNameAndGenderScre fun PetNameAndGenderScreen(idPetInformation: String?, navController: NavController) { Screen(idPetInformation, navController) } - - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/ViewModelNameGender.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/ViewModelNameGender.kt index b41dd391..4576fc0c 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/ViewModelNameGender.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/ViewModelNameGender.kt @@ -52,4 +52,4 @@ abstract class ViewModelNameGender : ViewModel() { abstract fun getPetInformation(id: Long) abstract fun updatePetInformation() abstract fun successPetUpdate(unit: Unit) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/ViewModelNameGenderImpl.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/ViewModelNameGenderImpl.kt index b6a301a3..6e4b02c3 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/ViewModelNameGenderImpl.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/ViewModelNameGenderImpl.kt @@ -128,4 +128,4 @@ class ViewModelNameGenderImpl( } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/components/GenderSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/components/GenderSelector.kt index a1ffe373..1eb11716 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/components/GenderSelector.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/components/GenderSelector.kt @@ -53,7 +53,7 @@ fun GenderSelector( .fillMaxWidth() .padding(20.sdp)) } - + GenderButtons(selectedGender, clearSelection, textError) }) } @@ -134,4 +134,4 @@ fun GenderSelectorPreview(){ clearSelection = {true}, textError = null ) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/components/Header.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/components/Header.kt index 7d4d7171..f8a84045 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/components/Header.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/components/Header.kt @@ -64,4 +64,4 @@ fun Header(species: String = "Gato") { @Composable private fun PreviewHeader() { Header(species = "Cachorro") -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/components/Screen.kt index 49c95825..014d40c7 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petNameAndGenderScreen/components/Screen.kt @@ -223,4 +223,4 @@ fun NameAndGenderPreview() { PetJournalTheme { Screen("1", nav) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/RaceSizeFormState.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/RaceSizeFormState.kt index 47448b5d..17d0a1be 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/RaceSizeFormState.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/RaceSizeFormState.kt @@ -17,4 +17,3 @@ data class RaceSizeFormState( val listRace: List = emptyList(), val listSizes: List = emptyList() ) - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/ViewModelRaceSize.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/ViewModelRaceSize.kt index 517cfb6c..26b54576 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/ViewModelRaceSize.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/ViewModelRaceSize.kt @@ -83,4 +83,4 @@ abstract class ViewModelRaceSize : ViewModel() { abstract fun successPetUpdate(unit: Unit) abstract suspend fun requestGetListSizes() abstract suspend fun requestGetListRaces() -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/ViewModelRaceSizeImpl.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/ViewModelRaceSizeImpl.kt index f1fcd186..7a2723ae 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/ViewModelRaceSizeImpl.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/ViewModelRaceSizeImpl.kt @@ -225,4 +225,4 @@ class ViewModelRaceSizeImpl( } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/components/Header.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/components/Header.kt index fa9e6572..58debcbe 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/components/Header.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/components/Header.kt @@ -42,4 +42,4 @@ fun Header(modifier: Modifier = Modifier, petName: String = "Bolinha") { @Composable private fun PreviewHeader() { Header() -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/components/Screen.kt index b26f3d29..941d3c33 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petRaceAndSizeScreen/components/Screen.kt @@ -293,4 +293,4 @@ fun NameAndGenderPreview() { PetJournalTheme { Screen("1", nav) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/RegisterPetScreen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/RegisterPetScreen.kt index 8da5f1e0..75795912 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/RegisterPetScreen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/RegisterPetScreen.kt @@ -7,4 +7,4 @@ import com.soujunior.petjournal.ui.screens_app.screens_pets.registerPetScreen.co @Composable fun RegisterPetScreen(navController: NavController) { Screen(navController) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/ViewModelRegisterPet.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/ViewModelRegisterPet.kt index 2aa36333..24f2784e 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/ViewModelRegisterPet.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/ViewModelRegisterPet.kt @@ -1,4 +1,4 @@ package com.soujunior.petjournal.ui.screens_app.screens_pets.registerPetScreen interface ViewModelRegisterPet { -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/Screen.kt index 14208cc3..088ee74f 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerPetScreen/components/Screen.kt @@ -222,4 +222,4 @@ fun ScreenPreview() { Screen(nav) } ) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/ViewModelChoiceSpecies.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/ViewModelChoiceSpecies.kt index a26bf85b..577d6604 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/ViewModelChoiceSpecies.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/ViewModelChoiceSpecies.kt @@ -53,4 +53,4 @@ abstract class ViewModelChoiceSpecies : ViewModel() { ) abstract fun savePetInformation(specie: String) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/ViewModelChoiceSpeciesImpl.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/ViewModelChoiceSpeciesImpl.kt index a6b64796..d55c06be 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/ViewModelChoiceSpeciesImpl.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/ViewModelChoiceSpeciesImpl.kt @@ -121,4 +121,4 @@ class ViewModelChoiceSpeciesImpl( result.handleResult(::success, ::failed) } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/components/GridVectors.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/components/GridVectors.kt index ec20ed22..af3af9b6 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/components/GridVectors.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/components/GridVectors.kt @@ -481,4 +481,4 @@ fun GridVectors( fun PrevGrid() { val isClearSpecies by remember { mutableStateOf(false) } GridVectors(selectedSpecies = {}, clearSelection = { isClearSpecies }) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/components/Header.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/components/Header.kt index 13c08c0f..08e88ea6 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/components/Header.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/components/Header.kt @@ -34,4 +34,4 @@ fun Header(name: String?) { @Composable fun PreviewHeader() { Header("Jorge") -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/components/Screen.kt index e6a5ce34..6838a31c 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/speciesChoiceScreen/components/Screen.kt @@ -229,4 +229,4 @@ fun SpecieChoicePreview() { PetJournalTheme { Screen(nav) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListEvent.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListEvent.kt index eb2d160d..67e431cc 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListEvent.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListEvent.kt @@ -3,4 +3,4 @@ package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen sealed class TaskListEvent { object AddTaskButton : TaskListEvent() data class onDateFilterChange(val dateFilter: DateFilter) : TaskListEvent() -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListScreen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListScreen.kt index f402e532..1e6cf437 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListScreen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListScreen.kt @@ -7,4 +7,4 @@ import com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.compo @Composable fun TaskListScreen(navController: NavController) { Screen(navController) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListState.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListState.kt index a6a439e0..39c024b7 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListState.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListState.kt @@ -10,4 +10,4 @@ data class TaskListState ( enum class DateFilter{ DAILY, WEEKLY, MONTHLY -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt index 85e4d773..eff6c58d 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt @@ -53,4 +53,4 @@ abstract class TaskListViewModel : ViewModel() { // visualiza a tarefa baeado em periodos temporais (dia/mes/ano) // cria tarefa -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModelImpl.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModelImpl.kt index b3cbcbd5..9dc40964 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModelImpl.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModelImpl.kt @@ -1,4 +1,4 @@ package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen class TaskListViewModelImpl { -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt index a96d5148..bcfbc489 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt @@ -35,11 +35,9 @@ fun Screen(navController: NavController){ showBottomBarNavigation = true, bottomNavigationBar = { NavigationBar(navController) }, contentToUse = { paddingValues -> - Column(modifier = Modifier .padding(paddingValues) .padding(horizontal = 8.sdp, vertical = 16.sdp)){ - Text(text = stringResource(R.string.next_tasks), fontSize = 16.ssp, lineHeight = 24.ssp, @@ -94,4 +92,3 @@ private fun ScreenPreview(){ val nav = rememberNavController() Screen(nav) } - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TabSelector.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TabSelector.kt index 1694c535..75bbe992 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TabSelector.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TabSelector.kt @@ -67,4 +67,4 @@ fun PreviewTabSelector(){ onFilterSelected = {}, modifier = Modifier.fillMaxWidth() ) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt index 112435d5..082fb6f4 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt @@ -52,4 +52,3 @@ private fun Preview() { tasks = TaskFakeData.sampleTasks.take(3) ) } - diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/states/States.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/states/States.kt index 5f8de1bc..a04fa022 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/states/States.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/states/States.kt @@ -12,4 +12,4 @@ object States { var localConfirmPasswordError = compositionLocalOf { mutableStateOf(false) } var checked = compositionLocalOf { mutableStateOf(false) } var otpFullCode = compositionLocalOf { mutableStateOf("") } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/states/TaskState.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/states/TaskState.kt index 4fea81b3..c0c516b6 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/states/TaskState.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/states/TaskState.kt @@ -3,4 +3,4 @@ package com.soujunior.petjournal.ui.states sealed class TaskState { object Idle: TaskState() object Loading: TaskState() -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt index 8fcf6daa..20d6ce7b 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Color.kt @@ -98,4 +98,4 @@ object ColorCustom { val color_shadow_dialog = Color(0x4D000000) val color_border_dialog = Color(0xFF8D4CD2) val color_background_button_dialog = Color(0xFF9C4DFF) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Shapes.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Shapes.kt index 25058cd8..2d16d170 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Shapes.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Shapes.kt @@ -8,4 +8,4 @@ val Shapes = Shapes( small = RoundedCornerShape(5.dp), medium = RoundedCornerShape(20.dp), large = RoundedCornerShape(40.dp) -) \ No newline at end of file +) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Theme.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Theme.kt index e7e69141..d009e2b5 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Theme.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Theme.kt @@ -228,4 +228,4 @@ fun processColor(name: String, color: Color) { Row(modifier = Modifier.background(color)) { Text(text = name) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Typography.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Typography.kt index 30dae1d4..fdfeb0c3 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Typography.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/theme/Typography.kt @@ -81,4 +81,4 @@ val Typography = Typography( fontSize = 10.sp, letterSpacing = 1.5.sp ) -) \ No newline at end of file +) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/AdaptiveWidthForTitle.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/AdaptiveWidthForTitle.kt index 27ebc94a..7484815c 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/AdaptiveWidthForTitle.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/AdaptiveWidthForTitle.kt @@ -12,4 +12,4 @@ fun Modifier.adaptiveWidthForTitle(title: String): Modifier { } else { this.width(115.dp) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/Constants.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/Constants.kt index 151dc876..b0ea4cfa 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/Constants.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/Constants.kt @@ -11,4 +11,4 @@ object Constants { const val ERROR_MESSAGE = "Error" const val OTHER_RACE = "Outra raça" const val RACE_OTHER = "Outro" -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/DateFormatter.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/DateFormatter.kt index a31f92da..f2f4e93f 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/DateFormatter.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/DateFormatter.kt @@ -33,4 +33,4 @@ object DateFormatter{ } } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/GetScreenInch.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/GetScreenInch.kt index 9cb931a0..f79a46a4 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/GetScreenInch.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/GetScreenInch.kt @@ -29,4 +29,4 @@ fun getScreenHeightInch(): Float { val screenHeightDp = configuration.screenHeightDp * displayMetrics val scrollPercentage = 0.35f return screenHeightDp * scrollPercentage -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/ToggleList.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/ToggleList.kt index 7308c3aa..99839483 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/ToggleList.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/ToggleList.kt @@ -6,4 +6,4 @@ fun List.toggle(item: String): List { } else { this + item } -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/Util.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/Util.kt index 542dc527..5fe0262f 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/Util.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/Util.kt @@ -47,4 +47,4 @@ fun countCharacters(str: String): List { } } return listOf(digitosMaiusculos, digitosMinusculos, simbolos, numeros) -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/ValidationEvent.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/ValidationEvent.kt index 37383bcc..f389cfb3 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/ValidationEvent.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/ValidationEvent.kt @@ -3,4 +3,4 @@ package com.soujunior.petjournal.ui.util sealed class ValidationEvent { object Success : ValidationEvent() object Failed : ValidationEvent() -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/calcDefault.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/calcDefault.kt index f124006e..c6b115e5 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/calcDefault.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/calcDefault.kt @@ -5,4 +5,4 @@ import androidx.compose.ui.unit.dp fun calcDefault(sizeToMultiply: Int, quantity: Int): Dp { return (sizeToMultiply * quantity).dp -} \ No newline at end of file +} diff --git a/petJournal/app/src/main/res/drawable/ic_home.xml b/petJournal/app/src/main/res/drawable/ic_home.xml index d92f8e91..459d13da 100644 --- a/petJournal/app/src/main/res/drawable/ic_home.xml +++ b/petJournal/app/src/main/res/drawable/ic_home.xml @@ -12,4 +12,3 @@ android:strokeLineJoin="round" android:pathData="M3 10L12 3L21 10V21H15V14H9V21H3Z" /> - diff --git a/petJournal/app/src/main/res/drawable/logo_roxo.xml b/petJournal/app/src/main/res/drawable/logo_roxo.xml index d9aa9e8d..cd714e83 100644 --- a/petJournal/app/src/main/res/drawable/logo_roxo.xml +++ b/petJournal/app/src/main/res/drawable/logo_roxo.xml @@ -1,41 +1,41 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/petJournal/app/src/main/res/drawable/logo_white.xml b/petJournal/app/src/main/res/drawable/logo_white.xml index e2d12bd1..db1ffb00 100644 --- a/petJournal/app/src/main/res/drawable/logo_white.xml +++ b/petJournal/app/src/main/res/drawable/logo_white.xml @@ -1,41 +1,41 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/petJournal/app/src/main/res/mipmap-anydpi-v26/icon_app.xml b/petJournal/app/src/main/res/mipmap-anydpi-v26/icon_app.xml index 657b7dc3..dfca990e 100644 --- a/petJournal/app/src/main/res/mipmap-anydpi-v26/icon_app.xml +++ b/petJournal/app/src/main/res/mipmap-anydpi-v26/icon_app.xml @@ -2,4 +2,4 @@ - \ No newline at end of file + diff --git a/petJournal/app/src/main/res/mipmap-anydpi-v26/icon_app_round.xml b/petJournal/app/src/main/res/mipmap-anydpi-v26/icon_app_round.xml index 657b7dc3..dfca990e 100644 --- a/petJournal/app/src/main/res/mipmap-anydpi-v26/icon_app_round.xml +++ b/petJournal/app/src/main/res/mipmap-anydpi-v26/icon_app_round.xml @@ -2,4 +2,4 @@ - \ No newline at end of file + diff --git a/petJournal/app/src/main/res/values/colors.xml b/petJournal/app/src/main/res/values/colors.xml index 7264fbfd..f81775da 100644 --- a/petJournal/app/src/main/res/values/colors.xml +++ b/petJournal/app/src/main/res/values/colors.xml @@ -9,4 +9,4 @@ #FFFFFFFF #FFFFFF #000000 - \ No newline at end of file + diff --git a/petJournal/app/src/main/res/values/icon_app_background.xml b/petJournal/app/src/main/res/values/icon_app_background.xml index 33589864..65effd90 100644 --- a/petJournal/app/src/main/res/values/icon_app_background.xml +++ b/petJournal/app/src/main/res/values/icon_app_background.xml @@ -1,4 +1,4 @@ #F8BFEC - \ No newline at end of file + diff --git a/petJournal/app/src/main/res/values/privacy_policy.xml b/petJournal/app/src/main/res/values/privacy_policy.xml index 2cd240c8..09afe9ab 100644 --- a/petJournal/app/src/main/res/values/privacy_policy.xml +++ b/petJournal/app/src/main/res/values/privacy_policy.xml @@ -35,4 +35,4 @@ Adicionalmente, se você mora na Europa, nós afirmamos que estamos processando Nós vamos divulgar qualquer informação que coletarmos, usarmos ou recebermos caso tal divulgação seja solicitada ou permitida por lei, de forma a cumprir intimações ou processos judiciais similares, e também quando considerarmos em boa fé que a divulgação é necessária para a proteção de nossos direitos, para a proteção da segurança de outros, para investigações de fraude ou para responder a uma solicitação do governo. Informações de contato: Se você quiser entrar em contato conosco para saber mais sobre esta Política de Privacidade, ou quiser acessar quaisquer informações relativas aos seus direitos individuais e às suas Informações Pessoais, você poderá enviar um e-mail para o endereço joaosilvavictor@hotmail.com.br. - \ No newline at end of file + diff --git a/petJournal/app/src/main/res/values/splash.xml b/petJournal/app/src/main/res/values/splash.xml index 9caee9e7..a5cff4a6 100644 --- a/petJournal/app/src/main/res/values/splash.xml +++ b/petJournal/app/src/main/res/values/splash.xml @@ -7,4 +7,4 @@ @style/Theme.PetJournal --> - \ No newline at end of file + diff --git a/petJournal/app/src/main/res/values/strings.xml b/petJournal/app/src/main/res/values/strings.xml index 2337ab98..d43daff2 100644 --- a/petJournal/app/src/main/res/values/strings.xml +++ b/petJournal/app/src/main/res/values/strings.xml @@ -163,4 +163,4 @@ Diárias Semanais Mensais - \ No newline at end of file + diff --git a/petJournal/app/src/main/res/values/themes.xml b/petJournal/app/src/main/res/values/themes.xml index 82ea9580..a504e8db 100644 --- a/petJournal/app/src/main/res/values/themes.xml +++ b/petJournal/app/src/main/res/values/themes.xml @@ -5,4 +5,4 @@ - \ No newline at end of file + diff --git a/petJournal/app/src/main/res/xml/backup_rules.xml b/petJournal/app/src/main/res/xml/backup_rules.xml index fa0f996d..148c18b6 100644 --- a/petJournal/app/src/main/res/xml/backup_rules.xml +++ b/petJournal/app/src/main/res/xml/backup_rules.xml @@ -10,4 +10,4 @@ --> - \ No newline at end of file + diff --git a/petJournal/app/src/main/res/xml/data_extraction_rules.xml b/petJournal/app/src/main/res/xml/data_extraction_rules.xml index 9ee9997b..0c4f95ca 100644 --- a/petJournal/app/src/main/res/xml/data_extraction_rules.xml +++ b/petJournal/app/src/main/res/xml/data_extraction_rules.xml @@ -16,4 +16,4 @@ --> - \ No newline at end of file + diff --git a/petJournal/app/src/test/java/com/soujunior/petjournal/setup/FormMock.kt b/petJournal/app/src/test/java/com/soujunior/petjournal/setup/FormMock.kt index 9253d362..fed09ae6 100644 --- a/petJournal/app/src/test/java/com/soujunior/petjournal/setup/FormMock.kt +++ b/petJournal/app/src/test/java/com/soujunior/petjournal/setup/FormMock.kt @@ -280,4 +280,3 @@ val listPetSizesCat = listOf( specieId = "a0f385f5-c0b4-4f85-8d06-cf2a4f698f93" ) ) - diff --git a/petJournal/app/src/test/java/com/soujunior/petjournal/setup/MainCoroutineRule.kt b/petJournal/app/src/test/java/com/soujunior/petjournal/setup/MainCoroutineRule.kt index e590a383..a514fee7 100644 --- a/petJournal/app/src/test/java/com/soujunior/petjournal/setup/MainCoroutineRule.kt +++ b/petJournal/app/src/test/java/com/soujunior/petjournal/setup/MainCoroutineRule.kt @@ -25,4 +25,4 @@ class MainCoroutineRule( cleanupTestCoroutines() Dispatchers.resetMain() } -} \ No newline at end of file +} diff --git a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/awaitingCodeScreen/AwaitingCodeTest.kt b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/awaitingCodeScreen/AwaitingCodeTest.kt index ff079867..2ce71c0c 100644 --- a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/awaitingCodeScreen/AwaitingCodeTest.kt +++ b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/awaitingCodeScreen/AwaitingCodeTest.kt @@ -151,4 +151,4 @@ package com.soujunior.petjournal.ui.awaitingCodeScreen // assertThat(viewModel.enableButton()).isEqualTo(false) // } // -//} \ No newline at end of file +//} diff --git a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/changePassword/ChangePasswordViewModelTest.kt b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/changePassword/ChangePasswordViewModelTest.kt index 2357806e..65f277e8 100644 --- a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/changePassword/ChangePasswordViewModelTest.kt +++ b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/changePassword/ChangePasswordViewModelTest.kt @@ -329,4 +329,4 @@ package com.soujunior.petjournal.ui.changePassword // } // coVerify(exactly = 0) { viewModel.success(any()) } // } -//} \ No newline at end of file +//} diff --git a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/forgotPassword/ForgotPasswordMethodTest.kt b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/forgotPassword/ForgotPasswordMethodTest.kt index fe107057..548bc501 100644 --- a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/forgotPassword/ForgotPasswordMethodTest.kt +++ b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/forgotPassword/ForgotPasswordMethodTest.kt @@ -90,4 +90,4 @@ class ForgotPasswordMethodTest { val enableButton = viewModel.enableButton() assertk.assertThat(enableButton).isFalse() } -} \ No newline at end of file +} diff --git a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/loginScreen/LoginMethodTest.kt b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/loginScreen/LoginMethodTest.kt index cb84916d..36c62abc 100644 --- a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/loginScreen/LoginMethodTest.kt +++ b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/loginScreen/LoginMethodTest.kt @@ -118,4 +118,4 @@ override fun enableButton(): Boolean { state.privacyPolicy } -*/ \ No newline at end of file +*/ diff --git a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/petBirthDate/PetBirthDateViewModelTest.kt b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/petBirthDate/PetBirthDateViewModelTest.kt index a9d1e0ba..bb5df815 100644 --- a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/petBirthDate/PetBirthDateViewModelTest.kt +++ b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/petBirthDate/PetBirthDateViewModelTest.kt @@ -307,4 +307,4 @@ class PetBirthDateViewModelTest { viewModelTest.createPetInformation() assertEquals("Sucesso", viewModelTest.message.value) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/petNameAndGender/PetNameViewModelTest.kt b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/petNameAndGender/PetNameViewModelTest.kt index 9c782897..edae2759 100644 --- a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/petNameAndGender/PetNameViewModelTest.kt +++ b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/petNameAndGender/PetNameViewModelTest.kt @@ -217,4 +217,4 @@ class PetNameViewModelTest { assertEquals(newGender, viewModelTest.state.gender) assertEquals(emptyList(), viewModelTest.state.genderError) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/petRaceAndSize/PetViewModelRaceSizeTest.kt b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/petRaceAndSize/PetViewModelRaceSizeTest.kt index ec96cd96..9c58645a 100644 --- a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/petRaceAndSize/PetViewModelRaceSizeTest.kt +++ b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/petRaceAndSize/PetViewModelRaceSizeTest.kt @@ -460,4 +460,4 @@ class PetViewModelRaceSizeTest { assertEquals(ERROR_MESSAGE, viewModelTest.message.value) } -} \ No newline at end of file +} diff --git a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/registerScreen/RegisterMethodTest.kt b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/registerScreen/RegisterMethodTest.kt index a46e7312..cd6f5d0d 100644 --- a/petJournal/app/src/test/java/com/soujunior/petjournal/ui/registerScreen/RegisterMethodTest.kt +++ b/petJournal/app/src/test/java/com/soujunior/petjournal/ui/registerScreen/RegisterMethodTest.kt @@ -390,4 +390,4 @@ class RegisterMethodTest { viewModel.onEvent(event) assertEquals(privacyPolicy, viewModel.state.privacyPolicy) } -} \ No newline at end of file +} diff --git a/petJournal/data/.gitignore b/petJournal/data/.gitignore index 42afabfd..796b96d1 100644 --- a/petJournal/data/.gitignore +++ b/petJournal/data/.gitignore @@ -1 +1 @@ -/build \ No newline at end of file +/build diff --git a/petJournal/data/build.gradle.kts b/petJournal/data/build.gradle.kts index edf76949..e2379990 100644 --- a/petJournal/data/build.gradle.kts +++ b/petJournal/data/build.gradle.kts @@ -49,4 +49,4 @@ dependencies { testImplementation(rootProject.ext["testMockk"] as String) testImplementation(rootProject.ext["testAssertk"] as String) testImplementation(rootProject.ext["testKotlinxCoroutines"] as String) -} \ No newline at end of file +} diff --git a/petJournal/data/proguard-rules.pro b/petJournal/data/proguard-rules.pro index ff59496d..2f9dc5a4 100644 --- a/petJournal/data/proguard-rules.pro +++ b/petJournal/data/proguard-rules.pro @@ -18,4 +18,4 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +#-renamesourcefileattribute SourceFile diff --git a/petJournal/data/src/main/AndroidManifest.xml b/petJournal/data/src/main/AndroidManifest.xml index da441908..1d30510d 100644 --- a/petJournal/data/src/main/AndroidManifest.xml +++ b/petJournal/data/src/main/AndroidManifest.xml @@ -2,4 +2,4 @@ - \ No newline at end of file + diff --git a/petJournal/data/src/main/java/com/soujunior/data/remote/AuthService.kt b/petJournal/data/src/main/java/com/soujunior/data/remote/AuthService.kt index bd12f311..f7699fa5 100644 --- a/petJournal/data/src/main/java/com/soujunior/data/remote/AuthService.kt +++ b/petJournal/data/src/main/java/com/soujunior/data/remote/AuthService.kt @@ -36,4 +36,4 @@ interface AuthService { @POST("api/waiting-code") suspend fun waitingCode(@Body waitingCodeBody: AwaitingCodeModel): NetworkResult -} \ No newline at end of file +} diff --git a/petJournal/data/src/main/java/com/soujunior/data/remote/GuardianService.kt b/petJournal/data/src/main/java/com/soujunior/data/remote/GuardianService.kt index c3f52282..71cd2e73 100644 --- a/petJournal/data/src/main/java/com/soujunior/data/remote/GuardianService.kt +++ b/petJournal/data/src/main/java/com/soujunior/data/remote/GuardianService.kt @@ -32,4 +32,4 @@ interface GuardianService { @Header("Authorization") token: String, @Body petInformationResponse: PetInformationResponse ): NetworkResult -} \ No newline at end of file +} diff --git a/petJournal/data/src/main/java/com/soujunior/data/remote/adapters/NetworkResultCallAdapter.kt b/petJournal/data/src/main/java/com/soujunior/data/remote/adapters/NetworkResultCallAdapter.kt index ad98869b..3d1af8ee 100644 --- a/petJournal/data/src/main/java/com/soujunior/data/remote/adapters/NetworkResultCallAdapter.kt +++ b/petJournal/data/src/main/java/com/soujunior/data/remote/adapters/NetworkResultCallAdapter.kt @@ -15,4 +15,4 @@ class NetworkResultCallAdapter( override fun adapt(call: Call): Call> { return NetworkResultCall(call) } -} \ No newline at end of file +} diff --git a/petJournal/data/src/main/java/com/soujunior/data/remote/adapters/internal/NetworkResultCall.kt b/petJournal/data/src/main/java/com/soujunior/data/remote/adapters/internal/NetworkResultCall.kt index a7331c64..b9ce0eea 100644 --- a/petJournal/data/src/main/java/com/soujunior/data/remote/adapters/internal/NetworkResultCall.kt +++ b/petJournal/data/src/main/java/com/soujunior/data/remote/adapters/internal/NetworkResultCall.kt @@ -60,4 +60,4 @@ class NetworkResultCall( override fun cancel() { proxy.cancel() } -} \ No newline at end of file +} diff --git a/petJournal/data/src/main/java/com/soujunior/data/remote/adapters/internal/NetworkResultCallAdapterFactory.kt b/petJournal/data/src/main/java/com/soujunior/data/remote/adapters/internal/NetworkResultCallAdapterFactory.kt index 8ed2c1f4..8a544922 100644 --- a/petJournal/data/src/main/java/com/soujunior/data/remote/adapters/internal/NetworkResultCallAdapterFactory.kt +++ b/petJournal/data/src/main/java/com/soujunior/data/remote/adapters/internal/NetworkResultCallAdapterFactory.kt @@ -31,4 +31,4 @@ class NetworkResultCallAdapterFactory private constructor() : CallAdapter.Factor companion object { fun create(): NetworkResultCallAdapterFactory = NetworkResultCallAdapterFactory() } -} \ No newline at end of file +} diff --git a/petJournal/data/src/main/java/com/soujunior/data/repository/AppInfoDataImpl.kt b/petJournal/data/src/main/java/com/soujunior/data/repository/AppInfoDataImpl.kt index a809afa7..a7c46b72 100644 --- a/petJournal/data/src/main/java/com/soujunior/data/repository/AppInfoDataImpl.kt +++ b/petJournal/data/src/main/java/com/soujunior/data/repository/AppInfoDataImpl.kt @@ -11,4 +11,4 @@ class AppInfoDataImpl(private val db: AppInfoDataBaseImpl ) : AppInfoDataBaseRep override suspend fun setIsPetRegistrationWentLive(visualized: Boolean) { db.setIsPetRegistrationWentLive(visualized) } -} \ No newline at end of file +} diff --git a/petJournal/data/src/main/java/com/soujunior/data/repository/AuthRepositoryImpl.kt b/petJournal/data/src/main/java/com/soujunior/data/repository/AuthRepositoryImpl.kt index fd4436cf..810772f4 100644 --- a/petJournal/data/src/main/java/com/soujunior/data/repository/AuthRepositoryImpl.kt +++ b/petJournal/data/src/main/java/com/soujunior/data/repository/AuthRepositoryImpl.kt @@ -100,4 +100,4 @@ class AuthRepositoryImpl( false } } -} \ No newline at end of file +} diff --git a/petJournal/data/src/main/java/com/soujunior/data/util/checker/NetworkChecker.kt b/petJournal/data/src/main/java/com/soujunior/data/util/checker/NetworkChecker.kt index 9c3762ee..5e6e5cb1 100644 --- a/petJournal/data/src/main/java/com/soujunior/data/util/checker/NetworkChecker.kt +++ b/petJournal/data/src/main/java/com/soujunior/data/util/checker/NetworkChecker.kt @@ -17,4 +17,4 @@ class NetworkChecker(private val context: Context) { return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) } -} \ No newline at end of file +} diff --git a/petJournal/data/src/main/java/com/soujunior/data/util/manager/JwtManager.kt b/petJournal/data/src/main/java/com/soujunior/data/util/manager/JwtManager.kt index d9e0645f..7a7ca421 100644 --- a/petJournal/data/src/main/java/com/soujunior/data/util/manager/JwtManager.kt +++ b/petJournal/data/src/main/java/com/soujunior/data/util/manager/JwtManager.kt @@ -52,4 +52,4 @@ class JwtManager private constructor(context: Context) { INSTANCE ?: JwtManager(context).also { INSTANCE = it } } } -} \ No newline at end of file +} diff --git a/petJournal/database/.gitignore b/petJournal/database/.gitignore index 42afabfd..796b96d1 100644 --- a/petJournal/database/.gitignore +++ b/petJournal/database/.gitignore @@ -1 +1 @@ -/build \ No newline at end of file +/build diff --git a/petJournal/database/build.gradle b/petJournal/database/build.gradle index 87cc4035..c5f4da07 100644 --- a/petJournal/database/build.gradle +++ b/petJournal/database/build.gradle @@ -49,4 +49,3 @@ dependencies { testImplementation testMockk testImplementation testJunit } - diff --git a/petJournal/database/proguard-rules.pro b/petJournal/database/proguard-rules.pro index ff59496d..2f9dc5a4 100644 --- a/petJournal/database/proguard-rules.pro +++ b/petJournal/database/proguard-rules.pro @@ -18,4 +18,4 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +#-renamesourcefileattribute SourceFile diff --git a/petJournal/database/src/main/AndroidManifest.xml b/petJournal/database/src/main/AndroidManifest.xml index a5918e68..8bdb7e14 100644 --- a/petJournal/database/src/main/AndroidManifest.xml +++ b/petJournal/database/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - \ No newline at end of file + diff --git a/petJournal/database/src/main/java/com/petjournal/database/converter/Converter.kt b/petJournal/database/src/main/java/com/petjournal/database/converter/Converter.kt index 27f75142..39f9503c 100644 --- a/petJournal/database/src/main/java/com/petjournal/database/converter/Converter.kt +++ b/petJournal/database/src/main/java/com/petjournal/database/converter/Converter.kt @@ -109,4 +109,4 @@ object Converter { } return listPetRacesEntity } -} \ No newline at end of file +} diff --git a/petJournal/database/src/main/java/com/petjournal/database/database/dao/ApplicationInformationDao.kt b/petJournal/database/src/main/java/com/petjournal/database/database/dao/ApplicationInformationDao.kt index 0b2381ea..a84be72b 100644 --- a/petJournal/database/src/main/java/com/petjournal/database/database/dao/ApplicationInformationDao.kt +++ b/petJournal/database/src/main/java/com/petjournal/database/database/dao/ApplicationInformationDao.kt @@ -18,4 +18,3 @@ interface ApplicationInformationDao { @Query("DELETE FROM information") suspend fun deleteAllInformation() } - diff --git a/petJournal/database/src/main/java/com/petjournal/database/database/entity/GuardianProfile.kt b/petJournal/database/src/main/java/com/petjournal/database/database/entity/GuardianProfile.kt index d1bf523f..1f391c8f 100644 --- a/petJournal/database/src/main/java/com/petjournal/database/database/entity/GuardianProfile.kt +++ b/petJournal/database/src/main/java/com/petjournal/database/database/entity/GuardianProfile.kt @@ -10,4 +10,4 @@ data class GuardianProfile( val lastName: String? = null, val email: String? = null, val phone: String? = null -) \ No newline at end of file +) diff --git a/petJournal/database/src/main/java/com/petjournal/database/database/entity/PetInformation.kt b/petJournal/database/src/main/java/com/petjournal/database/database/entity/PetInformation.kt index 2ff35609..b06f2fe8 100644 --- a/petJournal/database/src/main/java/com/petjournal/database/database/entity/PetInformation.kt +++ b/petJournal/database/src/main/java/com/petjournal/database/database/entity/PetInformation.kt @@ -26,5 +26,3 @@ data class PetInformation( val petAge: String? = null, val castration: Boolean? = null ) - - diff --git a/petJournal/database/src/main/java/com/petjournal/database/repository/AppInfoDataBaseImpl.kt b/petJournal/database/src/main/java/com/petjournal/database/repository/AppInfoDataBaseImpl.kt index 596109c8..86d4679e 100644 --- a/petJournal/database/src/main/java/com/petjournal/database/repository/AppInfoDataBaseImpl.kt +++ b/petJournal/database/src/main/java/com/petjournal/database/repository/AppInfoDataBaseImpl.kt @@ -11,4 +11,4 @@ class AppInfoDataBaseImpl(private val appInfoDao: ApplicationInformationDao): Ap override suspend fun setIsPetRegistrationWentLive(visualized: Boolean) { appInfoDao.setPetRegistrationWentLive(1, visualized) } -} \ No newline at end of file +} diff --git a/petJournal/database/src/main/java/com/petjournal/database/repository/GuardianLocalDataSourceImpl.kt b/petJournal/database/src/main/java/com/petjournal/database/repository/GuardianLocalDataSourceImpl.kt index ff1e9489..ce0d8005 100644 --- a/petJournal/database/src/main/java/com/petjournal/database/repository/GuardianLocalDataSourceImpl.kt +++ b/petJournal/database/src/main/java/com/petjournal/database/repository/GuardianLocalDataSourceImpl.kt @@ -124,4 +124,4 @@ class GuardianLocalDataSourceImpl( guardianDao.deleteAllProfiles() appInfoDao.deleteAllInformation() } -} \ No newline at end of file +} diff --git a/petJournal/database/src/test/java/com/petjournal/setup/FormMock.kt b/petJournal/database/src/test/java/com/petjournal/setup/FormMock.kt index c5d38efb..115d6f86 100644 --- a/petJournal/database/src/test/java/com/petjournal/setup/FormMock.kt +++ b/petJournal/database/src/test/java/com/petjournal/setup/FormMock.kt @@ -92,4 +92,3 @@ val listPetSizes = listOf( tag = "Cat" ) ) - diff --git a/petJournal/dependencies.gradle b/petJournal/dependencies.gradle index 71ff4798..63156856 100644 --- a/petJournal/dependencies.gradle +++ b/petJournal/dependencies.gradle @@ -35,4 +35,4 @@ ext { testKotlinxCoroutines = "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4" androidTestJunit = "androidx.test.ext:junit:1.1.5" androidTestExpresso = "androidx.test.espresso:espresso-core:3.5.1" -} \ No newline at end of file +} diff --git a/petJournal/domain/.gitignore b/petJournal/domain/.gitignore index 42afabfd..796b96d1 100644 --- a/petJournal/domain/.gitignore +++ b/petJournal/domain/.gitignore @@ -1 +1 @@ -/build \ No newline at end of file +/build diff --git a/petJournal/domain/build.gradle.kts b/petJournal/domain/build.gradle.kts index 15e41ca4..7fb6e48a 100644 --- a/petJournal/domain/build.gradle.kts +++ b/petJournal/domain/build.gradle.kts @@ -44,4 +44,4 @@ dependencies { testImplementation(rootProject.ext["testMockk"] as String) // Implementação da dependência de teste MockK testImplementation(rootProject.ext["testAssertk"] as String) // Implementação da dependência de teste AssertK testImplementation(rootProject.ext["testKotlinxCoroutines"] as String) // Implementação da dependência de teste para coroutines -} \ No newline at end of file +} diff --git a/petJournal/domain/proguard-rules.pro b/petJournal/domain/proguard-rules.pro index ff59496d..2f9dc5a4 100644 --- a/petJournal/domain/proguard-rules.pro +++ b/petJournal/domain/proguard-rules.pro @@ -18,4 +18,4 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +#-renamesourcefileattribute SourceFile diff --git a/petJournal/domain/src/main/AndroidManifest.xml b/petJournal/domain/src/main/AndroidManifest.xml index a5918e68..8bdb7e14 100644 --- a/petJournal/domain/src/main/AndroidManifest.xml +++ b/petJournal/domain/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - \ No newline at end of file + diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/PetInformationModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/PetInformationModel.kt index d17fc91f..d0cf25c1 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/PetInformationModel.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/PetInformationModel.kt @@ -12,4 +12,4 @@ data class PetInformationModel( val petAge: String? = null, val guardianId: Int? = null, val castrated: Boolean? = null -) \ No newline at end of file +) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/mapper/User.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/mapper/User.kt index e7bb6f60..8b2f66b1 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/mapper/User.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/mapper/User.kt @@ -6,4 +6,4 @@ data class User ( val lastName: String, val email: String, val phone: String -) \ No newline at end of file +) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/AwaitingCodeModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/AwaitingCodeModel.kt index ed4648c5..2d1c351f 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/AwaitingCodeModel.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/AwaitingCodeModel.kt @@ -3,4 +3,4 @@ package com.soujunior.domain.model.request data class AwaitingCodeModel( val email: String, val verificationToken: String -) \ No newline at end of file +) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/ChangePasswordModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/ChangePasswordModel.kt index 9144048b..38facf78 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/ChangePasswordModel.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/ChangePasswordModel.kt @@ -3,4 +3,4 @@ package com.soujunior.domain.model.request data class ChangePasswordModel( val password: String, val passwordConfirmation: String -) \ No newline at end of file +) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/ForgotPasswordModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/ForgotPasswordModel.kt index 3ee118b5..0350c535 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/ForgotPasswordModel.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/ForgotPasswordModel.kt @@ -2,4 +2,4 @@ package com.soujunior.domain.model.request data class ForgotPasswordModel( val email: String -) \ No newline at end of file +) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/LoginModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/LoginModel.kt index 0f5ade41..3c9914ef 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/LoginModel.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/LoginModel.kt @@ -3,4 +3,4 @@ package com.soujunior.domain.model.request data class LoginModel( val email: String, val password: String -) \ No newline at end of file +) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/PetRaceItemModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/PetRaceItemModel.kt index 0866c0fc..a9469ecb 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/PetRaceItemModel.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/PetRaceItemModel.kt @@ -3,4 +3,4 @@ data class PetRaceItemModel( val id: String, val name: String, val specieId: String -) \ No newline at end of file +) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/PetSizeItemModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/PetSizeItemModel.kt index a31bcc17..479e979c 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/PetSizeItemModel.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/PetSizeItemModel.kt @@ -4,4 +4,4 @@ data class PetSizeItemModel( val id: String, val name: String, val specieId: String -) \ No newline at end of file +) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/SignUpModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/SignUpModel.kt index 8baa6a5f..46395666 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/SignUpModel.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/SignUpModel.kt @@ -8,4 +8,4 @@ data class SignUpModel( val passwordConfirmation: String, val phone: String, val isPrivacyPolicyAccepted: Boolean, -) \ No newline at end of file +) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/MonthlyTaskModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/MonthlyTaskModel.kt index ca38e64e..69de1f93 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/MonthlyTaskModel.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/MonthlyTaskModel.kt @@ -10,4 +10,3 @@ data class MonthlyTaskModel ( val days_of_month : List, val pets: List ) - diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/PontualTaskModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/PontualTaskModel.kt index e915bbd9..66553cf7 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/PontualTaskModel.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/PontualTaskModel.kt @@ -8,4 +8,4 @@ data class PontualTaskModel( val tag_id : String, val pets: List -) \ No newline at end of file +) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/response/AccessTokenResponse.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/response/AccessTokenResponse.kt index ecb4b51c..5febbed3 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/response/AccessTokenResponse.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/response/AccessTokenResponse.kt @@ -1,3 +1,3 @@ package com.soujunior.domain.model.response -data class AccessTokenResponse(val accessToken: String) \ No newline at end of file +data class AccessTokenResponse(val accessToken: String) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/response/GuardianNameResponse.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/response/GuardianNameResponse.kt index df3316a6..323d5816 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/response/GuardianNameResponse.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/response/GuardianNameResponse.kt @@ -3,4 +3,4 @@ package com.soujunior.domain.model.response data class GuardianNameResponse( val firstName: String, val lastName: String -) \ No newline at end of file +) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/response/MessageResponse.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/response/MessageResponse.kt index 2eeb8fc4..21c8a999 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/response/MessageResponse.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/response/MessageResponse.kt @@ -1,3 +1,3 @@ package com.soujunior.domain.model.response -data class MessageResponse(val message: String) \ No newline at end of file +data class MessageResponse(val message: String) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/response/PetResponse.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/response/PetResponse.kt index 20e3d28c..7d83d947 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/response/PetResponse.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/response/PetResponse.kt @@ -45,4 +45,4 @@ val petList = listOf( petName = "Nutella", petImage = "https://cdn.pixabay.com/photo/2023/08/18/15/02/dog-8198719_1280.jpg" ), - ) \ No newline at end of file + ) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/response/UserInfoResponse.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/response/UserInfoResponse.kt index bc893cff..ef0fcb0c 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/response/UserInfoResponse.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/response/UserInfoResponse.kt @@ -6,4 +6,4 @@ data class UserInfoResponse( val lastName: String, val email: String, val phone: String -) \ No newline at end of file +) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt index 9a2b5c9b..eef77ae3 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt @@ -24,7 +24,7 @@ data class TaskTagModel( ) -// TODO: Criar objetos para os requests pontuais/diarios/semanais/mensais +// TODO: Criar objetos para os requests pontuais/diarios/semanais/mensais data class TaskModel( val id: String, val description: String, @@ -36,4 +36,4 @@ data class TaskModel( val daysOfWeek : List = emptyList(), val daysOfMonth : List = emptyList(), val pets: List -) \ No newline at end of file +) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/network/NetworkResult.kt b/petJournal/domain/src/main/java/com/soujunior/domain/network/NetworkResult.kt index 419b06e7..8f5c2ef1 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/network/NetworkResult.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/network/NetworkResult.kt @@ -39,4 +39,4 @@ suspend fun NetworkResult.onException( if (this is NetworkResult.Exception) { executable(e) } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/repository/AppInfoDataBase.kt b/petJournal/domain/src/main/java/com/soujunior/domain/repository/AppInfoDataBase.kt index f9938135..857c49c7 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/repository/AppInfoDataBase.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/repository/AppInfoDataBase.kt @@ -3,4 +3,4 @@ package com.soujunior.domain.repository interface AppInfoDataBase { suspend fun getIsPetRegistrationWentLive(): Boolean suspend fun setIsPetRegistrationWentLive(visualized: Boolean) -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/repository/AppInfoDataBaseRepository.kt b/petJournal/domain/src/main/java/com/soujunior/domain/repository/AppInfoDataBaseRepository.kt index 44af0bd7..6595f3dd 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/repository/AppInfoDataBaseRepository.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/repository/AppInfoDataBaseRepository.kt @@ -3,4 +3,4 @@ package com.soujunior.domain.repository interface AppInfoDataBaseRepository { suspend fun getIsPetRegistrationWentLive(): Boolean suspend fun setIsPetRegistrationWentLive(visualized: Boolean) -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/repository/AuthRepository.kt b/petJournal/domain/src/main/java/com/soujunior/domain/repository/AuthRepository.kt index 32b43040..7fde6c2a 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/repository/AuthRepository.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/repository/AuthRepository.kt @@ -29,4 +29,4 @@ interface AuthRepository { suspend fun getSavedPassword(): String? suspend fun logout() -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/repository/GuardianLocalDataSource.kt b/petJournal/domain/src/main/java/com/soujunior/domain/repository/GuardianLocalDataSource.kt index 3051a191..33822fee 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/repository/GuardianLocalDataSource.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/repository/GuardianLocalDataSource.kt @@ -18,4 +18,4 @@ interface GuardianLocalDataSource { suspend fun getListPetRaces(tag: String): DataResult>? suspend fun saveListPetRaces(tag: String, listPetRace: List): DataResult -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/repository/GuardianRepository.kt b/petJournal/domain/src/main/java/com/soujunior/domain/repository/GuardianRepository.kt index 6fc9bf08..0728c886 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/repository/GuardianRepository.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/repository/GuardianRepository.kt @@ -15,4 +15,4 @@ interface GuardianRepository { suspend fun getListPetSizes(petSpecie: String): NetworkResult> suspend fun getListPetRaces(petSpecie: String): NetworkResult> suspend fun createPetInformationApi(petInformationModel: PetInformationModel): NetworkResult -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/repository/ValidationRepository.kt b/petJournal/domain/src/main/java/com/soujunior/domain/repository/ValidationRepository.kt index 515ffc4e..f3042acc 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/repository/ValidationRepository.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/repository/ValidationRepository.kt @@ -22,4 +22,4 @@ interface ValidationRepository { fun validateDropdown(value : String, list: List) : ValidationResult fun validateDropDownPetRace(value : String, list: List) : ValidationResult fun validatePetCastration(value: Boolean?): ValidationResult -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/AwaitingCodeUseCase.kt b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/AwaitingCodeUseCase.kt index 912a4cbf..d17e2e76 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/AwaitingCodeUseCase.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/AwaitingCodeUseCase.kt @@ -34,4 +34,4 @@ class AwaitingCodeUseCase( is NetworkResult.Exception -> DataResult.Failure(response.e) } } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/ChangePasswordUseCase.kt b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/ChangePasswordUseCase.kt index 92d72a46..6c3f5fca 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/ChangePasswordUseCase.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/ChangePasswordUseCase.kt @@ -23,4 +23,4 @@ class ChangePasswordUseCase( is NetworkResult.Exception -> DataResult.Failure(this.e) } } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/CheckLoginStatusUseCase.kt b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/CheckLoginStatusUseCase.kt index 583fce22..ebf3b662 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/CheckLoginStatusUseCase.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/CheckLoginStatusUseCase.kt @@ -11,4 +11,4 @@ class CheckLoginStatusUseCase( private val repository: AuthRepository ) : BaseUs else -> DataResult.Success(true) } } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/ForgotPasswordUseCase.kt b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/ForgotPasswordUseCase.kt index 29fcf0b2..f6032128 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/ForgotPasswordUseCase.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/ForgotPasswordUseCase.kt @@ -31,4 +31,4 @@ class ForgotPasswordUseCase( is NetworkResult.Exception -> DataResult.Failure(this.e) } } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/GetSavedPasswordUseCase.kt b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/GetSavedPasswordUseCase.kt index a8ddfc87..d9cacff6 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/GetSavedPasswordUseCase.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/GetSavedPasswordUseCase.kt @@ -8,4 +8,4 @@ class GetSavedPasswordUseCase( suspend operator fun invoke(): String? { return authRepository.getSavedPassword() } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/LoginUseCase.kt b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/LoginUseCase.kt index 1823e132..371d150c 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/LoginUseCase.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/LoginUseCase.kt @@ -23,4 +23,4 @@ class LoginUseCase (private val repository : AuthRepository): BaseUseCase DataResult.Failure(response.e) } } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/SignUpUseCase.kt b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/SignUpUseCase.kt index 70a8d0e9..ccf5a82d 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/SignUpUseCase.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/auth/SignUpUseCase.kt @@ -41,4 +41,4 @@ class SignUpUseCase( email = this.email, phone = this.phone ) -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/base/BaseUseCase.kt b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/base/BaseUseCase.kt index 8075470f..a71e8625 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/base/BaseUseCase.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/base/BaseUseCase.kt @@ -23,4 +23,4 @@ abstract class BaseUseCase { } fun cancelWork() = scope.coroutineContext.cancelChildren() -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/base/DataResult.kt b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/base/DataResult.kt index 3320dfcb..102098be 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/base/DataResult.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/base/DataResult.kt @@ -31,4 +31,3 @@ suspend fun DataResult.onFailure( executable(throwable) } } - diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/guardian/GetGuardianNameUseCase.kt b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/guardian/GetGuardianNameUseCase.kt index 0b630fb7..7af7c371 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/guardian/GetGuardianNameUseCase.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/guardian/GetGuardianNameUseCase.kt @@ -17,4 +17,4 @@ class GetGuardianNameUseCase(private val repository: GuardianRepository) : is NetworkResult.Exception -> DataResult.Failure(response.e) } } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/guardian/GetPetRegistrationWentLive.kt b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/guardian/GetPetRegistrationWentLive.kt index 364e0173..465719b8 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/guardian/GetPetRegistrationWentLive.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/guardian/GetPetRegistrationWentLive.kt @@ -17,4 +17,4 @@ class GetPetRegistrationWentLive(private val db: AppInfoDataBase) : BaseUseCase< DataResult.Failure(e) } } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/guardian/SetPetRegistrationWentLive.kt b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/guardian/SetPetRegistrationWentLive.kt index 28f0d760..065db260 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/guardian/SetPetRegistrationWentLive.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/guardian/SetPetRegistrationWentLive.kt @@ -24,4 +24,4 @@ class SetPetRegistrationWentLive(private val db: AppInfoDataBase) : BaseUseCase< DataResult.Failure(e) } } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/pet/GetListPetRacesUseCase.kt b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/pet/GetListPetRacesUseCase.kt index 9d8b9689..b2716316 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/pet/GetListPetRacesUseCase.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/pet/GetListPetRacesUseCase.kt @@ -14,4 +14,4 @@ class GetListPetRacesUseCase(private val repository: GuardianRepository): BaseUs is NetworkResult.Exception -> DataResult.Failure(response.e) } } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/pet/GetListPetSizesUseCase.kt b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/pet/GetListPetSizesUseCase.kt index 540812dc..588f6df3 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/use_case/pet/GetListPetSizesUseCase.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/use_case/pet/GetListPetSizesUseCase.kt @@ -14,4 +14,4 @@ class GetListPetSizesUseCase(private val repository: GuardianRepository): BaseUs is NetworkResult.Exception -> DataResult.Failure(response.e) } } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/main/res/values/strings.xml b/petJournal/domain/src/main/res/values/strings.xml index aa627417..0e8e2044 100644 --- a/petJournal/domain/src/main/res/values/strings.xml +++ b/petJournal/domain/src/main/res/values/strings.xml @@ -7,4 +7,4 @@ Error in Save Token! Codigo expirado ou incorreto! Erro interno do servidor. Ocorreu um erro inesperado. Tente novamente em alguns instantes. - \ No newline at end of file + diff --git a/petJournal/domain/src/test/java/com/soujunior/domain/setup/MainCoroutineRule.kt b/petJournal/domain/src/test/java/com/soujunior/domain/setup/MainCoroutineRule.kt index 766ecf2a..46d71595 100644 --- a/petJournal/domain/src/test/java/com/soujunior/domain/setup/MainCoroutineRule.kt +++ b/petJournal/domain/src/test/java/com/soujunior/domain/setup/MainCoroutineRule.kt @@ -24,4 +24,4 @@ class MainCoroutineRule( cleanupTestCoroutines() Dispatchers.resetMain() } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/test/java/com/soujunior/domain/use_case/auth/AwaitingCodeUseCaseTest.kt b/petJournal/domain/src/test/java/com/soujunior/domain/use_case/auth/AwaitingCodeUseCaseTest.kt index 21b9d0d3..28048b49 100644 --- a/petJournal/domain/src/test/java/com/soujunior/domain/use_case/auth/AwaitingCodeUseCaseTest.kt +++ b/petJournal/domain/src/test/java/com/soujunior/domain/use_case/auth/AwaitingCodeUseCaseTest.kt @@ -67,4 +67,4 @@ class AwaitingCodeUseCaseTest { else -> fail("Expected NetworkResult.Success but got $result") } } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/CreatePetInformationApiUseCaseTest.kt b/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/CreatePetInformationApiUseCaseTest.kt index 0dd1e6cd..ee8137de 100644 --- a/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/CreatePetInformationApiUseCaseTest.kt +++ b/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/CreatePetInformationApiUseCaseTest.kt @@ -41,4 +41,4 @@ class CreatePetInformationApiUseCaseTest { assertk.assertThat(result.success.data).isEqualTo(Unit) } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/GetListPetRacesUseCaseTest.kt b/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/GetListPetRacesUseCaseTest.kt index 866567d2..accbef0d 100644 --- a/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/GetListPetRacesUseCaseTest.kt +++ b/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/GetListPetRacesUseCaseTest.kt @@ -44,4 +44,4 @@ class GetListPetRacesUseCaseTest{ assertk.assertThat(result.success.data).isEqualTo(listPetRaces) } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/GetListPetSizesUseCaseTest.kt b/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/GetListPetSizesUseCaseTest.kt index a3537337..bbb93e6f 100644 --- a/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/GetListPetSizesUseCaseTest.kt +++ b/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/GetListPetSizesUseCaseTest.kt @@ -44,4 +44,4 @@ class GetListPetSizesUseCaseTest{ assertk.assertThat(result.success.data).isEqualTo(listPetSizes) } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/GetPetInformationUseCaseTest.kt b/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/GetPetInformationUseCaseTest.kt index 5014affa..767edaef 100644 --- a/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/GetPetInformationUseCaseTest.kt +++ b/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/GetPetInformationUseCaseTest.kt @@ -42,4 +42,4 @@ class GetPetInformationUseCaseTest{ assertk.assertThat(result.success.data).isEqualTo(petInformation) } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/SavePetInformationUseCaseTest.kt b/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/SavePetInformationUseCaseTest.kt index 1a505f87..1cbec6f5 100644 --- a/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/SavePetInformationUseCaseTest.kt +++ b/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/SavePetInformationUseCaseTest.kt @@ -41,4 +41,4 @@ class SavePetInformationUseCaseTest { assertk.assertThat(result.success.data).isEqualTo(1) } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/UpdatePetInformationUseCaseTest.kt b/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/UpdatePetInformationUseCaseTest.kt index b47edd19..aa97e9bb 100644 --- a/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/UpdatePetInformationUseCaseTest.kt +++ b/petJournal/domain/src/test/java/com/soujunior/domain/use_case/pet/UpdatePetInformationUseCaseTest.kt @@ -41,4 +41,4 @@ class UpdatePetInformationUseCaseTest { assertk.assertThat(result.isSuccess).isEqualTo(true) } -} \ No newline at end of file +} diff --git a/petJournal/domain/src/test/java/com/soujunior/domain/usecase/auth/ChangePasswordUseCaseTest.kt b/petJournal/domain/src/test/java/com/soujunior/domain/usecase/auth/ChangePasswordUseCaseTest.kt index 98047a42..b952d07e 100644 --- a/petJournal/domain/src/test/java/com/soujunior/domain/usecase/auth/ChangePasswordUseCaseTest.kt +++ b/petJournal/domain/src/test/java/com/soujunior/domain/usecase/auth/ChangePasswordUseCaseTest.kt @@ -65,4 +65,4 @@ package com.soujunior.domain.usecase.auth // // assertThat(result.isFailure).isEqualTo(true) // } -//} \ No newline at end of file +//} diff --git a/petJournal/gradle.properties b/petJournal/gradle.properties index a2e90d87..0f025bd7 100644 --- a/petJournal/gradle.properties +++ b/petJournal/gradle.properties @@ -22,4 +22,4 @@ kotlin.code.style=official # thereby reducing the size of the R class for that library android.nonTransitiveRClass=true android.defaults.buildfeatures.buildconfig=true -android.nonFinalResIds=false \ No newline at end of file +android.nonFinalResIds=false From f10941db3aa847b3abf5c9329490cf2458190149 Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Fri, 7 Nov 2025 18:47:08 -0300 Subject: [PATCH 67/70] refactor: update task card and data components --- .../petjournal/ui/components/TaskCard.kt | 51 ++++--- .../petjournal/ui/components/data/Mock.kt | 56 ++++++++ .../petjournal/ui/components/data/TaskData.kt | 12 ++ .../petjournal/ui/components/data/TaskType.kt | 12 ++ .../ui/components/data/TaskTypes.kt | 129 ++++-------------- 5 files changed, 130 insertions(+), 130 deletions(-) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/Mock.kt create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskData.kt create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskType.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt index f4a5bf89..b204a51e 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt @@ -45,9 +45,10 @@ import ir.kaaveh.sdpcompose.ssp @Composable fun TaskCard( taskData: TaskData, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, + expandValue: Boolean = false ) { - var expanded by remember { mutableStateOf(false) } + var expanded by remember { mutableStateOf(expandValue) } Box( modifier = modifier.clip(RectangleShape) @@ -60,12 +61,11 @@ fun TaskCard( .padding(2.sdp) .animateContentSize() ) { - // Background icon when expanded - outside the Surface if (expanded) { Icon( - painter = painterResource(id = taskData.tipo.iconeVector!!), - contentDescription = "Ícone ${taskData.tipo.nome}", - tint = taskData.tipo.cor.copy(alpha = .5f), + painter = painterResource(id = taskData.type.iconVector!!), + contentDescription = "Ícone ${taskData.type.name}", + tint = taskData.type.color.copy(alpha = .5f), modifier = Modifier .align(Alignment.BottomStart) .padding(start = 2.sdp, bottom = 42.sdp) @@ -88,7 +88,7 @@ fun TaskCard( horizontalAlignment = Alignment.Start ) { Text( - text = taskData.titulo, + text = taskData.title, modifier = Modifier.padding(bottom = 2.sdp), style = MaterialTheme.typography.titleMedium, fontSize = 15.ssp @@ -101,9 +101,6 @@ fun TaskCard( fontSize = 10.ssp ) - /** - * Vai receber n ids de pets e vai criar a grid com as imagens dos respectivos pets - * */ if (expanded) { LazyVerticalGrid( modifier = Modifier.fillMaxWidth(), @@ -119,17 +116,16 @@ fun TaskCard( } } - // Right side: Description Column( modifier = Modifier .padding(horizontal = 8.sdp) .weight(0.6f), horizontalAlignment = Alignment.Start ) { - val displayText = if (!expanded && taskData.descricaoResumida.length > 50) { - taskData.descricaoResumida.take(50) + "..." + val displayText = if (!expanded && taskData.descriptionResumed.length > 50) { + taskData.descriptionResumed.take(50) + "..." } else { - taskData.descricaoResumida + taskData.descriptionResumed } Text( @@ -142,7 +138,7 @@ fun TaskCard( if (expanded) { Text( - text = taskData.descricaoCompleta, + text = taskData.descriptionCompleted, style = MaterialTheme.typography.titleSmall, modifier = Modifier .fillMaxWidth(1f) @@ -152,7 +148,6 @@ fun TaskCard( } } - // Expanded content if (expanded) { Column( modifier = Modifier @@ -174,18 +169,17 @@ fun TaskCard( Text( text = "Editar Tarefa", fontSize = 10.ssp, - color = taskData.tipo.cor, + color = taskData.type.color, ) } } } - // Bottom section: "Ver Mais" / "Ver Menos" Box( modifier = Modifier .fillMaxWidth() .height(20.sdp) - .background(taskData.tipo.cor) + .background(taskData.type.color) .clickable { expanded = !expanded }, ) { Text( @@ -206,15 +200,20 @@ fun TaskCard( @Preview @Composable private fun TaskCardPreview() { - Column(Modifier.padding(8.sdp)) { + Column(Modifier) { TaskCard( taskData = TaskFakeData.sampleTasks[0] ) -// TaskCard( -// taskData = TaskFakeData.sampleTasks[1] -// ) -// TaskCard( -// taskData = TaskFakeData.sampleTasks[2] -// ) + } +} + +@Preview +@Composable +private fun TaskCardExpandedPreview() { + Column(Modifier) { + TaskCard( + taskData = TaskFakeData.sampleTasks[0], + expandValue = true + ) } } diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/Mock.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/Mock.kt new file mode 100644 index 00000000..551f167d --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/Mock.kt @@ -0,0 +1,56 @@ +package com.soujunior.petjournal.ui.components.data + +data class FakePetData( + val id: String, + val imageRes: String = "" +) + +object TaskFakeData { + private val samplePets = listOf( + FakePetData(id = "pet_001"), + FakePetData(id = "pet_002"), + FakePetData(id = "pet_003"), + FakePetData(id = "pet_004"), + FakePetData(id = "pet_005"), + FakePetData(id = "pet_006") + ) + + val sampleTasks = listOf( + TaskData( + id = "1", + title = "Carprofeno", + descriptionResumed = "Anti-inflamatorio não esteroide para alivio da dor e inflamação", + descriptionCompleted = "Medicamento anti-inflamatório não esteroide para alívio da dor e inflamação. Deve ser administrado com cuidado e seguindo as instruções veterinárias. Dosagem recomendada conforme peso do animal.", + startAt = "12/08/2025 - 10:30", + type = TaskTypes.MEDICAMENTOS, + pets = listOf(samplePets[0], samplePets[1], samplePets[2]) + ), + TaskData( + id = "2", + title = "Vacina Antirrábica", + descriptionResumed = "Vacina obrigatória contra raiva para proteção do pet", + descriptionCompleted = "Vacina antirrábica anual obrigatória. Essencial para proteção contra a raiva e exigida por lei. Deve ser aplicada por veterinário e gera certificado de vacinação.", + startAt = "15/08/2025 - 14:00", + type = TaskTypes.VACINA, + pets = listOf(samplePets[0]) + ), + TaskData( + id = "3", + title = "Consulta de Rotina", + descriptionResumed = "Check-up geral para avaliação da saúde do pet", + descriptionCompleted = "Consulta veterinária de rotina para avaliação geral da saúde, verificação de peso, exame físico completo e orientações sobre cuidados preventivos.", + startAt = "20/08/2025 - 09:15", + type = TaskTypes.CONSULTAS, + pets = listOf(samplePets[1], samplePets[3]) + ), + TaskData( + id = "4", + title = "Ração Premium", + descriptionResumed = "Trocar para ração premium conforme orientação veterinária", + descriptionCompleted = "Mudança gradual para ração premium de alta qualidade. Fazer transição lenta misturando com a ração atual por 7 dias. Quantidade: 200g por dia dividida em 2 refeições.", + startAt = "18/08/2025 - 18:00", + type = TaskTypes.RACAO, + pets = listOf(samplePets[0], samplePets[2], samplePets[4], samplePets[5]) + ) + ) +} diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskData.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskData.kt new file mode 100644 index 00000000..be8090f2 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskData.kt @@ -0,0 +1,12 @@ +package com.soujunior.petjournal.ui.components.data + +data class TaskData( + val id: String, + val title: String, + val descriptionResumed: String, + val descriptionCompleted: String, + val startAt: String, + val endAt: String = "", + val type: TaskType, + val pets: List = emptyList() +) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskType.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskType.kt new file mode 100644 index 00000000..8ac128f0 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskType.kt @@ -0,0 +1,12 @@ +package com.soujunior.petjournal.ui.components.data + +import androidx.annotation.DrawableRes +import androidx.compose.ui.graphics.Color + +data class TaskType( + val id: String, + val name: String, + val color: Color, + @DrawableRes val icon: Int? = null, + @DrawableRes val iconVector: Int? = null +) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskTypes.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskTypes.kt index abf7bee3..87aea5bd 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskTypes.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskTypes.kt @@ -1,71 +1,61 @@ package com.soujunior.petjournal.ui.components.data -import androidx.annotation.DrawableRes import androidx.compose.ui.graphics.Color import com.soujunior.petjournal.R -data class TaskType( - val id: String, - val nome: String, - val cor: Color, - @DrawableRes val icone: Int? = null, // Recebe um vetor drawable - @DrawableRes val iconeVector: Int? = null // Recebe um drawable vector -) - object TaskTypes { val VACINA = TaskType( id = "vacina", - nome = "Vacina", - cor = Color(0xFFFA680E), - icone = R.drawable.icone_vacinas, - iconeVector = R.drawable.icone_vacinas_vector + name = "Vacina", + color = Color(0xFFFA680E), + icon = R.drawable.icone_vacinas, + iconVector = R.drawable.icone_vacinas_vector ) val CONSULTAS = TaskType( id = "consultas", - nome = "Consultas", - cor = Color(0xFF20955E), - icone = R.drawable.icone_consulta, - iconeVector = R.drawable.icone_consultas_vector + name = "Consultas", + color = Color(0xFF20955E), + icon = R.drawable.icone_consulta, + iconVector = R.drawable.icone_consultas_vector ) val RACAO = TaskType( id = "racao", - nome = "Ração", - cor = Color(0xFF881803), - icone = R.drawable.icone_racao, - iconeVector = R.drawable.icone_racao_vector + name = "Ração", + color = Color(0xFF881803), + icon = R.drawable.icone_racao, + iconVector = R.drawable.icone_racao_vector ) val MEDICAMENTOS = TaskType( id = "medicamentos", - nome = "Medicamentos", - cor = Color(0xFF2F99E5), - icone = R.drawable.icone_medicamento, - iconeVector = R.drawable.icone_medicamentos_vector + name = "Medicamentos", + color = Color(0xFF2F99E5), + icon = R.drawable.icone_medicamento, + iconVector = R.drawable.icone_medicamentos_vector ) val BANHOS = TaskType( id = "banhos", - nome = "Banhos", - cor = Color(0xFFD03A94), - icone = R.drawable.icone_banho, - iconeVector = R.drawable.icone_banhos_vector + name = "Banhos", + color = Color(0xFFD03A94), + icon = R.drawable.icone_banho, + iconVector = R.drawable.icone_banhos_vector ) val PASSEIO = TaskType( id = "passeio", - nome = "Passeio", - cor = Color(0xFFB78AF7), - icone = R.drawable.icone_passeio, - iconeVector = R.drawable.icone_passeios_vector + name = "Passeio", + color = Color(0xFFB78AF7), + icon = R.drawable.icone_passeio, + iconVector = R.drawable.icone_passeios_vector ) - // Lista com todos os tipos para facilitar iteração val ALL_TYPES = listOf( VACINA, CONSULTAS, @@ -75,80 +65,11 @@ object TaskTypes { PASSEIO ) - // Função para buscar tipo por ID fun getTypeById(id: String): TaskType? { return ALL_TYPES.find { it.id == id } } - // Função para buscar tipo por nome fun getTypeByName(nome: String): TaskType? { - return ALL_TYPES.find { it.nome.equals(nome, ignoreCase = true) } + return ALL_TYPES.find { it.name.equals(nome, ignoreCase = true) } } } - -data class FakePetData( - val id: String, - val imageRes: String = "" // String vazia por enquanto -) - -data class TaskData( - val id: String, - val titulo: String, - val descricaoResumida: String, - val descricaoCompleta: String, - val startAt: String, - val endAt: String = "", - val tipo: TaskType, - val pets: List = emptyList() -) - -// Dados dummy para exemplo/preview -object TaskFakeData { - private val samplePets = listOf( - FakePetData(id = "pet_001"), - FakePetData(id = "pet_002"), - FakePetData(id = "pet_003"), - FakePetData(id = "pet_004"), - FakePetData(id = "pet_005"), - FakePetData(id = "pet_006") - ) - - val sampleTasks = listOf( - TaskData( - id = "1", - titulo = "Carprofeno", - descricaoResumida = "Anti-inflamatorio não esteroide para alivio da dor e inflamação", - descricaoCompleta = "Medicamento anti-inflamatório não esteroide para alívio da dor e inflamação. Deve ser administrado com cuidado e seguindo as instruções veterinárias. Dosagem recomendada conforme peso do animal.", - startAt = "12/08/2025 - 10:30", - tipo = TaskTypes.MEDICAMENTOS, - pets = listOf(samplePets[0], samplePets[1], samplePets[2]) - ), - TaskData( - id = "2", - titulo = "Vacina Antirrábica", - descricaoResumida = "Vacina obrigatória contra raiva para proteção do pet", - descricaoCompleta = "Vacina antirrábica anual obrigatória. Essencial para proteção contra a raiva e exigida por lei. Deve ser aplicada por veterinário e gera certificado de vacinação.", - startAt = "15/08/2025 - 14:00", - tipo = TaskTypes.VACINA, - pets = listOf(samplePets[0]) - ), - TaskData( - id = "3", - titulo = "Consulta de Rotina", - descricaoResumida = "Check-up geral para avaliação da saúde do pet", - descricaoCompleta = "Consulta veterinária de rotina para avaliação geral da saúde, verificação de peso, exame físico completo e orientações sobre cuidados preventivos.", - startAt = "20/08/2025 - 09:15", - tipo = TaskTypes.CONSULTAS, - pets = listOf(samplePets[1], samplePets[3]) - ), - TaskData( - id = "4", - titulo = "Ração Premium", - descricaoResumida = "Trocar para ração premium conforme orientação veterinária", - descricaoCompleta = "Mudança gradual para ração premium de alta qualidade. Fazer transição lenta misturando com a ração atual por 7 dias. Quantidade: 200g por dia dividida em 2 refeições.", - startAt = "18/08/2025 - 18:00", - tipo = TaskTypes.RACAO, - pets = listOf(samplePets[0], samplePets[2], samplePets[4], samplePets[5]) - ) - ) -} From 218478a56a835f220f72cbaf0067c7bc0fae0d5c Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Fri, 7 Nov 2025 19:52:01 -0300 Subject: [PATCH 68/70] feat: update task date components and models --- .../taskListScreen/TaskListEvent.kt | 2 +- .../taskListScreen/TaskListViewModel.kt | 35 --------------- .../components/TaskDateComponent.kt | 2 +- .../petjournal/ui/util/DateFormatter.kt | 43 +++++++++++-------- .../app/src/main/res/values/strings.xml | 12 ++++++ .../request/taskModels/DailyTaskModel.kt | 6 +-- .../request/taskModels/PontualTaskModel.kt | 1 - .../domain/model/taskModel/TaskModel.kt | 8 ++-- 8 files changed, 47 insertions(+), 62 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListEvent.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListEvent.kt index 67e431cc..fa079b64 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListEvent.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListEvent.kt @@ -1,6 +1,6 @@ package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen sealed class TaskListEvent { - object AddTaskButton : TaskListEvent() + object addTaskButton : TaskListEvent() data class onDateFilterChange(val dateFilter: DateFilter) : TaskListEvent() } diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt index eff6c58d..1cc3f599 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt @@ -2,44 +2,12 @@ package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen import androidx.lifecycle.ViewModel import com.soujunior.domain.model.response.GuardianNameResponse -import com.soujunior.petjournal.ui.screens_app.screens_pets.speciesChoiceScreen.PetFormEvent -import com.soujunior.petjournal.ui.screens_app.screens_pets.speciesChoiceScreen.PetFormState -import com.soujunior.petjournal.ui.screens_app.screens_pets.speciesChoiceScreen.ViewModelChoiceSpecies -import com.soujunior.petjournal.ui.states.TaskState import com.soujunior.petjournal.ui.util.ValidationEvent import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.receiveAsFlow - -//class FakeTaskListViewModel : TaskListViewModel() { -// override var state: TaskListState -// get() = PetFormState() -// set(value) {} -// override val validationEventChannel = Channel() -// override val validationEvents = emptyFlow() -// override fun success(name: GuardianNameResponse) {} -// -// override val taskState = MutableStateFlow(TaskState.Idle) -// -// override fun failed(exception: Throwable?) { /* No-op */ -// } -// -// override fun onEvent(event: PetFormEvent) {} -// -// -// override fun enableButton(): Boolean = true -// -// -// override fun change(specieSelected: String?, specieWritten: String?) {} -// -// override fun savePetInformation(specie: String) {} -// -//} - abstract class TaskListViewModel : ViewModel() { abstract var state: TaskListState abstract val validationEventChannel: Channel @@ -50,7 +18,4 @@ abstract class TaskListViewModel : ViewModel() { abstract fun success(name: GuardianNameResponse) abstract fun failed(exception: Throwable?) abstract fun onEvent(event: TaskListEvent) - - // visualiza a tarefa baeado em periodos temporais (dia/mes/ano) - // cria tarefa } diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt index 082fb6f4..a72e3511 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt @@ -30,7 +30,7 @@ fun TaskDateComponent( text = date, style = MaterialTheme.typography.titleLarge, fontSize = 20.ssp, - modifier = Modifier.padding(bottom = 8.sdp) + modifier = Modifier.padding(start = 8.sdp, bottom = 8.sdp) ) tasks.forEach { taskData -> diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/DateFormatter.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/DateFormatter.kt index f2f4e93f..9b90aeb7 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/DateFormatter.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/DateFormatter.kt @@ -1,36 +1,45 @@ package com.soujunior.petjournal.ui.util +import android.content.Context +import androidx.annotation.StringRes +import com.soujunior.petjournal.R import java.time.LocalDateTime import java.time.Month import java.time.format.DateTimeFormatter -object DateFormatter{ +class DateFormatter(private val context: Context){ private val inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") fun formatDaily(dateString: String) : String{ val localDateTime = LocalDateTime.parse(dateString, inputFormatter) val day = localDateTime.dayOfMonth.toString().padStart(2, '0') - val monthName = getMonthName(localDateTime.monthValue) + + val monthName = getMonthName(localDateTime.month) + return "$day de $monthName" } - private fun getMonthName(month: Int): String{ - return when(month){ - 1 -> "Jan" - 2 -> "Fev" - 3 -> "Mar" - 4 -> "Abr" - 5 -> "Mai" - 6 -> "Jun" - 7 -> "Jul" - 8 -> "Ago" - 9 -> "Set" - 10 -> "Out" - 11 -> "Nov" - 12 -> "Dez" - else -> "" + @StringRes + private fun getMonthStringRes(month: Month) : Int { + return when (month) { + Month.JANUARY -> R.string.jan + Month.FEBRUARY -> R.string.fev + Month.MARCH -> R.string.mar + Month.APRIL -> R.string.abr + Month.MAY -> R.string.mai + Month.JUNE -> R.string.jun + Month.JULY -> R.string.jul + Month.AUGUST -> R.string.ago + Month.SEPTEMBER -> R.string.set + Month.OCTOBER -> R.string.out + Month.NOVEMBER -> R.string.nov + Month.DECEMBER -> R.string.dez } } + private fun getMonthName(month: Month): String{ + val stringResId = getMonthStringRes(month) + return context.getString(stringResId) + } } diff --git a/petJournal/app/src/main/res/values/strings.xml b/petJournal/app/src/main/res/values/strings.xml index d43daff2..448f5108 100644 --- a/petJournal/app/src/main/res/values/strings.xml +++ b/petJournal/app/src/main/res/values/strings.xml @@ -163,4 +163,16 @@ Diárias Semanais Mensais + Jan + Fev + Mar + Abr + Mai + Jun + Jul + Ago + Set + Out + Nov + Dez diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/DailyTaskModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/DailyTaskModel.kt index d48ca187..0916e7b9 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/DailyTaskModel.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/DailyTaskModel.kt @@ -4,8 +4,8 @@ data class DailyTaskModel( val title: String, val description: String, val note : String = "", - val start_at : String, - val end_at : String, - val tag_id : String, + val startAt : String, + val endAt : String, + val tagId : String, val pets: List ) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/PontualTaskModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/PontualTaskModel.kt index 66553cf7..e15e599f 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/PontualTaskModel.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/PontualTaskModel.kt @@ -7,5 +7,4 @@ data class PontualTaskModel( val scheduledAt : String, val tag_id : String, val pets: List - ) diff --git a/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt index eef77ae3..ba4872a9 100644 --- a/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt @@ -19,8 +19,8 @@ data class TaskTagModel( val id: String, val name: String, val color: String, - @DrawableRes val icone: Int? = null, // Recebe um vetor drawable - @DrawableRes val iconeVector: Int? = null // Recebe um drawable vector + @DrawableRes val icone: Int? = null, + @DrawableRes val iconeVector: Int? = null ) @@ -30,8 +30,8 @@ data class TaskModel( val description: String, val note : String = "", val tagId : String, - val scheduledAt : String = "", //se for pontual - val startAt : String = "", //se for diario/ + val scheduledAt : String = "", + val startAt : String = "", val endAt: String = "", val daysOfWeek : List = emptyList(), val daysOfMonth : List = emptyList(), From 29df3583721f7029e7c3065171beca6c5176c2be Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Fri, 7 Nov 2025 21:24:38 -0300 Subject: [PATCH 69/70] refactor: update task screen and date component structure --- .../taskListScreen/components/Screen.kt | 88 ++++++++++--------- .../components/TaskDateComponent.kt | 4 +- 2 files changed, 47 insertions(+), 45 deletions(-) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt index bcfbc489..8949ccf0 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt @@ -1,11 +1,16 @@ package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.components +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource @@ -33,53 +38,50 @@ fun Screen(navController: NavController){ modifier = Modifier, navigationUp = navController, showBottomBarNavigation = true, + titleTopBar = stringResource(R.string.next_tasks), + showTopBar = true, bottomNavigationBar = { NavigationBar(navController) }, contentToUse = { paddingValues -> - Column(modifier = Modifier - .padding(paddingValues) - .padding(horizontal = 8.sdp, vertical = 16.sdp)){ - Text(text = stringResource(R.string.next_tasks), - fontSize = 16.ssp, - lineHeight = 24.ssp, - fontFamily = FontFamily(RobotoRegular), - fontWeight = FontWeight(400), - color = Color(0xFF222222), - textAlign = TextAlign.Center) - - TabSelector( - selectedFilter = DateFilter.DAILY, - onFilterSelected = {}, + LazyColumn( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(12.sdp), modifier = Modifier - .fillMaxWidth() - .padding(top = 16.sdp) - ) - - LazyColumn { - item{ - TaskDateComponent( - date = "5 de Janeiro", - tasks = TaskFakeData.sampleTasks.take(2), - modifier = Modifier.padding(top = 16.sdp) - ) - } - item { - TaskDateComponent( - date = "3 de Fevereiro", - tasks = TaskFakeData.sampleTasks.take(1), - modifier = Modifier.padding(top = 16.sdp) - ) + .fillMaxSize() + .fillMaxHeight() + .padding(paddingValues), + contentPadding = PaddingValues(horizontal = 14.sdp), + content = { + item{ + TabSelector( + selectedFilter = DateFilter.DAILY, + onFilterSelected = {}, + modifier = Modifier + .fillMaxWidth() + ) + } + item{ + TaskDateComponent( + date = "5 de Janeiro", + tasks = TaskFakeData.sampleTasks.take(3), + modifier = Modifier + ) + } + item { + TaskDateComponent( + date = "3 de Fevereiro", + tasks = TaskFakeData.sampleTasks.take(1), + modifier = Modifier + ) + } + item{ + TaskDateComponent( + date = "30 de Setembro", + tasks = TaskFakeData.sampleTasks.take(3), + modifier = Modifier + ) + } } - item{ - TaskDateComponent( - date = "30 de Setembro", - tasks = TaskFakeData.sampleTasks.take(3), - modifier = Modifier.padding(top = 16.sdp) - ) - } - } - - - } + ) } ) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt index a72e3511..4e6dd9ce 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt @@ -30,13 +30,13 @@ fun TaskDateComponent( text = date, style = MaterialTheme.typography.titleLarge, fontSize = 20.ssp, - modifier = Modifier.padding(start = 8.sdp, bottom = 8.sdp) + modifier = Modifier.padding(bottom = 8.sdp) ) tasks.forEach { taskData -> TaskCard( taskData = taskData, - modifier = Modifier.padding(start = 8.sdp) + modifier = Modifier.padding() ) } From 7e5d28fa901cd588ff27e7f636ba8a19b6b88b53 Mon Sep 17 00:00:00 2001 From: Gustavo Oliveira <42920754+gusoliveira21@users.noreply.github.com> Date: Mon, 1 Dec 2025 23:55:20 -0300 Subject: [PATCH 70/70] update: upgrade sdk version to 36 --- petJournal/app/build.gradle.kts | 5 +- .../homeScreen/components/Screen.kt | 6 +- .../homeScreen/components/ScreenHomeImpl.kt | 186 ++++++++++++++++++ petJournal/build.gradle.kts | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- 5 files changed, 195 insertions(+), 6 deletions(-) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/ScreenHomeImpl.kt diff --git a/petJournal/app/build.gradle.kts b/petJournal/app/build.gradle.kts index 07da825d..fc10a067 100644 --- a/petJournal/app/build.gradle.kts +++ b/petJournal/app/build.gradle.kts @@ -7,12 +7,12 @@ plugins { android { namespace = "com.soujunior.petjournal" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "com.soujunior.petjournal" minSdk = 27 - targetSdk = 34 + targetSdk = 36 versionCode = 6 versionName = "1.0.6" @@ -55,6 +55,7 @@ dependencies { implementation(project(":domain")) implementation(project(":database")) implementation(project(":data")) + implementation("androidx.compose.runtime:runtime-android:1.9.5") val composeUiVersion = "1.4.2" diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Screen.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Screen.kt index d3602ce2..bd105b4d 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Screen.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/Screen.kt @@ -1,5 +1,6 @@ package com.soujunior.petjournal.ui.screens_app.screen_home.homeScreen.components +import android.annotation.SuppressLint import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -48,8 +49,9 @@ import com.soujunior.petjournal.ui.util.ValidationEvent import com.soujunior.petjournal.ui.util.capitalizeFirstLetter import org.koin.androidx.compose.getViewModel +@SuppressLint("ViewModelConstructorInComposable") @Composable -fun getHomeViewModelForPreview(): HomeScreenViewModel { +fun getHomeViewModelForPreview2(): HomeScreenViewModel { return if (LocalInspectionMode.current) { FakeHomeViewModel() } else { @@ -60,7 +62,7 @@ fun getHomeViewModelForPreview(): HomeScreenViewModel { @ExperimentalPagerApi @Composable fun Screen(navController: NavController) { - val viewModel: HomeScreenViewModel = getHomeViewModelForPreview() + val viewModel: HomeScreenViewModel = getHomeViewModelForPreview2() val showDropdownMenu = remember { mutableStateOf(false) } val taskState by viewModel.taskState.collectAsState() val name = remember { mutableStateOf(viewModel.name.value.firstName) } diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/ScreenHomeImpl.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/ScreenHomeImpl.kt new file mode 100644 index 00000000..0333cb67 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screen_home/homeScreen/components/ScreenHomeImpl.kt @@ -0,0 +1,186 @@ +package com.soujunior.petjournal.ui.screens_app.screen_home.homeScreen.components + +import android.annotation.SuppressLint +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Logout +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import com.google.accompanist.pager.ExperimentalPagerApi +import com.google.accompanist.systemuicontroller.rememberSystemUiController +import com.soujunior.petjournal.R +import com.soujunior.petjournal.ui.components.NavigationBar +import com.soujunior.petjournal.ui.components.ScaffoldCustom +import com.soujunior.petjournal.ui.screens_app.screen_home.homeScreen.FakeHomeViewModel +import com.soujunior.petjournal.ui.screens_app.screen_home.homeScreen.HomeScreenViewModel +import com.soujunior.petjournal.ui.states.TaskState +import com.soujunior.petjournal.ui.theme.PetJournalTheme +import com.soujunior.petjournal.ui.util.ValidationEvent +import com.soujunior.petjournal.ui.util.capitalizeFirstLetter +import org.koin.androidx.compose.getViewModel + +@SuppressLint("ViewModelConstructorInComposable") +@Composable +fun getHomeViewModelForPreview(): HomeScreenViewModel { + return if (LocalInspectionMode.current) { + FakeHomeViewModel() + } else { + getViewModel() + } +} + +@ExperimentalPagerApi +@Composable +fun ScreenHomeImpl(navController: NavController) { + val viewModel: HomeScreenViewModel = getHomeViewModelForPreview() + val showDropdownMenu = remember { mutableStateOf(false) } + val taskState by viewModel.taskState.collectAsState() + val name = remember { mutableStateOf(viewModel.name.value.firstName) } + val context = LocalContext.current + LaunchedEffect(key1 = context) { + viewModel.validationEvents.collect { event -> + when (event) { + is ValidationEvent.Success -> { + name.value = viewModel.name.value.firstName + } + + is ValidationEvent.Failed -> { + name.value = "falha ao obter nome" + } + } + } + } + + val systemUiController = rememberSystemUiController() + systemUiController.setSystemBarsColor(color = Color.Transparent, darkIcons = true) + systemUiController.setNavigationBarColor(Color.Black) + Column(modifier = Modifier.navigationBarsPadding()) { + ScaffoldCustom( + modifier = Modifier, + titleTopBar = stringResource(R.string.hello, name.value.capitalizeFirstLetter()), + isLoading = taskState is TaskState.Loading, +// titleTopBarColor = MaterialTheme.colorScheme.scrim, +// titleTopBarAligh = Alignment.CenterStart, + showActions = true, + shadowBelowTopBar = 0.dp, + showButtonToReturn = false, + navigationUp = navController, + showTopBar = true, + actions = { + Icon( + painter = painterResource(id = R.drawable.menu), + contentDescription = stringResource(R.string.menu_description), + tint = MaterialTheme.colorScheme.onSurface, + modifier = Modifier + .size(50.dp) + .padding(end = 16.dp) + .clickable { + showDropdownMenu.value = true + } + ) + if (showDropdownMenu.value) { + DropdownMenu( + expanded = showDropdownMenu.value, + onDismissRequest = { showDropdownMenu.value = false }, + modifier = Modifier.padding(end = 16.dp) + ) { + DropdownMenuItem( + onClick = { + showDropdownMenu.value = false + viewModel.logout() + navController.navigate("account_manager") + }, + text = { + Text(text = stringResource(R.string.logout), fontSize = 18.sp) + }, + trailingIcon = { + Icon( + imageVector = Icons.Default.Logout, + contentDescription = stringResource(R.string.logout) + ) + } + ) + } + } + }, + showBottomBarNavigation = true, + bottomNavigationBar = { NavigationBar(navController) }, + contentToUse = { + LazyColumn( + modifier = Modifier + .fillMaxSize() + .padding(start = 16.dp, end = 16.dp), + horizontalAlignment = Alignment.Start, + verticalArrangement = Arrangement.Top, + contentPadding = it + ) { + item { + val carouselImages = viewModel.carouselImages + Carousel(imageIds = carouselImages) + } + item { Spacer(modifier = Modifier.padding(top = 16.dp)) } + item { + Row { + + Text( + text = stringResource(R.string.services), + modifier = Modifier.weight(0.8f), + color = MaterialTheme.colorScheme.onSurface, + style = MaterialTheme.typography.bodyLarge, + ) + Text( + text = stringResource(R.string.see_more), + modifier = Modifier.clickable { }, + color = MaterialTheme.colorScheme.onSurface, + style = MaterialTheme.typography.labelLarge + ) + } + } + item { Spacer(modifier = Modifier.padding(top = 10.dp)) } + item { + Menu(navController) + } + } + }) + } +} + +@OptIn(ExperimentalPagerApi::class) +@Preview(showBackground = true) +@Composable +fun HomeScreenHomeImplPreview() { + val nav = rememberNavController() + PetJournalTheme { + ScreenHomeImpl(nav) + } +} diff --git a/petJournal/build.gradle.kts b/petJournal/build.gradle.kts index 4f61a13d..48da44ec 100644 --- a/petJournal/build.gradle.kts +++ b/petJournal/build.gradle.kts @@ -1,7 +1,7 @@ buildscript { apply(from = "dependencies.gradle") extra["compose_ui_version"] = "1.4.2" - val agp_version by extra("8.2.2") + val agp_version by extra("8.13.1") repositories { google() diff --git a/petJournal/gradle/wrapper/gradle-wrapper.properties b/petJournal/gradle/wrapper/gradle-wrapper.properties index 10ef3761..06c16fa6 100644 --- a/petJournal/gradle/wrapper/gradle-wrapper.properties +++ b/petJournal/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Fri Jun 07 11:08:41 BRT 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists