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 567b704f..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" @@ -98,7 +99,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") @@ -120,11 +121,12 @@ 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") 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/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/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..c622009a 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 = {}, ) } @@ -464,4 +464,4 @@ class RegisterPetScreenTest { assertTrue(petCastrate) } -} \ 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 new file mode 100644 index 00000000..1970ae55 --- /dev/null +++ b/petJournal/app/src/androidTest/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTaskTest.kt @@ -0,0 +1,427 @@ +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 +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 = {}, + ) + } + + 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 = {}, + ) + } + + composeTestRule.onNodeWithText(testPlaceholder).assertDoesNotExist() + } + + @Test + fun inputText_displaysErrorMessages_whenTextErrorIsProvided() { + val errorMessages = listOf("Nome muito curto", "Nome inválido") + composeTestRule.setContent { + InputText( + textValue = "Ops", + isError = true, + textError = errorMessages, + onEvent = {}, + ) + } + 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 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 { + 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) + } + + @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 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/MainActivity.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/navigation/MainActivity.kt index e4db3ebb..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 @@ -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() { @@ -17,8 +18,7 @@ class MainActivity : ComponentActivity() { WindowCompat.setDecorFitsSystemWindows(window, false) setContent { ChangeSystemBars() -// PresentationManager() - ActiveMonthsComponent(activeMonths = setOf("Jan", "Mar", "Mai")) + PresentationManager() } } } 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..0e46cb42 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) } @@ -82,5 +81,3 @@ fun NavHostMainContent() { } } } - - 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/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..9d682bf2 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 { @@ -179,6 +180,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/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..889f29fb 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, @@ -132,4 +119,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..5b9140ff 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 @@ -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 @@ -60,23 +59,24 @@ 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(top = 16.sdp)) { + Column(modifier = modifier) { Row { Text( text = titleText, textAlign = TextAlign.Start, color = MaterialTheme.colorScheme.scrim, - style = MaterialTheme.typography.bodyMedium, fontWeight = FontWeight(500), - modifier = modifier + style = MaterialTheme.typography.titleMedium, + modifier = textTitleModifier .fillMaxWidth() - .padding(start = 24.sdp, end = 24.sdp) ) } + Spacer(modifier = Modifier.height(8.dp)) Row { BasicTextField( modifier = textInputModifier @@ -90,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 { @@ -121,25 +121,21 @@ 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, - style = TextStyle( - fontSize = 14.sp, - lineHeight = 21.sp, - fontWeight = FontWeight(300), - color = MaterialTheme.colorScheme.scrim, - ) + color = ColorCustom.color_placeholder, + style = MaterialTheme.typography.bodyMedium ) } } @@ -194,5 +190,5 @@ fun InputText( @Preview(showBackground = true, showSystemUi = false, device = "id:pixel_4_xl") @Composable fun InputTextPreview() { - InputText(Modifier, onEvent = {}, textValue = "") -} \ No newline at end of file + InputText(textValue = "", onEvent = {},) +} 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/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" ) 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..8f79e586 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/PeriodSelector.kt @@ -0,0 +1,91 @@ +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( + //TODO: colocar na tabela de cores. + 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 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..cb2cbca0 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 @@ -56,7 +57,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) @@ -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,46 +163,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) { + Text( + text = stringResource(R.string.which_pets_need_this_task), + color = MaterialTheme.colorScheme.scrim, + fontWeight = FontWeight(500), + style = MaterialTheme.typography.titleMedium + ) + + LazyRow( + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp, start = 10.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + item { + PetFilterItem( + name = stringResource(R.string.label_all_pets), + 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") @@ -215,11 +228,30 @@ 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( 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..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,10 +40,9 @@ fun SelectableButton( modifierSelectableButton: Modifier = Modifier, onSelectionChanged: (String, Boolean) -> Unit ) { - androidx.compose.material3.Button( + Button( modifier = modifierSelectableButton - .height(70.dp) - .padding(top = 15.dp, end = 15.dp, bottom = 15.dp) + .height(40.dp) .then( if (isSelected) { Modifier.shadow( @@ -79,57 +80,35 @@ fun SelectableButton( } } + + @OptIn(ExperimentalLayoutApi::class) @Composable fun GroupSelectableButton( - onSelection: (String) -> Unit = {} + listOfTasks: List, + onSelection: (String) -> Unit = {}, + modifier: Modifier = Modifier, + maxItemsInEachRow: Int = Int.MAX_VALUE ) { - 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 - .fillMaxWidth() - .padding(16.dp) + modifier = modifier, + verticalArrangement = Arrangement.spacedBy(8.dp) ) { 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(), + horizontalArrangement = Arrangement.spacedBy(15.dp), + maxItemsInEachRow = maxItemsInEachRow ) { - buttons.forEachIndexed { index, buttonInfo -> + listOfTasks.forEachIndexed { index, buttonInfo -> SelectableButton( titleButton = buttonInfo.title, colorButton = buttonInfo.color, @@ -142,7 +121,9 @@ fun GroupSelectableButton( onSelection("") } }, - modifierSelectableButton = Modifier.adaptiveWidthForTitle(buttonInfo.title) + modifierSelectableButton = Modifier + .adaptiveWidthForTitle(buttonInfo.title) + .padding(bottom = 15.dp) ) } } @@ -155,9 +136,34 @@ data class SelectableButtonInfo( val color: Color ) - -@Preview(showBackground = true, showSystemUi = true, device = "id:pixel_4_xl") +@Preview() @Composable -fun CustomSelectableButtonPreview() { - GroupSelectableButton() -} \ No newline at end of file +fun CustomSelectableButtonWithoutDevicePreview() { + 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) +} 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 ce4084fd..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 @@ -37,34 +37,35 @@ 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 @Composable fun TaskCard( - taskData: TaskData + taskData: TaskData, + modifier: Modifier = Modifier, + expandValue: Boolean = false ) { - var expanded by remember { mutableStateOf(false) } + var expanded by remember { mutableStateOf(expandValue) } Box( - modifier = Modifier.clip(RectangleShape) + modifier = modifier.clip(RectangleShape) ) { Surface( - shape = RoundedCornerShape(8.sdp), + shape = RoundedCornerShape(10.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) { 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) @@ -73,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) @@ -89,22 +88,19 @@ 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 ) Text( - text = taskData.dataHora, + text = taskData.startAt, style = MaterialTheme.typography.titleMedium, color = Color.Gray, 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(), @@ -120,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( @@ -143,7 +138,7 @@ fun TaskCard( if (expanded) { Text( - text = taskData.descricaoCompleta, + text = taskData.descriptionCompleted, style = MaterialTheme.typography.titleSmall, modifier = Modifier .fillMaxWidth(1f) @@ -153,7 +148,6 @@ fun TaskCard( } } - // Expanded content if (expanded) { Column( modifier = Modifier @@ -171,39 +165,30 @@ 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 + color = taskData.type.color, ) } } } - // Bottom section: "Ver Mais" / "Ver Menos" Box( modifier = Modifier .fillMaxWidth() - .background(taskData.tipo.cor) - .clickable { expanded = !expanded } // Toggles the expanded state + .height(20.sdp) + .background(taskData.type.color) + .clickable { expanded = !expanded }, ) { - Row( + Text( + text = if (expanded) "Ver Menos" else "Ver Mais", + fontSize = 10.ssp, + color = MaterialTheme.colorScheme.background, 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) + ) } } } @@ -215,15 +200,20 @@ fun TaskCard( @Preview @Composable private fun TaskCardPreview() { - Column(Modifier.padding(8.sdp)) { + Column(Modifier) { + TaskCard( + taskData = TaskFakeData.sampleTasks[0] + ) + } +} + +@Preview +@Composable +private fun TaskCardExpandedPreview() { + Column(Modifier) { TaskCard( - taskData = TaskDummyData.sampleTasks[0] + taskData = TaskFakeData.sampleTasks[0], + expandValue = true ) -// TaskCard( -// taskData = TaskDummyData.sampleTasks[1] -// ) -// TaskCard( -// taskData = TaskDummyData.sampleTasks[2] -// ) } } 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( 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 82% 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..d7ce79f6 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,26 +13,26 @@ 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 ) { Column( modifier = modifier - .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 +43,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 +64,9 @@ fun DescriptionTextField( @Preview @Composable fun DescriptionTextFieldPreview() { - DescriptionTextField( + TextFieldCustom( + title = "Título", + placeholder = "Descrição", value = "", onValueChange = {} ) 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..898ad828 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TransactionTypeSelector.kt @@ -0,0 +1,147 @@ +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.height +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 + ) { + Row( + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + ) { + 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(130.dp).height(50.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 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/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 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..d25ee8e6 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 @@ -32,6 +32,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 +60,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 +163,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 +179,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 +209,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 +226,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) ) } } @@ -248,4 +259,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/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 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 9e8cfe48..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,79 +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 PetData( - 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 dataHora: String, - val tipo: TaskType, - val pets: List = emptyList() -) - -// Dados dummy para exemplo/preview -object TaskDummyData { - 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") - ) - - 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.", - dataHora = "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.", - dataHora = "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.", - dataHora = "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.", - dataHora = "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/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/components/task/OneOffTask.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/OneOffTask.kt new file mode 100644 index 00000000..90fd3575 --- /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) { + 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 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..06a2e449 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/task/RecurrentTask.kt @@ -0,0 +1,137 @@ +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 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..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) } @@ -181,4 +183,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_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/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..e0b11bda 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") + } + ) } } @@ -159,4 +163,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..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 @@ -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,9 @@ 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 +64,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 +91,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 +101,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 +111,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 +141,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 +221,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 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 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..bb3dd269 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/registerTaskScreen/components/ScreenRegisterTask.kt @@ -0,0 +1,439 @@ +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 +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.compose.ui.unit.dp +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.theme.PetJournalTheme +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, + 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" + ), + 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) } + + ScaffoldCustom( + 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 -> + Image( + painter = painterResource(R.drawable.rastro), + contentDescription = null, + modifier = Modifier + .fillMaxSize() + .offset(y = 300.sdp) + ) + LazyColumn( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues), + verticalArrangement = Arrangement.spacedBy(12.sdp), + contentPadding = PaddingValues(horizontal = 14.sdp), + content = { + item { + GroupSelectableButton(listOfTasks) + } + 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 + } + ) + + when (selectedType) { + TransactionType.Recurrent -> { + RecurringTask( + setOf(), + onAmPmSelector = { + + }, + onTime = { hour, minute -> + + }, + onWeekDaySelected = { + + }, + onDaySelected = { + + } + ) + } + + 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") +@Composable +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/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 new file mode 100644 index 00000000..fa079b64 --- /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() +} 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 new file mode 100644 index 00000000..39c024b7 --- /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 +} 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..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 @@ -1,2 +1,21 @@ 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.util.ValidationEvent +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.receiveAsFlow + +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) +} 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 34cce820..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,9 +1,96 @@ 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 +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.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.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 @Composable fun Screen(navController: NavController){ +// val viewModel : TaskListViewModel = getViewModel() + Column (modifier = Modifier){ + ScaffoldCustom( + modifier = Modifier, + navigationUp = navController, + showBottomBarNavigation = true, + titleTopBar = stringResource(R.string.next_tasks), + showTopBar = true, + bottomNavigationBar = { NavigationBar(navController) }, + contentToUse = { paddingValues -> + LazyColumn( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(12.sdp), + modifier = Modifier + .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 + ) + } + } + ) + } + ) -} \ No newline at end of file + } +} + +@Composable +@Preview +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 new file mode 100644 index 00000000..75bbe992 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TabSelector.kt @@ -0,0 +1,70 @@ +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.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.R + +@OptIn(ExperimentalMaterial3Api::class) +@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) + + PrimaryTabRow( + selectedTabIndex = selectedIndex, + modifier = modifier, + containerColor = Color.Transparent, + contentColor = MaterialTheme.colorScheme.primary, + divider = {/*sem divider*/} + ){ + 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, + ) + }, + selectedContentColor = MaterialTheme.colorScheme.primary, + unselectedContentColor = Color.Gray + ) + } + } +} + +@Preview +@Composable +fun PreviewTabSelector(){ + TabSelector( + selectedFilter = DateFilter.DAILY, + onFilterSelected = {}, + modifier = Modifier.fillMaxWidth() + ) +} 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..4e6dd9ce --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/TaskDateComponent.kt @@ -0,0 +1,54 @@ +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) + ) + + tasks.forEach { taskData -> + TaskCard( + taskData = taskData, + modifier = Modifier.padding() + + ) + } + } + +} + +@Preview +@Composable +private fun Preview() { + TaskDateComponent( + date = "5 de Janeiro", + 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..aef663a1 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,7 @@ 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) -} \ No newline at end of file + val color_text_button_transaction_type = Color(0xFF8dD4CD2) + val color_border_button_transaction_type = Color(0xFFA2A9B1) + val color_unfocused_wheelTimePicker = Color(0xFFDADADA) +} 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 new file mode 100644 index 00000000..9b90aeb7 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/util/DateFormatter.kt @@ -0,0 +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 + +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.month) + + return "$day de $monthName" + } + + @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/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/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 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/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 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 be1d9d82..26b3b23f 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,32 @@ Abrir Calendário 00/00/0000 dd/MM/yyyy - Tarefa adicionada\ncom sucesso! - Nova tarefa Ir para a HomePage AM PM - \ No newline at end of file + Recorrente + Pontual + Data + Digite aqui o nome da tarefa + Nome da tarefa + Observação + Digite aqui a sua observação + Salvar + Quais pets precisam dessa tarefa? + Próximas tarefas + Diárias + Semanais + Mensais + Jan + Fev + Mar + Abr + Mai + Jun + Jul + Ago + Set + Out + Nov + Dez + 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/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/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 268c6740..7fb6e48a 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 @@ -43,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/DailyTaskModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/DailyTaskModel.kt new file mode 100644 index 00000000..0916e7b9 --- /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 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/MonthlyTaskModel.kt b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/MonthlyTaskModel.kt new file mode 100644 index 00000000..69de1f93 --- /dev/null +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/MonthlyTaskModel.kt @@ -0,0 +1,12 @@ +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..e15e599f --- /dev/null +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/request/taskModels/PontualTaskModel.kt @@ -0,0 +1,10 @@ +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 +) 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/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 new file mode 100644 index 00000000..ba4872a9 --- /dev/null +++ b/petJournal/domain/src/main/java/com/soujunior/domain/model/taskModel/TaskModel.kt @@ -0,0 +1,39 @@ +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( +// val id: String, +// val titulo: String, +// val descricaoResumida: String, +// val descricaoCompleta: String, +// val dataHora: String, +// val tipo: TaskType, +// val pets: List = emptyList() +//) + +data class TaskTagModel( + val id: String, + val name: String, + val color: String, + @DrawableRes val icone: Int? = null, + @DrawableRes val iconeVector: Int? = null +) + + +// 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 = "", + val startAt : String = "", + val endAt: String = "", + val daysOfWeek : List = emptyList(), + val daysOfMonth : List = emptyList(), + val pets: List +) 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 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