From 5d377316acde036c11122217db4425a5304db2fd Mon Sep 17 00:00:00 2001 From: Vinicius Tavares Date: Wed, 13 Aug 2025 17:20:29 -0300 Subject: [PATCH 1/5] mudancas no button3 e adicao da expansao do taskcard --- .../petjournal/ui/components/Button3.kt | 14 +- .../petjournal/ui/components/TaskCard.kt | 168 ++++++++++++++++++ 2 files changed, 177 insertions(+), 5 deletions(-) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Button3.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Button3.kt index f16788c2..d2b37434 100644 --- a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Button3.kt +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/Button3.kt @@ -21,6 +21,8 @@ import androidx.compose.ui.draw.shadow 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.TextUnit import androidx.compose.ui.unit.dp import ir.kaaveh.sdpcompose.sdp import ir.kaaveh.sdpcompose.ssp @@ -31,6 +33,8 @@ fun Button3( enableButton: Boolean, modifier: Modifier = Modifier, text: String = "Button", + textSize: TextUnit = 12.ssp, + contentPaddingValues : Dp = 12.sdp, buttonColor: ButtonColors = ButtonDefaults.buttonColors(MaterialTheme.colorScheme.background), textColor: Color = MaterialTheme.colorScheme.primary, isLoading: Boolean = false @@ -54,20 +58,20 @@ fun Button3( ) , border = BorderStroke( - width = 2.sdp, + width = 1.sdp, color = Color(0xFF959EA6) ), shape = RoundedCornerShape(size = 50.dp), colors = buttonColor, - contentPadding = PaddingValues(12.sdp) + contentPadding = PaddingValues(contentPaddingValues) ) { if (!isLoading) { Text( text = text, - fontWeight = FontWeight.W900, - fontSize = 12.ssp, - style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.W500, + fontSize = textSize, + style = MaterialTheme.typography.headlineLarge, color = textColor ) } else { 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 new file mode 100644 index 00000000..d40cdcac --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt @@ -0,0 +1,168 @@ +package com.soujunior.petjournal.ui.components + +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.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 +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +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.Surface +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.scale +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import ir.kaaveh.sdpcompose.sdp +import ir.kaaveh.sdpcompose.ssp +import kotlin.math.exp + +@Composable +fun TaskCard() { + var expanded by remember { mutableStateOf(true) } + + Surface( + shape = RoundedCornerShape(8.sdp), + tonalElevation = 2.dp, + modifier = Modifier + .padding(2.sdp) + .animateContentSize() // Animates the size change + ) { + Column { + // Main content: Title/Date on Start, Description on End + Row( + modifier = Modifier + .fillMaxWidth() + .padding(4.sdp), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.Top + ) { + // Left side: Title and Date + Column( + modifier = Modifier.padding(horizontal = 8.sdp), + horizontalAlignment = Alignment.Start + ) { + Text( + text = "Carprofeno", + modifier = Modifier.padding(bottom = 2.sdp), + style = MaterialTheme.typography.titleMedium, + fontSize = 15.ssp + + ) + Text( + text = "12/08/2025 - 10:30", + style = MaterialTheme.typography.titleMedium, + color = Color.Gray, + fontSize = 10.ssp + ) + } + + // Right side: Description + Column(modifier = Modifier.padding(horizontal = 8.sdp), + horizontalAlignment = Alignment.Start){ + Text( + text = "Anti-inflamatorio não esteroide para alivio da dor e inflamação", + style = MaterialTheme.typography.titleSmall, + modifier = Modifier + .fillMaxWidth(1f) + .padding(start = 8.sdp) + ) + + if(expanded){ + Text( + text = "E mais um monte de coisa detalhada que vai aparecer quando expandir", + style = MaterialTheme.typography.titleSmall, + modifier = Modifier + .fillMaxWidth(1f) + .padding(start = 8.sdp, top = 8.sdp) + ) + } + } + + } + + // Expanded content + if (expanded) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 8.sdp, top = 16.sdp), + ) { + + Button( + onClick = {}, + modifier = Modifier + .width(100.sdp) + .height(25.sdp) + .align(Alignment.CenterHorizontally), + border = BorderStroke( + 1.sdp, Color(0xFF959EA6) + ), + 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 = MaterialTheme.colorScheme.primary, + style = MaterialTheme.typography.headlineLarge + ) + } + } + } + + + // Bottom section: "Ver Mais" / "Ver Menos" + Box( + modifier = Modifier + .fillMaxWidth() + .background(MaterialTheme.colorScheme.error) + .clickable { expanded = !expanded } // Toggles the expanded state + ) { + Row( + 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 + ) + } + } + } + } +} + + +@Preview +@Composable +private fun TaskCardPreview() { + // TODO: Fazer ele receber os seguintes dados: Titulo, data, descrição menor, descrição normal + // TODO: Imagens dos pets, tipo de tarefa + TaskCard() +} From 6e241a1001080fc841c19b442a63775856094ca0 Mon Sep 17 00:00:00 2001 From: Vinicius Tavares Date: Thu, 14 Aug 2025 14:29:25 -0300 Subject: [PATCH 2/5] Finalizado o card em formato expandido --- .../petjournal/ui/components/PetItem.kt | 32 ++++-- .../petjournal/ui/components/TaskCard.kt | 97 +++++++++++++------ 2 files changed, 96 insertions(+), 33 deletions(-) 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 62e0d0dc..82ef1432 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 @@ -1,6 +1,7 @@ package com.soujunior.petjournal.ui.components import android.widget.ImageView +import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -13,7 +14,11 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import com.soujunior.petjournal.R import ir.kaaveh.sdpcompose.sdp import ir.kaaveh.sdpcompose.ssp @@ -34,12 +39,21 @@ fun PetItem( shape = RoundedCornerShape(16.sdp), onClick = onClick ) { - GlideImage( - modifier = Modifier.fillMaxSize(), - context = LocalContext.current, - url = imageRes, - scaleType = ImageView.ScaleType.CENTER_CROP - ) + if(!imageRes.isEmpty()) { + GlideImage( + modifier = Modifier.fillMaxSize(), + context = LocalContext.current, + url = imageRes, + scaleType = ImageView.ScaleType.CENTER_CROP + ) + }else{ + //placeholder de imagem vazia + Image( + painter = painterResource(id = R.drawable.image_pet_empty_selected), + contentDescription = "image description", + contentScale = ContentScale.Crop + ) + } } Text( @@ -50,4 +64,10 @@ fun PetItem( ) Spacer(Modifier.padding(bottom = 24.sdp)) } +} + +@Preview +@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/TaskCard.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt index d40cdcac..9ebd1eb2 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 @@ -3,18 +3,18 @@ package com.soujunior.petjournal.ui.components import androidx.compose.animation.animateContentSize import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.background -import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.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.aspectRatio import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults @@ -28,13 +28,11 @@ 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.scale import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import ir.kaaveh.sdpcompose.sdp import ir.kaaveh.sdpcompose.ssp -import kotlin.math.exp @Composable fun TaskCard() { @@ -58,7 +56,9 @@ fun TaskCard() { ) { // Left side: Title and Date Column( - modifier = Modifier.padding(horizontal = 8.sdp), + modifier = Modifier + .padding(horizontal = 8.sdp) + .weight(0.4f), horizontalAlignment = Alignment.Start ) { Text( @@ -74,11 +74,58 @@ fun TaskCard() { 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(), + columns = GridCells.Fixed(3), + horizontalArrangement = Arrangement.Start + ) { + item { + Box(modifier = Modifier.aspectRatio(1f)) { + PetItem(modifier = Modifier, imageRes = "", name = "", onClick = {}) + } + } + item { + Box(modifier = Modifier.aspectRatio(1f)) { + PetItem(modifier = Modifier, imageRes = "", name = "", onClick = {}) + } + } + item { + Box(modifier = Modifier.aspectRatio(1f)) { + PetItem(modifier = Modifier, imageRes = "", name = "", onClick = {}) + } + } + item { + Box(modifier = Modifier.aspectRatio(1f)) { + PetItem(modifier = Modifier, imageRes = "", name = "", onClick = {}) + } + } + item { + Box(modifier = Modifier.aspectRatio(1f)) { + PetItem(modifier = Modifier, imageRes = "", name = "", onClick = {}) + } + } + item { + Box(modifier = Modifier.aspectRatio(1f)) { + PetItem(modifier = Modifier, imageRes = "", name = "", onClick = {}) + } + } + + } + } } // Right side: Description - Column(modifier = Modifier.padding(horizontal = 8.sdp), - horizontalAlignment = Alignment.Start){ + Column( + modifier = Modifier + .padding(horizontal = 8.sdp) + .weight(0.6f), + horizontalAlignment = Alignment.Start + ) { Text( text = "Anti-inflamatorio não esteroide para alivio da dor e inflamação", style = MaterialTheme.typography.titleSmall, @@ -87,7 +134,7 @@ fun TaskCard() { .padding(start = 8.sdp) ) - if(expanded){ + if (expanded) { Text( text = "E mais um monte de coisa detalhada que vai aparecer quando expandir", style = MaterialTheme.typography.titleSmall, @@ -97,7 +144,6 @@ fun TaskCard() { ) } } - } // Expanded content @@ -107,32 +153,30 @@ fun TaskCard() { .fillMaxWidth() .padding(bottom = 8.sdp, top = 16.sdp), ) { + Button( + onClick = {}, + modifier = Modifier + .width(100.sdp) + .height(25.sdp) + .align(Alignment.CenterHorizontally), + border = BorderStroke( + 1.sdp, Color(0xFF959EA6) + ), + shape = RoundedCornerShape(50.sdp), + colors = ButtonDefaults.buttonColors(MaterialTheme.colorScheme.background) - Button( - onClick = {}, - modifier = Modifier - .width(100.sdp) - .height(25.sdp) - .align(Alignment.CenterHorizontally), - border = BorderStroke( - 1.sdp, Color(0xFF959EA6) - ), - shape = RoundedCornerShape(50.sdp), - colors = ButtonDefaults.buttonColors(MaterialTheme.colorScheme.background) - - ){ - // TODO: AJUSTAR A COR DO BOTÃO PARA A COR DA TAREFA + ) { + // TODO: AJUSTAR A COR DO BOTÃO PARA A COR DA TAREFA Text( text = "Editar Tarefa", fontSize = 10.ssp, color = MaterialTheme.colorScheme.primary, style = MaterialTheme.typography.headlineLarge ) - } + } } } - // Bottom section: "Ver Mais" / "Ver Menos" Box( modifier = Modifier @@ -158,7 +202,6 @@ fun TaskCard() { } } - @Preview @Composable private fun TaskCardPreview() { From e46ad005b1bea3541551fb3e304decb68def9197 Mon Sep 17 00:00:00 2001 From: Vinicius Tavares Date: Thu, 14 Aug 2025 15:52:28 -0300 Subject: [PATCH 3/5] Adicionado Dummies para testar comportamento --- .../petjournal/ui/components/TaskCard.kt | 68 ++++----- .../ui/components/data/TaskTypes.kt | 134 ++++++++++++++++++ 2 files changed, 164 insertions(+), 38 deletions(-) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskTypes.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt index 9ebd1eb2..83b0da5c 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 @@ -31,12 +31,16 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import com.soujunior.petjournal.ui.components.data.TaskData +import com.soujunior.petjournal.ui.components.data.TaskDummyData import ir.kaaveh.sdpcompose.sdp import ir.kaaveh.sdpcompose.ssp @Composable -fun TaskCard() { - var expanded by remember { mutableStateOf(true) } +fun TaskCard( + taskData: TaskData +) { + var expanded by remember { mutableStateOf(false) } Surface( shape = RoundedCornerShape(8.sdp), @@ -62,14 +66,14 @@ fun TaskCard() { horizontalAlignment = Alignment.Start ) { Text( - text = "Carprofeno", + text = taskData.titulo, modifier = Modifier.padding(bottom = 2.sdp), style = MaterialTheme.typography.titleMedium, fontSize = 15.ssp ) Text( - text = "12/08/2025 - 10:30", + text = taskData.dataHora, style = MaterialTheme.typography.titleMedium, color = Color.Gray, fontSize = 10.ssp @@ -84,37 +88,11 @@ fun TaskCard() { columns = GridCells.Fixed(3), horizontalArrangement = Arrangement.Start ) { - item { + items(taskData.pets.size) { index -> Box(modifier = Modifier.aspectRatio(1f)) { PetItem(modifier = Modifier, imageRes = "", name = "", onClick = {}) } } - item { - Box(modifier = Modifier.aspectRatio(1f)) { - PetItem(modifier = Modifier, imageRes = "", name = "", onClick = {}) - } - } - item { - Box(modifier = Modifier.aspectRatio(1f)) { - PetItem(modifier = Modifier, imageRes = "", name = "", onClick = {}) - } - } - item { - Box(modifier = Modifier.aspectRatio(1f)) { - PetItem(modifier = Modifier, imageRes = "", name = "", onClick = {}) - } - } - item { - Box(modifier = Modifier.aspectRatio(1f)) { - PetItem(modifier = Modifier, imageRes = "", name = "", onClick = {}) - } - } - item { - Box(modifier = Modifier.aspectRatio(1f)) { - PetItem(modifier = Modifier, imageRes = "", name = "", onClick = {}) - } - } - } } } @@ -126,8 +104,14 @@ fun TaskCard() { .weight(0.6f), horizontalAlignment = Alignment.Start ) { + val displayText = if (!expanded && taskData.descricaoResumida.length > 50) { + taskData.descricaoResumida.take(50) + "..." + } else { + taskData.descricaoResumida + } + Text( - text = "Anti-inflamatorio não esteroide para alivio da dor e inflamação", + text = displayText, style = MaterialTheme.typography.titleSmall, modifier = Modifier .fillMaxWidth(1f) @@ -136,7 +120,7 @@ fun TaskCard() { if (expanded) { Text( - text = "E mais um monte de coisa detalhada que vai aparecer quando expandir", + text = taskData.descricaoCompleta, style = MaterialTheme.typography.titleSmall, modifier = Modifier .fillMaxWidth(1f) @@ -170,7 +154,7 @@ fun TaskCard() { Text( text = "Editar Tarefa", fontSize = 10.ssp, - color = MaterialTheme.colorScheme.primary, + color = taskData.tipo.cor, style = MaterialTheme.typography.headlineLarge ) } @@ -181,7 +165,7 @@ fun TaskCard() { Box( modifier = Modifier .fillMaxWidth() - .background(MaterialTheme.colorScheme.error) + .background(taskData.tipo.cor) .clickable { expanded = !expanded } // Toggles the expanded state ) { Row( @@ -205,7 +189,15 @@ fun TaskCard() { @Preview @Composable private fun TaskCardPreview() { - // TODO: Fazer ele receber os seguintes dados: Titulo, data, descrição menor, descrição normal - // TODO: Imagens dos pets, tipo de tarefa - TaskCard() + Column(Modifier.padding(8.sdp)) { + TaskCard( + taskData = TaskDummyData.sampleTasks[0] + ) + TaskCard( + taskData = TaskDummyData.sampleTasks[1] + ) + TaskCard( + taskData = TaskDummyData.sampleTasks[2] + ) + } } 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 new file mode 100644 index 00000000..5e939f7f --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/data/TaskTypes.kt @@ -0,0 +1,134 @@ +package com.soujunior.petjournal.ui.components.data + +import androidx.compose.ui.graphics.Color + +data class TaskType( + val id: String, + val nome: String, + val cor: Color, + val icone: String? = null // Preparado para uso futuro +) + +object TaskTypes { + val VACINA = TaskType( + id = "vacina", + nome = "Vacina", + cor = Color(0xFFFA680E) + ) + + val CONSULTAS = TaskType( + id = "consultas", + nome = "Consultas", + cor = Color(0xFF20955E) + ) + + val RACAO = TaskType( + id = "racao", + nome = "Ração", + cor = Color(0xFF881803) + ) + + val MEDICAMENTOS = TaskType( + id = "medicamentos", + nome = "Medicamentos", + cor = Color(0xFF2F99E5) + ) + + val BANHOS = TaskType( + id = "banhos", + nome = "Banhos", + cor = Color(0xFFD03A94) + ) + + val PASSEIO = TaskType( + id = "passeio", + nome = "Passeio", + cor = Color(0xFFB78AF7) + ) + + // Lista com todos os tipos para facilitar iteração + val ALL_TYPES = listOf( + VACINA, + CONSULTAS, + RACAO, + MEDICAMENTOS, + BANHOS, + 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) } + } +} + +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]) + ) + ) +} From f3535823d96afc469a64ffc398c1d555666fd173 Mon Sep 17 00:00:00 2001 From: Vinicius Tavares Date: Mon, 18 Aug 2025 10:47:07 -0300 Subject: [PATCH 4/5] adicionado icone vetorizado para os cards; adicionado campo para icones vetorizados nos tipos de tarefas --- .../petjournal/ui/components/TaskCard.kt | 258 ++++++++++-------- .../ui/components/data/TaskTypes.kt | 33 ++- .../app/src/main/res/drawable/icone_banho.png | Bin 0 -> 896 bytes .../main/res/drawable/icone_banhos_vector.xml | 9 + .../src/main/res/drawable/icone_consulta.png | Bin 0 -> 1017 bytes .../res/drawable/icone_consultas_vector.xml | 13 + .../main/res/drawable/icone_medicamento.png | Bin 0 -> 843 bytes .../drawable/icone_medicamentos_vector.xml | 24 ++ .../src/main/res/drawable/icone_passeio.png | Bin 0 -> 1137 bytes .../res/drawable/icone_passeios_vector.xml | 11 + .../app/src/main/res/drawable/icone_racao.png | Bin 0 -> 865 bytes .../main/res/drawable/icone_racao_vector.xml | 9 + .../src/main/res/drawable/icone_vacinas.png | Bin 0 -> 732 bytes .../res/drawable/icone_vacinas_vector.xml | 13 + 14 files changed, 247 insertions(+), 123 deletions(-) create mode 100644 petJournal/app/src/main/res/drawable/icone_banho.png create mode 100644 petJournal/app/src/main/res/drawable/icone_banhos_vector.xml create mode 100644 petJournal/app/src/main/res/drawable/icone_consulta.png create mode 100644 petJournal/app/src/main/res/drawable/icone_consultas_vector.xml create mode 100644 petJournal/app/src/main/res/drawable/icone_medicamento.png create mode 100644 petJournal/app/src/main/res/drawable/icone_medicamentos_vector.xml create mode 100644 petJournal/app/src/main/res/drawable/icone_passeio.png create mode 100644 petJournal/app/src/main/res/drawable/icone_passeios_vector.xml create mode 100644 petJournal/app/src/main/res/drawable/icone_racao.png create mode 100644 petJournal/app/src/main/res/drawable/icone_racao_vector.xml create mode 100644 petJournal/app/src/main/res/drawable/icone_vacinas.png create mode 100644 petJournal/app/src/main/res/drawable/icone_vacinas_vector.xml 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 83b0da5c..16956c6b 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 @@ -11,13 +11,16 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.aspectRatio 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.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text @@ -28,9 +31,13 @@ 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.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 ir.kaaveh.sdpcompose.sdp @@ -40,149 +47,168 @@ import ir.kaaveh.sdpcompose.ssp fun TaskCard( taskData: TaskData ) { - var expanded by remember { mutableStateOf(false) } + var expanded by remember { mutableStateOf(true) } - Surface( - shape = RoundedCornerShape(8.sdp), - tonalElevation = 2.dp, - modifier = Modifier - .padding(2.sdp) - .animateContentSize() // Animates the size change + Box( + modifier = Modifier.clip(RectangleShape) ) { - Column { - // Main content: Title/Date on Start, Description on End - Row( - modifier = Modifier - .fillMaxWidth() - .padding(4.sdp), - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.Top - ) { - // Left side: Title and Date - Column( + Surface( + shape = RoundedCornerShape(8.sdp), + tonalElevation = 2.dp, + modifier = Modifier + .padding(2.sdp) + .animateContentSize() // Animates the size change + ) { + // 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), + modifier = Modifier + .align(Alignment.BottomStart) + .padding(start = 2.sdp, bottom = 42.sdp) + .size(150.sdp) + .offset(x = (-80).dp, y = (70).dp) + ) + } + Column { + // Main content: Title/Date on Start, Description on End + Row( modifier = Modifier - .padding(horizontal = 8.sdp) - .weight(0.4f), - horizontalAlignment = Alignment.Start + .fillMaxWidth() + .padding(4.sdp), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.Top ) { - Text( - text = taskData.titulo, - modifier = Modifier.padding(bottom = 2.sdp), - style = MaterialTheme.typography.titleMedium, - fontSize = 15.ssp + // Left side: Title and Date + Column( + modifier = Modifier + .padding(horizontal = 8.sdp) + .weight(0.4f), + horizontalAlignment = Alignment.Start + ) { + Text( + text = taskData.titulo, + modifier = Modifier.padding(bottom = 2.sdp), + style = MaterialTheme.typography.titleMedium, + fontSize = 15.ssp - ) - Text( - text = taskData.dataHora, - style = MaterialTheme.typography.titleMedium, - color = Color.Gray, - fontSize = 10.ssp - ) + ) + Text( + text = taskData.dataHora, + 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(), - columns = GridCells.Fixed(3), - horizontalArrangement = Arrangement.Start - ) { - items(taskData.pets.size) { index -> - Box(modifier = Modifier.aspectRatio(1f)) { - PetItem(modifier = Modifier, imageRes = "", name = "", onClick = {}) + /** + * Vai receber n ids de pets e vai criar a grid com as imagens dos respectivos pets + * */ + if (expanded) { + LazyVerticalGrid( + modifier = Modifier.fillMaxWidth(), + columns = GridCells.Fixed(3), + horizontalArrangement = Arrangement.Start + ) { + items(taskData.pets.size) { index -> + Box(modifier = Modifier.aspectRatio(1f)) { + PetItem(modifier = Modifier, imageRes = "", name = "", onClick = {}) + } } } } } - } - - // 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) + "..." - } else { - taskData.descricaoResumida - } - Text( - text = displayText, - style = MaterialTheme.typography.titleSmall, + // Right side: Description + Column( modifier = Modifier - .fillMaxWidth(1f) - .padding(start = 8.sdp) - ) + .padding(horizontal = 8.sdp) + .weight(0.6f), + horizontalAlignment = Alignment.Start + ) { + val displayText = if (!expanded && taskData.descricaoResumida.length > 50) { + taskData.descricaoResumida.take(50) + "..." + } else { + taskData.descricaoResumida + } - if (expanded) { Text( - text = taskData.descricaoCompleta, + text = displayText, style = MaterialTheme.typography.titleSmall, modifier = Modifier .fillMaxWidth(1f) - .padding(start = 8.sdp, top = 8.sdp) + .padding(start = 8.sdp) ) + + if (expanded) { + Text( + text = taskData.descricaoCompleta, + style = MaterialTheme.typography.titleSmall, + modifier = Modifier + .fillMaxWidth(1f) + .padding(start = 8.sdp, top = 8.sdp) + ) + } } } - } - // Expanded content - if (expanded) { - Column( + // Expanded content + if (expanded) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 8.sdp, top = 16.sdp), + ) { + Button( + onClick = {}, + modifier = Modifier + .width(100.sdp) + .height(25.sdp) + .align(Alignment.CenterHorizontally), + border = BorderStroke( + 1.sdp, Color(0xFF959EA6) + ), + 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 + ) + } + } + } + + // Bottom section: "Ver Mais" / "Ver Menos" + Box( modifier = Modifier .fillMaxWidth() - .padding(bottom = 8.sdp, top = 16.sdp), + .background(taskData.tipo.cor) + .clickable { expanded = !expanded } // Toggles the expanded state ) { - Button( - onClick = {}, + Row( modifier = Modifier - .width(100.sdp) - .height(25.sdp) - .align(Alignment.CenterHorizontally), - border = BorderStroke( - 1.sdp, Color(0xFF959EA6) - ), - shape = RoundedCornerShape(50.sdp), - colors = ButtonDefaults.buttonColors(MaterialTheme.colorScheme.background) - + .fillMaxWidth() + .padding(vertical = 6.sdp), + horizontalArrangement = Arrangement.Center ) { - // TODO: AJUSTAR A COR DO BOTÃO PARA A COR DA TAREFA Text( - text = "Editar Tarefa", + text = if (expanded) "Ver Menos" else "Ver Mais", fontSize = 10.ssp, - color = taskData.tipo.cor, - style = MaterialTheme.typography.headlineLarge + color = MaterialTheme.colorScheme.background, + style = MaterialTheme.typography.displaySmall ) } } } - - // Bottom section: "Ver Mais" / "Ver Menos" - Box( - modifier = Modifier - .fillMaxWidth() - .background(taskData.tipo.cor) - .clickable { expanded = !expanded } // Toggles the expanded state - ) { - Row( - 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 - ) - } - } } + + } } @@ -193,11 +219,11 @@ private fun TaskCardPreview() { TaskCard( taskData = TaskDummyData.sampleTasks[0] ) - TaskCard( - taskData = TaskDummyData.sampleTasks[1] - ) - TaskCard( - taskData = TaskDummyData.sampleTasks[2] - ) +// TaskCard( +// taskData = TaskDummyData.sampleTasks[1] +// ) +// TaskCard( +// taskData = TaskDummyData.sampleTasks[2] +// ) } } 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 5e939f7f..9e8cfe48 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,49 +1,68 @@ 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, - val icone: String? = null // Preparado para uso futuro + @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) + cor = Color(0xFFFA680E), + icone = R.drawable.icone_vacinas, + iconeVector = R.drawable.icone_vacinas_vector ) val CONSULTAS = TaskType( id = "consultas", nome = "Consultas", - cor = Color(0xFF20955E) + cor = Color(0xFF20955E), + icone = R.drawable.icone_consulta, + iconeVector = R.drawable.icone_consultas_vector + ) val RACAO = TaskType( id = "racao", nome = "Ração", - cor = Color(0xFF881803) + cor = Color(0xFF881803), + icone = R.drawable.icone_racao, + iconeVector = R.drawable.icone_racao_vector ) val MEDICAMENTOS = TaskType( id = "medicamentos", nome = "Medicamentos", - cor = Color(0xFF2F99E5) + cor = Color(0xFF2F99E5), + icone = R.drawable.icone_medicamento, + iconeVector = R.drawable.icone_medicamentos_vector + ) val BANHOS = TaskType( id = "banhos", nome = "Banhos", - cor = Color(0xFFD03A94) + cor = Color(0xFFD03A94), + icone = R.drawable.icone_banho, + iconeVector = R.drawable.icone_banhos_vector + ) val PASSEIO = TaskType( id = "passeio", nome = "Passeio", - cor = Color(0xFFB78AF7) + cor = Color(0xFFB78AF7), + icone = R.drawable.icone_passeio, + iconeVector = R.drawable.icone_passeios_vector + ) // Lista com todos os tipos para facilitar iteração diff --git a/petJournal/app/src/main/res/drawable/icone_banho.png b/petJournal/app/src/main/res/drawable/icone_banho.png new file mode 100644 index 0000000000000000000000000000000000000000..85b6e0b80f7ba2e38a44bc9d25d9b01f6f359ead GIT binary patch literal 896 zcmV-`1AqL9P)X2d@r$9WDTn#a|381Rn>_JEbV=j+~W~TtNp?k4EPKx&=sVsHN zh}dGUGNc8;kZy3_{m~df7E(PjF|k{O(1hosPiop;H1Zg!EOi_d_8EUV@KW&96HO~o zV$4A35#RuFY6vqi1|>WYs=#FjZm`PB@QzuWG{l&K&?ADj`~AZqBtY&Q*EnD+My`qT zQ}^!Vde|~(9mEM)l`7|^A=GfcHFzCGh1-qIFyNqXcOHrms#M^a**oOkZE)}Ena^%4HC0gjz6XOF&uhqP{mO5r(it5YWJ^z@i|eH%1+)Q&=X*90X7I zCXW#|uyhdT)|vlr%X6LTmgiGe%)wqFDId^JAAuA} zMU*h}TOm9%9Q}kOQlea)Z=Or-%zHSVH0P&%y|)89&^fGcoXnd!Pa1K3JB)D-%BsQ2 zBA(%Ib&6=)U-;8Og$J7#jkaOencjr$S}cSol=th=ZF5;VZjn$;wtM`p*^MqyT)kG1 zpE~-R1RccG>$6(#)QME(mwCfgAq`~tb3v9qIZyheu + + diff --git a/petJournal/app/src/main/res/drawable/icone_consulta.png b/petJournal/app/src/main/res/drawable/icone_consulta.png new file mode 100644 index 0000000000000000000000000000000000000000..a8cb8b9cad66260b039ba033bd4a8183758e1c4f GIT binary patch literal 1017 zcmV%1 z$&l|~9z9=XKQ`8Y(i%wF=HIWLD{Zmn*0vrIx}2t-roBXE+z^~s*c71(EJX-VM1OB< zSJ>;#uf>TT@fYSGotX1!Trvt3fe7z3VT2<3{ti!W_P{u2k>>jTq@zG>jsn0kH3R`m z-EVt|%2G1q2dysnlIn;f=CrF5CD&aPS;1kvM*3<#r9APYfLm~Yx)wl^#2<_`Dg{Hl z-|FKBwL!u?`mC+z$;N13G1lyic=zQHMd!0r=q-&2>C;7Zu91tFyLwl9D@@e{8U`tqOQ} zfx;Ugo0O0T{VN3nFKzNuJQ^%c3UPvCO|^414f=|dN$n;5#Yu(em~lA1$lRL`jwf=Y zowaqQ+u6^}8*>6FPv9w6x6^?&)(Y_ML(Ndr&CLpm-~*rISIW#-7$lnXs^zQ4(U_s1 zmX->53q_B@XvAIJoskLNTeTPW?|O8Dx&t7j=4d;e-Cbt)DAE5?)}vY+!K4g3->9Ka zZZi5@=1iL?U0CXx(uaCkbE9TnX>Gch3VQK7b&~c}+nE!GkQ8Srt9A#-&b}Q1$u(ki z9T<~8MsCuMMi8Q`P8^Zixv1I?s~gbk>Na{OdU5m)uzO!o{*C?xggu=yj&z9+q)cB> zrp6C06Rj{55Al~e6I=URnLk1w{aZ%4o-r#C>wNFJlPcTXQkFT?lOg>`AsjNZIu_1m zDh`Cxc#5s3m;{c1x{ENtL5I^rMI9RGQ6Q#C4z$S;wGKH_?vIwf7vpJ<>Gso=%w)SP*a0t_1pjODG2M njKganje}iO3hIGZgw62}B4&5yV6}bS00000NkvXXu0mjfj&aaA literal 0 HcmV?d00001 diff --git a/petJournal/app/src/main/res/drawable/icone_consultas_vector.xml b/petJournal/app/src/main/res/drawable/icone_consultas_vector.xml new file mode 100644 index 00000000..d26b9e7a --- /dev/null +++ b/petJournal/app/src/main/res/drawable/icone_consultas_vector.xml @@ -0,0 +1,13 @@ + + + diff --git a/petJournal/app/src/main/res/drawable/icone_medicamento.png b/petJournal/app/src/main/res/drawable/icone_medicamento.png new file mode 100644 index 0000000000000000000000000000000000000000..325fa4f719f82c811109cac084bc2f845992160f GIT binary patch literal 843 zcmV-R1GM~!P)tVp7D&0s(vsMiT{|kwq6?M-vUijY&*QuyIfa_TtKbTg8~*LfpjY9{?;k zNa6!sj6)lN!ho@W259^4ynFa)0o&foYbyhvq`B+6-`#z4_q*Tyj=&>V;!7q4%yM>| za_jR@`&)Q`s2UpaRlT7e(*u`J>yux8WBA6IqPC-Rn~3NkSZkT&QhGaLMLUuTQy>6E zq>$Hln)H@%0PntSqo+Ak)HWO(4Q>>Iw`fLj;p^-a;=inh&^n@33u0nz7IGr0f$2R^Ru%q|YKn&tXT zzF7J6bvrj9~kq6hpczOFAlwmwA?PWhzl*QD7V@`t%kybMOt$MJ$T8zsip-FeVa>d^b2HPJvl$?2Ao7 zgzG5gQ@c>5rzIqhxA@t`jR-6f%tWkv9cgEqSSI+aln{wH8J>hlq2s(6 zzQuHnr^a}u?x!r_6JKKFiV$$e`DAIt6FPk0Z)J8)Rb+cyj&B53L8cS(7MFEKZLv-H z{EX3He`kC-?fjuE?KRW$Bt|-^>m&a{2pc2&YptOxzBIBJZHqw>Z`;IerHm~|k}WX8?9sHRPY4jI(|%bDBJV%sD5j}XS5z!f9k!Qw+iMo`ocnQzN^Ro>w>=MM@M V1CrG091;Kk002ovPDHLkV1g-LetZA` literal 0 HcmV?d00001 diff --git a/petJournal/app/src/main/res/drawable/icone_medicamentos_vector.xml b/petJournal/app/src/main/res/drawable/icone_medicamentos_vector.xml new file mode 100644 index 00000000..9f136be3 --- /dev/null +++ b/petJournal/app/src/main/res/drawable/icone_medicamentos_vector.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/petJournal/app/src/main/res/drawable/icone_passeio.png b/petJournal/app/src/main/res/drawable/icone_passeio.png new file mode 100644 index 0000000000000000000000000000000000000000..32e3ae1c68a170d80f8fbc5f97179718d3e7bb9c GIT binary patch literal 1137 zcmV-%1djWOP)b00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP1 z8%GfCo|TLik}7e6h!Y@A5b=_VluC?F5OadSgHcg=K)i%PJeZsSa)K!33QFZg@(Cc{nYi~nfU!;QhDJ7 zwSaK+Lu;#Ruc1BYbtX65yh6Zgo#aNrlg^h=*Lgzp!e92Q41R4=w znftf(6Zde=_}i;Vtw7LUq*N4Wf&qYjM+l=_8B#A5LM<|sk6^lAj}B6Z=NwH{z|a>& z_LOE7h(caIV95hq>>EC$DgEbHulYPOV z=n;MC8t%sZGrN3&wzA0)lTiW(R&U`w@@W;JZe|Zsf=TC-w^} zsUwU(JO5V|1n(m!Mvarr?a=U~f)2fp3B>KNaZ=iY1?XK(`Ycq7^kzBpRy|f|W5NnBT z0wd(Q{LYwOkpn^VQ%T3HBP4Mw`(1Z(7V4$@WL~RkV%%mRGjDizIX)t!qhyZX`J0n3 zhOh$auiXKMRYErN{=bZm5OlJilh1ByoKmtO=@C2g#?p72N3dmRv`S1qN>V8nSYME? z$K*yK72oMU){19cx5sh17lqwg=)a+||KtmaE5=ZoVhx0JYFbF&HFPr)=0w5X?thM9 z!TvFt{bCd#%#il_hSJqSfr1LeL1;m1xNk%R6Ap0BKI69>>1ojX?&taU|GV>0)u7DZ zz;f61mU}J)QKIkz6|tu|-e;c}m#H zo}HU(&VldyOO>R?_4X=qVcw@>`PmHH`HI@#zLu;O9A<@0?6Pz5MorFnu2wRk>6t!< zW*%2G>lZtX*5 zwLTjZR>HYIBQD!0-z^n&74>={WQ-~tJw9v>mPNov)`jqPO#REn00000NkvXXu0mjf D%cLUg literal 0 HcmV?d00001 diff --git a/petJournal/app/src/main/res/drawable/icone_passeios_vector.xml b/petJournal/app/src/main/res/drawable/icone_passeios_vector.xml new file mode 100644 index 00000000..c8c5cd02 --- /dev/null +++ b/petJournal/app/src/main/res/drawable/icone_passeios_vector.xml @@ -0,0 +1,11 @@ + + + diff --git a/petJournal/app/src/main/res/drawable/icone_racao.png b/petJournal/app/src/main/res/drawable/icone_racao.png new file mode 100644 index 0000000000000000000000000000000000000000..a58289f1f91e49dcd82ed187a9084103205a6279 GIT binary patch literal 865 zcmV-n1D^beP)Y0Q>TR_RPNB*_k(sup(RwtYQ($N`uw!!HpY0@SG2VA%yJZOLahm z&B+PL-Sfl4dA=G9@$rrN!4$jGZ?O7dU6sE*&~=`#0t2*cT}Q;Nhyo$t-JTJ^g^UxE zddn_U^ZW~706vr2a2!%`+qv&~@nQ;94sR#6A+hPs@;BNk0acQb=lC(9!115DsSQ-} z{EbKz!moIQ<(3WQSvI`W%_CcPjyCkA9LLI}AwilXq?(!6-Qj}xtIF)Vd>rS;8|q{w zQiWr+m?YF_4Nz~UQ1b>6M@B_px+-< zmfGnwAs)^n6zts%t~l{7WXvVS>QyW+OgfwJ$%Q4MG+7IUcTvJfGzdQNnFa(Q+khw8 zji5S7VnMGrc#D&hvzD@q@w9A!o~R6mf)*i6d^69<8=>2+u^k!4M1e rQ`fSr(%Qq8))@T#^V*Y60W07ia-LDXc@{Ge00000NkvXXu0mjfDAbJ^ literal 0 HcmV?d00001 diff --git a/petJournal/app/src/main/res/drawable/icone_racao_vector.xml b/petJournal/app/src/main/res/drawable/icone_racao_vector.xml new file mode 100644 index 00000000..3b46755b --- /dev/null +++ b/petJournal/app/src/main/res/drawable/icone_racao_vector.xml @@ -0,0 +1,9 @@ + + + diff --git a/petJournal/app/src/main/res/drawable/icone_vacinas.png b/petJournal/app/src/main/res/drawable/icone_vacinas.png new file mode 100644 index 0000000000000000000000000000000000000000..df84cfdf657f19983ff6b8e0b099f3cadc94530b GIT binary patch literal 732 zcmV<20wev2P)JN7W3oiTKy{{X~pd|(O{ERU;wM1`m_x{Bz z=mM0K9sMHMJ!W0$z*>Xiz^1bC!2k@QMg4W{kp=upUXG#;0XG2;CxdUlf5KBirC@?D z$Xi8VZRXVf2_N32KqN&dYeTKv!Aal_Met#8YBCmq&C(9(B^6i$p0bW&!)zM32j^f2 zBmh2#$i|>Z{@PFi#aVWTjtWc#wC^oveecE(flcyYduY9`4<*=T8U_Ve5m0iUfXV*3 z5b&KUey!EFvBV$aUI-Ar4yZ_#p;R?TTARzOkE-#eK%`3HQ+bGLP0w3SX>zCmR0*mm zWX~*oLoH3d4u&9JLJ5@$pFW2G9yok@{&g9x#+5sqN#iHkQ*qJrZjZn~#-38{TVXh+ zRg;X_!wh26W9o8I8A`X2%E_G+3^TwS*t{&**6^9`>@<#QPQH(-GgawFdtGcq8%it% zWMHrmC@vW(oLs4ebF*?lBy^}sLkS=mLO;Y{9OoGR;&MUg{$EHN91j=LT6~<4Zz-$u zH6k7+&qLsozIS(R0>mMhZ2MTqt2ogUAcza&{+HXgYe_qT9RNj^iyqJ!DY?$apXv{_ z>lL~wph{3GH3>wjeROFWs5aCtfNDYQ3W#KsQ`^)e5J~B&ZN+hyKuV~M&mgVvN7F!& zRnP#HJux;V>>3axP+bBdp*(asvN`Vx5Q#C&J|w#Ul#0ByIzBjrj_4m1bD)m`LpQ+y O0000 + + From 3dbb568c06cfbd57c6e6bff43f74012bc966bc0d Mon Sep 17 00:00:00 2001 From: Vinicius Tavares Date: Mon, 18 Aug 2025 14:02:01 -0300 Subject: [PATCH 5/5] inicio da implementacao da tela --- .../com/soujunior/petjournal/ui/components/TaskCard.kt | 2 +- .../{PetListScreen.kt.kt => PetListScreen.kt} | 0 .../screens_pets/taskListScreen/TaskListScreen.kt | 10 ++++++++++ .../screens_pets/taskListScreen/TaskListViewModel.kt | 2 ++ .../taskListScreen/TaskListViewModelImpl.kt | 4 ++++ .../screens_pets/taskListScreen/components/Screen.kt | 9 +++++++++ 6 files changed, 26 insertions(+), 1 deletion(-) rename petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/{PetListScreen.kt.kt => PetListScreen.kt} (100%) create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListScreen.kt create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModelImpl.kt create mode 100644 petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/components/TaskCard.kt index 16956c6b..ce4084fd 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 @@ -47,7 +47,7 @@ import ir.kaaveh.sdpcompose.ssp fun TaskCard( taskData: TaskData ) { - var expanded by remember { mutableStateOf(true) } + var expanded by remember { mutableStateOf(false) } Box( modifier = Modifier.clip(RectangleShape) diff --git a/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListScreen.kt.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListScreen.kt similarity index 100% rename from petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListScreen.kt.kt rename to petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/petListScreen/PetListScreen.kt 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 new file mode 100644 index 00000000..f402e532 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListScreen.kt @@ -0,0 +1,10 @@ +package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen + +import androidx.compose.runtime.Composable +import androidx.navigation.NavController +import com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.components.Screen + +@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/TaskListViewModel.kt b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt new file mode 100644 index 00000000..2cc1ec08 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModel.kt @@ -0,0 +1,2 @@ +package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen + 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 new file mode 100644 index 00000000..b3cbcbd5 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/TaskListViewModelImpl.kt @@ -0,0 +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 new file mode 100644 index 00000000..34cce820 --- /dev/null +++ b/petJournal/app/src/main/java/com/soujunior/petjournal/ui/screens_app/screens_pets/taskListScreen/components/Screen.kt @@ -0,0 +1,9 @@ +package com.soujunior.petjournal.ui.screens_app.screens_pets.taskListScreen.components + +import androidx.compose.runtime.Composable +import androidx.navigation.NavController + +@Composable +fun Screen(navController: NavController){ + +} \ No newline at end of file