From a56b9992755ff4f2ff5feced1ee4a01589f6b305 Mon Sep 17 00:00:00 2001 From: Jose Ricardo Date: Fri, 5 Apr 2024 12:05:19 -0600 Subject: [PATCH 1/2] Update Screen finished --- .../coderic/protective/mobile/MainActivity.kt | 27 +++-- .../protective/mobile/data/Almacenamiento.kt | 2 +- .../mobile/data/MacronutrientPreferences.kt | 10 +- .../mobile/domain/CasosUsoMascota.kt | 4 +- .../coderic/protective/mobile/model/Routes.kt | 1 + .../mobile/presentation/pet/PetScreen.kt | 3 +- .../mobile/presentation/pet/PetViewModel.kt | 22 +++- .../presentation/{ => pet}/UpdatePetScreen.kt | 113 ++++++++++++------ app/src/main/res/values/strings.xml | 4 + 9 files changed, 128 insertions(+), 58 deletions(-) rename app/src/main/java/org/coderic/protective/mobile/presentation/{ => pet}/UpdatePetScreen.kt (72%) diff --git a/app/src/main/java/org/coderic/protective/mobile/MainActivity.kt b/app/src/main/java/org/coderic/protective/mobile/MainActivity.kt index 403472c..79708a2 100755 --- a/app/src/main/java/org/coderic/protective/mobile/MainActivity.kt +++ b/app/src/main/java/org/coderic/protective/mobile/MainActivity.kt @@ -6,6 +6,10 @@ import androidx.activity.compose.setContent import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold +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.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -14,8 +18,9 @@ import org.coderic.protective.mobile.model.Routes import org.coderic.protective.mobile.presentation.DashBoardScreen import org.coderic.protective.mobile.presentation.DeviceScreen import org.coderic.protective.mobile.presentation.LoadingScreen -import org.coderic.protective.mobile.presentation.UpdatePetScreen +import org.coderic.protective.mobile.presentation.pet.UpdatePetScreen import org.coderic.protective.mobile.presentation.components.MyBottomBar +import org.coderic.protective.mobile.presentation.pet.PetScreen import org.coderic.protective.mobile.presentation.pet.PetViewModel import org.coderic.protective.mobile.ui.theme.CocoAppTheme @@ -23,19 +28,19 @@ class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - val petViewModel = PetViewModel( this@MainActivity ) - setContent { CocoAppTheme { - // A surface container using the 'background' color from the theme val navController = rememberNavController() + var showNav by remember { mutableStateOf( true ) } + val petViewModel = PetViewModel( this@MainActivity, navController ) + Scaffold ( modifier = Modifier .fillMaxSize(), contentColor = MaterialTheme.colorScheme.background, bottomBar = { - MyBottomBar( navController ) + if( showNav ) MyBottomBar( navController ) } ) { paddingValues -> NavHost( @@ -43,21 +48,29 @@ class MainActivity : ComponentActivity() { startDestination = Routes.MainScreen.route ) { composable( Routes.MainScreen.route ) { + showNav = true DashBoardScreen(paddingValues = paddingValues, navController ) } composable( Routes.MyPetScreen.route) { - // PetScreen( paddingValues = paddingValues, petViewModel ) - UpdatePetScreen( petViewModel, paddingValues ) + showNav = true + PetScreen( paddingValues = paddingValues, petViewModel ) } composable(Routes.MyUpdatePetScreen.route ) { + showNav = true UpdatePetScreen( petViewModel, paddingValues ) } composable( Routes.ExploreScreen.route ) { + showNav = true LoadingScreen(paddingValues = paddingValues ) } composable( Routes.ManageScreen.route ) { + showNav = true DeviceScreen( paddingValues ) } + composable( Routes.MyUpdatePetScreen.route ) { + showNav = false + UpdatePetScreen( petViewModel, paddingValues ) + } } } } diff --git a/app/src/main/java/org/coderic/protective/mobile/data/Almacenamiento.kt b/app/src/main/java/org/coderic/protective/mobile/data/Almacenamiento.kt index 9722a17..72b8398 100755 --- a/app/src/main/java/org/coderic/protective/mobile/data/Almacenamiento.kt +++ b/app/src/main/java/org/coderic/protective/mobile/data/Almacenamiento.kt @@ -5,7 +5,7 @@ import org.coderic.protective.mobile.model.datos.Pet interface Almacenamiento { fun savePet( pet: Pet ) + fun getPet() : Pet? fun saveDevice( device: Device ) - fun getPet( id: Long ) : Pet? fun getDevice() : Device } \ No newline at end of file diff --git a/app/src/main/java/org/coderic/protective/mobile/data/MacronutrientPreferences.kt b/app/src/main/java/org/coderic/protective/mobile/data/MacronutrientPreferences.kt index 798bedd..d14493c 100755 --- a/app/src/main/java/org/coderic/protective/mobile/data/MacronutrientPreferences.kt +++ b/app/src/main/java/org/coderic/protective/mobile/data/MacronutrientPreferences.kt @@ -25,6 +25,7 @@ class MacronutrientPreferences (context: Context ) : Almacenamiento { .put("id", pet.id ) .put("gender", pet.gender.type ) editor.putString("pet${pet.id}", petJson.toString() ) + editor.putString( "id", pet.id.toString() ) editor.apply() } @@ -32,10 +33,11 @@ class MacronutrientPreferences (context: Context ) : Almacenamiento { TODO("Not yet implemented") } - override fun getPet(id: Long): Pet? { - val petString = preferences.getString("pet$id", "") - if (petString.equals("")) return null; - val petJSON = JSONObject(petString) + override fun getPet(): Pet? { + val petId = preferences.getString("id", "") + if ( petId == "" ) return null; + val petString = preferences.getString("pet$petId", "") + val petJSON = JSONObject( petString!! ) return Pet( name = petJSON.getString("name"), diff --git a/app/src/main/java/org/coderic/protective/mobile/domain/CasosUsoMascota.kt b/app/src/main/java/org/coderic/protective/mobile/domain/CasosUsoMascota.kt index 3529aab..1853e1d 100755 --- a/app/src/main/java/org/coderic/protective/mobile/domain/CasosUsoMascota.kt +++ b/app/src/main/java/org/coderic/protective/mobile/domain/CasosUsoMascota.kt @@ -11,8 +11,8 @@ class CasosUsoMascota( context: Context ) { fun guardarMascota( pet: Pet ) { almacenamiento.savePet( pet ) } - fun getMascota( id: Long ) : Pet? { - val pet = almacenamiento.getPet( id ) + fun getMascota() : Pet? { + val pet = almacenamiento.getPet() return pet /*if( pet == null ) { return Pet( diff --git a/app/src/main/java/org/coderic/protective/mobile/model/Routes.kt b/app/src/main/java/org/coderic/protective/mobile/model/Routes.kt index f0ecb30..48b9795 100755 --- a/app/src/main/java/org/coderic/protective/mobile/model/Routes.kt +++ b/app/src/main/java/org/coderic/protective/mobile/model/Routes.kt @@ -10,4 +10,5 @@ sealed class Routes( val route : String ) { data object MyUpdatePetScreen : Routes("main/profile/update") data object ExploreScreen: Routes("main/explore") data object ManageScreen: Routes("main/manage") + } \ No newline at end of file diff --git a/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetScreen.kt b/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetScreen.kt index 8232232..ec37673 100755 --- a/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetScreen.kt +++ b/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetScreen.kt @@ -52,6 +52,7 @@ fun PetScreen( paddingValues: PaddingValues, petViewModel: PetViewModel) { .padding(paddingValues) ) { if( petViewModel.myPet != null ) { + petViewModel.showname() ImageBanner() BodyPetScreen(Modifier.align(Alignment.BottomCenter), petViewModel ) } @@ -75,7 +76,7 @@ fun NoPetScreen(paddingValues: PaddingValues, petViewModel: PetViewModel) { Button( modifier = Modifier .fillMaxWidth(0.8f), - onClick = { petViewModel.btnAddPet() }, + onClick = { petViewModel.btnToAddPet() }, shape = RoundedCornerShape(10.dp), colors = ButtonDefaults.buttonColors( containerColor = seed, diff --git a/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetViewModel.kt b/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetViewModel.kt index b24a7d8..fce4cd2 100755 --- a/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetViewModel.kt +++ b/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetViewModel.kt @@ -1,16 +1,28 @@ package org.coderic.protective.mobile.presentation.pet import android.content.Context +import android.widget.Toast import androidx.lifecycle.ViewModel +import androidx.navigation.NavHostController import org.coderic.protective.mobile.domain.CasosUsoMascota -import org.coderic.protective.mobile.model.datos.Gender +import org.coderic.protective.mobile.model.Routes import org.coderic.protective.mobile.model.datos.Pet -class PetViewModel( context: Context) : ViewModel() { +class PetViewModel( val context: Context, val navController: NavHostController ) : ViewModel() { val casosUsoMascota = CasosUsoMascota( context ) - val myPet = casosUsoMascota.getMascota( 1231 ) - - fun btnAddPet() { + var _myPet = casosUsoMascota.getMascota() + val myPet = _myPet + fun btnToAddPet() { + navController.navigate( Routes.MyUpdatePetScreen.route ) + } + fun btnAddPet( pet: Pet ) { + casosUsoMascota.guardarMascota( pet ) + _myPet = pet + Toast.makeText( context, "Mascota Guardada", Toast.LENGTH_LONG ).show() + navController.navigate( Routes.MyPetScreen.route ) + } + fun showname() { + Toast.makeText(context, myPet!!.name, Toast.LENGTH_SHORT).show() } } \ No newline at end of file diff --git a/app/src/main/java/org/coderic/protective/mobile/presentation/UpdatePetScreen.kt b/app/src/main/java/org/coderic/protective/mobile/presentation/pet/UpdatePetScreen.kt similarity index 72% rename from app/src/main/java/org/coderic/protective/mobile/presentation/UpdatePetScreen.kt rename to app/src/main/java/org/coderic/protective/mobile/presentation/pet/UpdatePetScreen.kt index 810aea2..8987bf8 100755 --- a/app/src/main/java/org/coderic/protective/mobile/presentation/UpdatePetScreen.kt +++ b/app/src/main/java/org/coderic/protective/mobile/presentation/pet/UpdatePetScreen.kt @@ -1,25 +1,26 @@ -package org.coderic.protective.mobile.presentation +package org.coderic.protective.mobile.presentation.pet -import android.widget.Toast 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.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.AccountCircle import androidx.compose.material.icons.filled.Info import androidx.compose.material.icons.sharp.KeyboardArrowRight import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.RadioButton -import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf @@ -28,13 +29,14 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import org.coderic.protective.mobile.R -import org.coderic.protective.mobile.presentation.pet.PetViewModel +import org.coderic.protective.mobile.model.datos.Gender +import org.coderic.protective.mobile.model.datos.Pet import org.coderic.protective.mobile.ui.theme.PetCareContentText import org.coderic.protective.mobile.ui.theme.PetCareNumberField import org.coderic.protective.mobile.ui.theme.PetCareTextField @@ -42,10 +44,18 @@ import org.coderic.protective.mobile.ui.theme.PetCareTitleText import org.coderic.protective.mobile.ui.theme.seed @Composable -fun UpdatePetScreen(petViewModel: PetViewModel, paddingValues: PaddingValues) { +fun UpdatePetScreen( petViewModel: PetViewModel, paddingValues: PaddingValues ) { var name by rememberSaveable { mutableStateOf("") } - val context = LocalContext.current + var selected by rememberSaveable { mutableIntStateOf(1) } + + var age by rememberSaveable { mutableStateOf("") } + var height by rememberSaveable { mutableStateOf("") } + var weight by rememberSaveable { mutableStateOf("") } + var color by rememberSaveable { mutableStateOf("") } + var type by rememberSaveable { mutableStateOf("") } + + var desc by rememberSaveable { mutableStateOf("") } // TODO: Agregar Subida de imagenes. var imageRoute by rememberSaveable { mutableStateOf("") } @@ -56,25 +66,44 @@ fun UpdatePetScreen(petViewModel: PetViewModel, paddingValues: PaddingValues) { .verticalScroll(rememberScrollState()), horizontalAlignment = Alignment.CenterHorizontally ) { - PetCareTitleText(text = "Registra tu perro", size = 36) + PetCareTitleText(text = if( petViewModel.myPet == null ) stringResource(id = R.string.formRegistrar ) else stringResource( + id = R.string.formActualizar + ), size = 36) SectionFormName( text = stringResource(id = R.string.nameForm), name, R.string.nameFormPlaceholder ) { name = it } - SectionFormDescription() - SectionFormGender() - SectionFormData() - - Button( - modifier = Modifier.fillMaxSize(), - onClick = { Toast.makeText( context, "Hola $name", Toast.LENGTH_SHORT ).show() } - ) { - Text(text = "Guardar") + SectionFormDescription( desc ) { + desc = it + } + SectionFormGender( selected ) { + selected = it + } + SectionFormData( age, height, weight, color, type ) { + who, data -> when( who ) { + 1 -> age = data + 2 -> height = data + 3 -> weight = data + 4 -> color = data + 5 -> type = data + } + } + SectionFormButton { + petViewModel.btnAddPet( Pet( + name = name, + gender = if( selected == 1 ) Gender.MAN else Gender.FEMALE, + typePet = type, + color = color, + description = desc, + height = height.toInt(), + weight = weight.toDouble(), + age = age.toInt() + )) } + Spacer(modifier = Modifier.height(16.dp)) } } @Composable -fun SectionFormGender() { - var selected by rememberSaveable { mutableIntStateOf(1) } +fun SectionFormGender( selected: Int, onSelected: ( Int ) -> Unit) { Card( elevation = CardDefaults.cardElevation( 8.dp ), modifier = Modifier @@ -89,11 +118,11 @@ fun SectionFormGender() { ) { PetCareTitleText(text = stringResource(id = R.string.genderForm), size = 24 ) Row( verticalAlignment = Alignment.CenterVertically ) { - RadioButton(selected = selected == 1, onClick = { selected = 1 } ) + RadioButton(selected = selected == 1, onClick = { onSelected(1) } ) PetCareContentText(text = stringResource(id = R.string.man), size = 16) } Row( verticalAlignment = Alignment.CenterVertically ) { - RadioButton(selected = selected == 2, onClick = { selected = 2 } ) + RadioButton(selected = selected == 2, onClick = { onSelected(2) } ) PetCareContentText(text = stringResource(id = R.string.female), size = 16) } @@ -118,14 +147,7 @@ fun SectionFormName(text: String, value: String, placeholder: Int, onChange: (St } } @Composable -fun SectionFormData() { - - var age by rememberSaveable { mutableStateOf("") } - var height by rememberSaveable { mutableStateOf("") } - var weight by rememberSaveable { mutableStateOf("") } - var color by rememberSaveable { mutableStateOf("") } - var type by rememberSaveable { mutableStateOf("") } - +fun SectionFormData( age: String, weight: String, height: String, color: String, type:String, onChange: (Int, String) -> Unit ) { Card( elevation = CardDefaults.cardElevation( 8.dp ), modifier = Modifier.padding(16.dp), @@ -143,7 +165,7 @@ fun SectionFormData() { ){ PetCareContentText(text = stringResource(id = R.string.ageForm), size = 16 ) PetCareNumberField(value = age, imageVector = Icons.Sharp.KeyboardArrowRight ) { - age = it + onChange(1, it) } } Spacer(modifier = Modifier.height(8.dp)) @@ -152,7 +174,7 @@ fun SectionFormData() { ){ PetCareContentText(text = stringResource(id = R.string.weightForm), size = 16 ) PetCareNumberField(value = weight, imageVector = Icons.Sharp.KeyboardArrowRight ) { - weight = it + onChange( 2, it ) } } Spacer(modifier = Modifier.height(8.dp)) @@ -161,7 +183,7 @@ fun SectionFormData() { ){ PetCareContentText(text = stringResource(id = R.string.heightForm), size = 16 ) PetCareNumberField(value = height, imageVector = Icons.Sharp.KeyboardArrowRight ) { - height = it + onChange( 3, it ) } } Spacer(modifier = Modifier.height(8.dp)) @@ -170,7 +192,7 @@ fun SectionFormData() { ){ PetCareContentText(text = stringResource(id = R.string.colorForm), size = 16 ) PetCareTextField(value = color, imageVector = Icons.Sharp.KeyboardArrowRight ) { - color = it + onChange( 4, it ) } } Spacer(modifier = Modifier.height(8.dp)) @@ -179,15 +201,15 @@ fun SectionFormData() { ){ PetCareContentText(text = stringResource(id = R.string.typeForm ), size = 16 ) PetCareTextField(value = type, imageVector = Icons.Sharp.KeyboardArrowRight ) { - type = it + onChange( 5, it ) } } } } } @Composable -fun SectionFormDescription() { - var desc by rememberSaveable { mutableStateOf("") } +fun SectionFormDescription( desc: String, onChange: (String) -> Unit) { + Card( elevation = CardDefaults.cardElevation( 8.dp ), modifier = Modifier.padding(16.dp) @@ -198,8 +220,23 @@ fun SectionFormDescription() { PetCareTitleText(text = stringResource(id = R.string.descriptionForm), size = 24 ) Spacer(modifier = Modifier.height(8.dp)) PetCareTextField(value = desc, imageVector = Icons.Filled.Info ) { - desc = it + onChange( it ) } } } +} +@Composable +fun SectionFormButton( onClick: () -> Unit ) { + Button( + modifier = Modifier + .fillMaxWidth(0.8f), + onClick = { onClick() }, + shape = RoundedCornerShape(10.dp), + colors = ButtonDefaults.buttonColors( + containerColor = seed, + contentColor = Color.White + ) + ) { + PetCareContentText(text = stringResource(id = R.string.btnAddPet), size = 24 ) + } } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e507429..9e54691 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -74,4 +74,8 @@ Height: Color: Description: + + Save Pet + Registrar + Actualizar \ No newline at end of file From 11d6a6ec743d373195bd1f96f08b335585e53ab9 Mon Sep 17 00:00:00 2001 From: Jose Ricardo Date: Sat, 13 Apr 2024 15:08:35 -0600 Subject: [PATCH 2/2] PetViewModel and Data finished --- .../protective/mobile/data/Almacenamiento.kt | 1 + .../mobile/data/MacronutrientPreferences.kt | 7 +++ .../mobile/domain/CasosUsoMascota.kt | 3 ++ .../mobile/presentation/pet/PetScreen.kt | 43 +++++++++++++------ .../mobile/presentation/pet/PetViewModel.kt | 32 ++++++++++---- 5 files changed, 66 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/org/coderic/protective/mobile/data/Almacenamiento.kt b/app/src/main/java/org/coderic/protective/mobile/data/Almacenamiento.kt index 72b8398..c482b35 100755 --- a/app/src/main/java/org/coderic/protective/mobile/data/Almacenamiento.kt +++ b/app/src/main/java/org/coderic/protective/mobile/data/Almacenamiento.kt @@ -6,6 +6,7 @@ import org.coderic.protective.mobile.model.datos.Pet interface Almacenamiento { fun savePet( pet: Pet ) fun getPet() : Pet? + fun deletePet( pet: Pet ) fun saveDevice( device: Device ) fun getDevice() : Device } \ No newline at end of file diff --git a/app/src/main/java/org/coderic/protective/mobile/data/MacronutrientPreferences.kt b/app/src/main/java/org/coderic/protective/mobile/data/MacronutrientPreferences.kt index d14493c..557212f 100755 --- a/app/src/main/java/org/coderic/protective/mobile/data/MacronutrientPreferences.kt +++ b/app/src/main/java/org/coderic/protective/mobile/data/MacronutrientPreferences.kt @@ -53,6 +53,13 @@ class MacronutrientPreferences (context: Context ) : Almacenamiento { ) } + override fun deletePet( pet: Pet ) { + val editor = preferences.edit() + editor.putString("pet${pet.id}", null ) + editor.putString( "id", null ) + editor.apply() + } + override fun getDevice(): Device { return Device( preferences.getString("device_name", "")!!, diff --git a/app/src/main/java/org/coderic/protective/mobile/domain/CasosUsoMascota.kt b/app/src/main/java/org/coderic/protective/mobile/domain/CasosUsoMascota.kt index 1853e1d..18f0230 100755 --- a/app/src/main/java/org/coderic/protective/mobile/domain/CasosUsoMascota.kt +++ b/app/src/main/java/org/coderic/protective/mobile/domain/CasosUsoMascota.kt @@ -30,5 +30,8 @@ class CasosUsoMascota( context: Context ) { return pet }*/ } + fun deleteMascota( pet: Pet ) { + almacenamiento.deletePet( pet ) + } } \ No newline at end of file diff --git a/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetScreen.kt b/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetScreen.kt index ec37673..36cb819 100755 --- a/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetScreen.kt +++ b/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetScreen.kt @@ -20,6 +20,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add +import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.KeyboardArrowRight import androidx.compose.material.icons.filled.LocationOn import androidx.compose.material3.Button @@ -28,6 +29,9 @@ import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults import androidx.compose.material3.Icon import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.livedata.observeAsState +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -38,6 +42,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import org.coderic.protective.mobile.R +import org.coderic.protective.mobile.model.datos.Pet import org.coderic.protective.mobile.ui.theme.PetCareContentText import org.coderic.protective.mobile.ui.theme.PetCareTitleText import org.coderic.protective.mobile.ui.theme.rosa @@ -46,14 +51,19 @@ import org.coderic.protective.mobile.ui.theme.text_desc_color @Composable fun PetScreen( paddingValues: PaddingValues, petViewModel: PetViewModel) { + val arePet by petViewModel.arePet.observeAsState( initial = false ) + + petViewModel.getPet() Box( Modifier .fillMaxSize() .padding(paddingValues) ) { - if( petViewModel.myPet != null ) { - petViewModel.showname() + if( arePet != false ) { ImageBanner() + ButtonDelete( Modifier.align( Alignment.TopEnd ) ) { + petViewModel.deletePet( petViewModel.myPet.value!! ) + } BodyPetScreen(Modifier.align(Alignment.BottomCenter), petViewModel ) } else { @@ -62,6 +72,15 @@ fun PetScreen( paddingValues: PaddingValues, petViewModel: PetViewModel) { } } @Composable +fun ButtonDelete( modifier: Modifier, onClick: () -> Unit ) { + Button( + modifier = modifier, + onClick = { onClick() } + ) { + Icon(imageVector = Icons.Filled.Delete, contentDescription = "Delete") + } +} +@Composable fun NoPetScreen(paddingValues: PaddingValues, petViewModel: PetViewModel) { Column( modifier = Modifier @@ -118,12 +137,12 @@ fun BodyPetScreen( modifier: Modifier, petViewModel: PetViewModel ) { horizontalArrangement = Arrangement.SpaceBetween ) { Column { - PetCareTitleText( text = petViewModel.myPet!!.name, 24 ) + PetCareTitleText( text = petViewModel.myPet.value!!.name, 24 ) Spacer(modifier = Modifier.height(8.dp)) - PetCareContentText (text = petViewModel.myPet.typePet, 16, text_desc_color ) + PetCareContentText (text = petViewModel.myPet.value!!.typePet, 16, text_desc_color ) } Icon( - painter = painterResource( id = petViewModel.myPet!!.gender.image ), + painter = painterResource( id = petViewModel.myPet.value!!.gender.image ), contentDescription = "Gender", tint = Color.White, modifier = Modifier @@ -142,20 +161,20 @@ fun BodyPetScreen( modifier: Modifier, petViewModel: PetViewModel ) { tint = Color.Black ) Spacer(modifier = Modifier.width(8.dp)) - PetCareTitleText(text = "About ${petViewModel.myPet!!.name}", size = 20) + PetCareTitleText(text = "About ${petViewModel.myPet.value!!.name}", size = 20) } Spacer(modifier = Modifier.height(16.dp)) Row( Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween ) { - PetData(stringResource(id = R.string.date_age), "${petViewModel.myPet!!.age.toString()} days" ) - PetData(stringResource(id = R.string.date_weight), "${petViewModel.myPet!!.weight.toString()} Kg") - PetData(stringResource(id = R.string.date_height), "${petViewModel.myPet!!.height.toString()} cm" ) - PetData(stringResource(id = R.string.date_color), petViewModel.myPet!!.color ) + PetData(stringResource(id = R.string.date_age), "${petViewModel.myPet.value!!.age.toString()} days" ) + PetData(stringResource(id = R.string.date_weight), "${petViewModel.myPet.value!!.weight.toString()} Kg") + PetData(stringResource(id = R.string.date_height), "${petViewModel.myPet.value!!.height.toString()} cm" ) + PetData(stringResource(id = R.string.date_color), petViewModel.myPet.value!!.color ) } Spacer(modifier = Modifier.height(16.dp)) - PetCareContentText(text = petViewModel.myPet!!.description, size = 16, color = Color.Gray, align = TextAlign.Start ) + PetCareContentText(text = petViewModel.myPet.value!!.description, size = 16, color = Color.Gray, align = TextAlign.Start ) Spacer(modifier = Modifier.height(24.dp)) Row { Icon( @@ -164,7 +183,7 @@ fun BodyPetScreen( modifier: Modifier, petViewModel: PetViewModel ) { tint = Color.Black ) Spacer(modifier = Modifier.width(8.dp)) - PetCareTitleText(text = "${petViewModel.myPet.name}'s Status", size = 20) + PetCareTitleText(text = "${petViewModel.myPet.value!!.name}'s Status", size = 20) } Spacer(modifier = Modifier.height(16.dp)) PetStateData(title = "Location") diff --git a/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetViewModel.kt b/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetViewModel.kt index fce4cd2..db1d12f 100755 --- a/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetViewModel.kt +++ b/app/src/main/java/org/coderic/protective/mobile/presentation/pet/PetViewModel.kt @@ -2,27 +2,43 @@ package org.coderic.protective.mobile.presentation.pet import android.content.Context import android.widget.Toast +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.navigation.NavHostController import org.coderic.protective.mobile.domain.CasosUsoMascota import org.coderic.protective.mobile.model.Routes import org.coderic.protective.mobile.model.datos.Pet -class PetViewModel( val context: Context, val navController: NavHostController ) : ViewModel() { - val casosUsoMascota = CasosUsoMascota( context ) - var _myPet = casosUsoMascota.getMascota() - val myPet = _myPet +class PetViewModel( context: Context, val navController: NavHostController ) : ViewModel() { + private val casosUsoMascota = CasosUsoMascota( context ) + + private val _myPet = MutableLiveData( casosUsoMascota.getMascota() ) + private val _arePet = MutableLiveData() + val myPet = _myPet + val arePet = _arePet fun btnToAddPet() { navController.navigate( Routes.MyUpdatePetScreen.route ) } fun btnAddPet( pet: Pet ) { casosUsoMascota.guardarMascota( pet ) - _myPet = pet - Toast.makeText( context, "Mascota Guardada", Toast.LENGTH_LONG ).show() + + _myPet.value = pet + arePet.value = true + navController.navigate( Routes.MyPetScreen.route ) } - fun showname() { - Toast.makeText(context, myPet!!.name, Toast.LENGTH_SHORT).show() + fun getPet() { + _myPet.value = casosUsoMascota.getMascota() + if( _myPet.value == null ) { + _arePet.value = false + } else { + _arePet.value = true + } + } + fun deletePet( pet: Pet ) { + _arePet.value = false + _myPet.value = null + casosUsoMascota.deleteMascota( pet = pet ) } } \ No newline at end of file