From 54944809d450cdd014cdfdae6cfb582b42e07151 Mon Sep 17 00:00:00 2001 From: Pedro Javier Date: Wed, 5 Aug 2026 12:57:43 +0200 Subject: [PATCH] =?UTF-8?q?Fin=20de=20aplicaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 51 ++ app/build.gradle.kts | 14 + app/src/main/AndroidManifest.xml | 6 + app/src/main/ic_launcher-playstore.png | Bin 0 -> 68312 bytes .../com/example/despensapp/MainActivity.kt | 42 +- .../despensapp/data/api/OpenFoodFactsApi.kt | 12 + .../example/despensapp/data/model/Product.kt | 15 + .../data/model/off/OFFProductResponse.kt | 19 + .../data/repository/PantryRepository.kt | 204 ++++++++ .../data/repository/UserRepository.kt | 66 +++ .../despensapp/ui/navigation/NavGraph.kt | 86 ++++ .../despensapp/ui/screens/AddProductScreen.kt | 308 +++++++++++ .../despensapp/ui/screens/LoginScreen.kt | 111 ++++ .../despensapp/ui/screens/PantryScreen.kt | 486 ++++++++++++++++++ .../ui/screens/ProductDetailScreen.kt | 329 ++++++++++++ .../despensapp/ui/screens/RegisterScreen.kt | 124 +++++ .../example/despensapp/util/CategoryMapper.kt | 24 + .../com/example/despensapp/util/DateUtils.kt | 30 ++ .../despensapp/worker/InventoryCheckWorker.kt | 56 ++ .../res/drawable/ic_launcher_background.xml | 165 +----- .../ic_launcher_foreground_custom.xml | 64 +++ .../ic_launcher.xml | 6 +- .../ic_launcher_round.xml | 6 +- app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 1404 -> 4438 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 0 -> 4694 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 2898 -> 6348 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 982 -> 2904 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 0 -> 3054 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 1772 -> 3902 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 1900 -> 6128 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 0 -> 6370 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 3918 -> 8754 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 2884 -> 8794 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 0 -> 9350 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 5914 -> 13250 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 3844 -> 11762 bytes .../ic_launcher_foreground.webp | Bin 0 -> 13360 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 7778 -> 18264 bytes app/src/main/res/values/strings.xml | 89 ++++ gradle/libs.versions.toml | 26 + 40 files changed, 2142 insertions(+), 197 deletions(-) create mode 100644 README.md create mode 100644 app/src/main/ic_launcher-playstore.png create mode 100644 app/src/main/java/com/example/despensapp/data/api/OpenFoodFactsApi.kt create mode 100644 app/src/main/java/com/example/despensapp/data/model/Product.kt create mode 100644 app/src/main/java/com/example/despensapp/data/model/off/OFFProductResponse.kt create mode 100644 app/src/main/java/com/example/despensapp/data/repository/PantryRepository.kt create mode 100644 app/src/main/java/com/example/despensapp/data/repository/UserRepository.kt create mode 100644 app/src/main/java/com/example/despensapp/ui/navigation/NavGraph.kt create mode 100644 app/src/main/java/com/example/despensapp/ui/screens/AddProductScreen.kt create mode 100644 app/src/main/java/com/example/despensapp/ui/screens/LoginScreen.kt create mode 100644 app/src/main/java/com/example/despensapp/ui/screens/PantryScreen.kt create mode 100644 app/src/main/java/com/example/despensapp/ui/screens/ProductDetailScreen.kt create mode 100644 app/src/main/java/com/example/despensapp/ui/screens/RegisterScreen.kt create mode 100644 app/src/main/java/com/example/despensapp/util/CategoryMapper.kt create mode 100644 app/src/main/java/com/example/despensapp/util/DateUtils.kt create mode 100644 app/src/main/java/com/example/despensapp/worker/InventoryCheckWorker.kt create mode 100644 app/src/main/res/drawable/ic_launcher_foreground_custom.xml rename app/src/main/res/{mipmap-anydpi => mipmap-anydpi-v26}/ic_launcher.xml (74%) rename app/src/main/res/{mipmap-anydpi => mipmap-anydpi-v26}/ic_launcher_round.xml (74%) create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp diff --git a/README.md b/README.md new file mode 100644 index 0000000..4bcc07a --- /dev/null +++ b/README.md @@ -0,0 +1,51 @@ +# Despensapp - Gestión de Despensa Familiar + +Aplicación Android diseñada para gestionar el inventario de una despensa de forma compartida, con integración directa a MariaDB y Open Food Facts. + +## Funcionalidades Actuales + +### 🔐 Autenticación Multiusuario +* **Login y Registro:** Conexión directa a una base de datos MariaDB externa (`mariadb.peta9.com`). +* **Gestión de Cuentas:** Registro de usuarios con nombre completo, email y contraseña. +* **Seguridad:** Uso de hilos secundarios (Coroutines) para no bloquear la interfaz durante la conexión. + +### 🍱 Gestión de Inventario +* **Visualización en Tiempo Real:** Lista de productos traída directamente desde MariaDB con soporte para unidades (kg, l, gr, etc.). +* **Imágenes de Productos:** Integración con **Coil** para mostrar las imágenes de los productos obtenidas de Open Food Facts. +* **Detalles Extendidos:** Pantalla de detalles para cada producto con información técnica de MariaDB. +* **Búsqueda y Categorización:** Filtro por nombre y categorías dinámicas para una localización rápida. +* **Swipe to Delete:** Borrado intuitivo de productos deslizando hacia la izquierda (Material 3). +* **Fecha de Caducidad:** Seguimiento de la caducidad de cada producto para evitar desperdicios. +* **Filtro Inteligente:** Filtro para ver rápidamente qué productos han caducado o están a punto de hacerlo (7 días o menos). +* **Formato de Fecha:** Visualización de fechas en formato amigable (DD/MM/YYYY) en toda la aplicación. +* **Lista de la Compra:** Modo dedicado que muestra únicamente los productos con stock bajo. +* **Historial de Alta:** Registro automático de la fecha y hora en la que se añadió cada producto. +* **Alertas de Stock Bajo:** Indicadores visuales en rojo cuando un producto está por debajo de su cantidad mínima. +* **Notificaciones Automáticas:** El sistema revisa diariamente el inventario y envía notificaciones al móvil sobre stock bajo. +* **Control Rápido:** Botones de incremento/decremento en la pantalla principal para actualizar el stock rápidamente. +* **Edición Completa:** Modo de edición total en la pantalla de detalle para modificar nombre, stock, stock mínimo, categoría y caducidad. +* **Compartir Lista:** Botón para compartir la lista de la compra directamente desde la aplicación a servicios de mensajería (WhatsApp, etc.). +* **Iconografía Dinámica:** Asignación inteligente de iconos de Material Design basados en la categoría del producto (Lácteos, Carnicería, Fresco, etc.). +* **Cierre de Sesión:** Opción para cerrar la sesión actual y volver de forma segura a la pantalla de bienvenida. + +### 🎨 Identidad Visual +* **Icono Personalizado:** Diseño de icono adaptativo único que representa un mueble de despensa lleno de productos. +* **Interfaz Material 3:** Uso de los últimos estándares de diseño de Google para una experiencia fluida y moderna. +* **Colores Amigables:** Paleta de colores personalizada para mejorar la legibilidad y la estética familiar. + +### 🔍 Integración con APIs y Hardware +* **Escáner de Código de Barras:** Uso de **CameraX** y **Google ML Kit** con **Feedback Háptico** (vibración) al detectar productos. +* **Linterna:** Botón integrado en el escáner para encender y apagar el flash en entornos oscuros. +* **Open Food Facts:** Búsqueda automática de nombres, categorías e imágenes al escanear un código de barras. +* **MariaDB Directo:** Conexión JDBC para persistencia de datos compartida. + +## Próximos Pasos +* [x] Gestión de fechas de caducidad. +* [x] Lista de la compra automática basada en el stock bajo. +* [ ] Compartir despensas específicas mediante códigos de familia. +* [ ] Exportar inventario a PDF/CSV. + +## Requisitos Técnicos +* Android SDK 34+ +* Conexión a Internet (para API y DB remota). +* Permiso de Cámara (para el escáner). diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 2be0682..34f38a8 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -39,6 +39,20 @@ dependencies { implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.activity.compose) implementation(libs.androidx.compose.material3) + implementation(libs.androidx.navigation.compose) + implementation(libs.retrofit) + implementation(libs.retrofit.gson) + implementation(libs.okhttp) + implementation(libs.okhttp.logging) + implementation(libs.mariadb.java.client) + implementation(libs.androidx.camera.camera2) + implementation(libs.androidx.camera.lifecycle) + implementation(libs.androidx.camera.view) + implementation(libs.barcode.scanning) + implementation(libs.coil.compose) + implementation(libs.androidx.work.runtime) + implementation(libs.androidx.work.runtime) + implementation(libs.material.icons.extended) implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui.graphics) implementation(libs.androidx.compose.ui.tooling.preview) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 11caddc..fbb14f8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,12 @@ + + + + + + Rz?iyS|aDs>6?(R;I1a~L6OVF=5=iYbU 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%0D;TU%NGlrof^EV2Uc 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νSg{NvGSCPpmepEO~?YF-)00oO)+^2C|h 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 literal 0 HcmV?d00001 diff --git a/app/src/main/java/com/example/despensapp/MainActivity.kt b/app/src/main/java/com/example/despensapp/MainActivity.kt index 3b35bcc..925bb04 100644 --- a/app/src/main/java/com/example/despensapp/MainActivity.kt +++ b/app/src/main/java/com/example/despensapp/MainActivity.kt @@ -4,44 +4,28 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview +import androidx.navigation.compose.rememberNavController +import androidx.work.PeriodicWorkRequestBuilder +import androidx.work.WorkManager +import com.example.despensapp.ui.navigation.NavGraph import com.example.despensapp.ui.theme.DespensappTheme +import com.example.despensapp.worker.InventoryCheckWorker +import java.util.concurrent.TimeUnit class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() + + // Programar revisión de inventario cada 24 horas + val workRequest = PeriodicWorkRequestBuilder(24, TimeUnit.HOURS).build() + WorkManager.getInstance(this).enqueue(workRequest) + setContent { DespensappTheme { - Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> - Greeting( - name = "Android", - modifier = Modifier.padding(innerPadding) - ) - } + val navController = rememberNavController() + NavGraph(navController = navController) } } } } - -@Composable -fun Greeting(name: String, modifier: Modifier = Modifier) { - Text( - text = "Hello $name!", - modifier = modifier - ) -} - -@Preview(showBackground = true) -@Composable -fun GreetingPreview() { - DespensappTheme { - Greeting("Android") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/despensapp/data/api/OpenFoodFactsApi.kt b/app/src/main/java/com/example/despensapp/data/api/OpenFoodFactsApi.kt new file mode 100644 index 0000000..06ce688 --- /dev/null +++ b/app/src/main/java/com/example/despensapp/data/api/OpenFoodFactsApi.kt @@ -0,0 +1,12 @@ +package com.example.despensapp.data.api + +import com.example.despensapp.data.model.off.OFFProductResponse +import retrofit2.http.GET +import retrofit2.http.Path + +interface OpenFoodFactsApi { + @GET("api/v0/product/{barcode}.json") + suspend fun getProductByBarcode( + @Path("barcode") barcode: String + ): OFFProductResponse +} \ No newline at end of file diff --git a/app/src/main/java/com/example/despensapp/data/model/Product.kt b/app/src/main/java/com/example/despensapp/data/model/Product.kt new file mode 100644 index 0000000..f276570 --- /dev/null +++ b/app/src/main/java/com/example/despensapp/data/model/Product.kt @@ -0,0 +1,15 @@ +package com.example.despensapp.data.model + +data class Product( + val id: Int = 0, + val name: String, + val quantity: Int, + val minQuantity: Int, + val unit: String = "unidades", + val category: String = "General", + val imageUrl: String? = null, + val expirationDate: String? = null, + val createdAt: String? = null +) { + val isLowStock: Boolean get() = quantity <= minQuantity +} \ No newline at end of file diff --git a/app/src/main/java/com/example/despensapp/data/model/off/OFFProductResponse.kt b/app/src/main/java/com/example/despensapp/data/model/off/OFFProductResponse.kt new file mode 100644 index 0000000..ee68211 --- /dev/null +++ b/app/src/main/java/com/example/despensapp/data/model/off/OFFProductResponse.kt @@ -0,0 +1,19 @@ +package com.example.despensapp.data.model.off + +import com.google.gson.annotations.SerializedName + +data class OFFProductResponse( + val status: Int, + val code: String, + val product: OFFProduct? +) + +data class OFFProduct( + @SerializedName("product_name") val productName: String?, + @SerializedName("product_name_es") val productNameEs: String?, + val brands: String?, + val categories: String?, + @SerializedName("image_url") val imageUrl: String? +) { + val displayName: String get() = productNameEs ?: productName ?: "Producto desconocido" +} \ No newline at end of file diff --git a/app/src/main/java/com/example/despensapp/data/repository/PantryRepository.kt b/app/src/main/java/com/example/despensapp/data/repository/PantryRepository.kt new file mode 100644 index 0000000..3e492c1 --- /dev/null +++ b/app/src/main/java/com/example/despensapp/data/repository/PantryRepository.kt @@ -0,0 +1,204 @@ +package com.example.despensapp.data.repository + +import com.example.despensapp.data.api.OpenFoodFactsApi +import com.example.despensapp.data.model.Product +import com.example.despensapp.data.model.off.OFFProduct +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory +import java.sql.DriverManager +import java.sql.SQLException + +class PantryRepository { + private val dbUrl = "jdbc:mariadb://mariadb.peta9.com:3306/despensa_db" + private val dbUser = "despensa_dba" + private val dbPassword = "Pedro@110387" + + private val offApi = Retrofit.Builder() + .baseUrl("https://es.openfoodfacts.org/") + .addConverterFactory(GsonConverterFactory.create()) + .build() + .create(OpenFoodFactsApi::class.java) + + suspend fun getProductFromOFF(barcode: String): Result { + return try { + val response = offApi.getProductByBarcode(barcode) + if (response.status == 1) { + Result.success(response.product) + } else { + Result.failure(Exception("Producto no encontrado en Open Food Facts")) + } + } catch (e: Exception) { + Result.failure(e) + } + } + + suspend fun getAllProductsFromDb(): Result> { + return withContext(Dispatchers.IO) { + try { + Class.forName("org.mariadb.jdbc.Driver") + val connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword) + val sql = "SELECT * FROM productos" + val statement = connection.prepareStatement(sql) + val resultSet = statement.executeQuery() + + val products = mutableListOf() + while (resultSet.next()) { + products.add( + Product( + id = resultSet.getInt("id"), + name = resultSet.getString("nombre"), + quantity = resultSet.getInt("cantidad"), + minQuantity = resultSet.getInt("cantidad_minima"), + unit = resultSet.getString("unidad") ?: "unidades", + category = resultSet.getString("categoria"), + imageUrl = resultSet.getString("imagen_url"), + expirationDate = resultSet.getString("fecha_caducidad"), + createdAt = resultSet.getString("fecha_alta") + ) + ) + } + connection.close() + Result.success(products) + } catch (e: Exception) { + Result.failure(e) + } + } + } + + suspend fun updateProductQuantity(productId: Int, newQuantity: Int): Result { + return withContext(Dispatchers.IO) { + try { + Class.forName("org.mariadb.jdbc.Driver") + val connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword) + val sql = "UPDATE productos SET cantidad = ? WHERE id = ?" + val statement = connection.prepareStatement(sql) + statement.setInt(1, newQuantity) + statement.setInt(2, productId) + + val rowsUpdated = statement.executeUpdate() + connection.close() + Result.success(rowsUpdated > 0) + } catch (e: Exception) { + Result.failure(e) + } + } + } + + suspend fun updateProductFull( + productId: Int, + nombre: String, + cantidad: Int, + minCantidad: Int, + unidad: String, + categoria: String, + fechaCaducidad: String? + ): Result { + return withContext(Dispatchers.IO) { + try { + Class.forName("org.mariadb.jdbc.Driver") + val connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword) + val sql = "UPDATE productos SET nombre = ?, cantidad = ?, cantidad_minima = ?, unidad = ?, categoria = ?, fecha_caducidad = ? WHERE id = ?" + val statement = connection.prepareStatement(sql) + statement.setString(1, nombre) + statement.setInt(2, cantidad) + statement.setInt(3, minCantidad) + statement.setString(4, unidad) + statement.setString(5, categoria) + statement.setString(6, fechaCaducidad) + statement.setInt(7, productId) + + val rowsUpdated = statement.executeUpdate() + connection.close() + Result.success(rowsUpdated > 0) + } catch (e: Exception) { + Result.failure(e) + } + } + } + + suspend fun addProduct( + barcode: String, + nombre: String, + cantidad: Int, + minCantidad: Int, + unidad: String, + categoria: String, + imageUrl: String?, + fechaCaducidad: String? + ): Result { + return withContext(Dispatchers.IO) { + try { + Class.forName("org.mariadb.jdbc.Driver") + val connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword) + val sql = "INSERT INTO productos (barcode, nombre, cantidad, cantidad_minima, unidad, categoria, imagen_url, fecha_caducidad) VALUES (?, ?, ?, ?, ?, ?, ?, ?)" + val statement = connection.prepareStatement(sql) + statement.setString(1, barcode) + statement.setString(2, nombre) + statement.setInt(3, cantidad) + statement.setInt(4, minCantidad) + statement.setString(5, unidad) + statement.setString(6, categoria) + statement.setString(7, imageUrl) + statement.setString(8, fechaCaducidad) + + val rowsInserted = statement.executeUpdate() + connection.close() + Result.success(rowsInserted > 0) + } catch (e: Exception) { + Result.failure(e) + } + } + } + + suspend fun deleteProduct(productId: Int): Result { + return withContext(Dispatchers.IO) { + try { + Class.forName("org.mariadb.jdbc.Driver") + val connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword) + val sql = "DELETE FROM productos WHERE id = ?" + val statement = connection.prepareStatement(sql) + statement.setInt(1, productId) + + val rowsDeleted = statement.executeUpdate() + connection.close() + Result.success(rowsDeleted > 0) + } catch (e: Exception) { + Result.failure(e) + } + } + } + + suspend fun getProductById(productId: Int): Result { + return withContext(Dispatchers.IO) { + try { + Class.forName("org.mariadb.jdbc.Driver") + val connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword) + val sql = "SELECT * FROM productos WHERE id = ?" + val statement = connection.prepareStatement(sql) + statement.setInt(1, productId) + val resultSet = statement.executeQuery() + + var product: Product? = null + if (resultSet.next()) { + product = Product( + id = resultSet.getInt("id"), + name = resultSet.getString("nombre"), + quantity = resultSet.getInt("cantidad"), + minQuantity = resultSet.getInt("cantidad_minima"), + unit = resultSet.getString("unidad") ?: "unidades", + category = resultSet.getString("categoria"), + imageUrl = resultSet.getString("imagen_url"), + expirationDate = resultSet.getString("fecha_caducidad"), + createdAt = resultSet.getString("fecha_alta") + ) + } + connection.close() + Result.success(product) + } catch (e: Exception) { + Result.failure(e) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/despensapp/data/repository/UserRepository.kt b/app/src/main/java/com/example/despensapp/data/repository/UserRepository.kt new file mode 100644 index 0000000..366b192 --- /dev/null +++ b/app/src/main/java/com/example/despensapp/data/repository/UserRepository.kt @@ -0,0 +1,66 @@ +package com.example.despensapp.data.repository + +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import java.sql.DriverManager +import java.sql.SQLException + +class UserRepository { + private val url = "jdbc:mariadb://mariadb.peta9.com:3306/despensa_db" + private val user = "despensa_dba" + private val password = "Pedro@110387" + + suspend fun registerUser(nombre: String, email: String, contrasena: String): Result { + return withContext(Dispatchers.IO) { + try { + // Forzar carga del driver + Class.forName("org.mariadb.jdbc.Driver") + + val connection = DriverManager.getConnection(url, user, password) + val sql = "INSERT INTO usuarios (nombre_completo, email, contrasena) VALUES (?, ?, ?)" + val statement = connection.prepareStatement(sql) + statement.setString(1, nombre) + statement.setString(2, email) + statement.setString(3, contrasena) + + val rowsInserted = statement.executeUpdate() + connection.close() + + if (rowsInserted > 0) { + Result.success(true) + } else { + Result.failure(Exception("No se pudo insertar el usuario")) + } + } catch (e: SQLException) { + Result.failure(e) + } catch (e: Exception) { + Result.failure(e) + } + } + } + + suspend fun loginUser(email: String, contrasena: String): Result { + return withContext(Dispatchers.IO) { + try { + Class.forName("org.mariadb.jdbc.Driver") + val connection = DriverManager.getConnection(url, user, password) + val sql = "SELECT * FROM usuarios WHERE email = ? AND contrasena = ?" + val statement = connection.prepareStatement(sql) + statement.setString(1, email) + statement.setString(2, contrasena) + + val resultSet = statement.executeQuery() + val exists = resultSet.next() + connection.close() + + if (exists) { + Result.success(true) + } else { + Result.failure(Exception("Credenciales incorrectas")) + } + } catch (e: Exception) { + Result.failure(e) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/despensapp/ui/navigation/NavGraph.kt b/app/src/main/java/com/example/despensapp/ui/navigation/NavGraph.kt new file mode 100644 index 0000000..a71ef9a --- /dev/null +++ b/app/src/main/java/com/example/despensapp/ui/navigation/NavGraph.kt @@ -0,0 +1,86 @@ +package com.example.despensapp.ui.navigation + +import androidx.compose.runtime.Composable +import androidx.navigation.NavHostController +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import com.example.despensapp.ui.screens.LoginScreen +import com.example.despensapp.ui.screens.PantryScreen +import com.example.despensapp.ui.screens.RegisterScreen +import com.example.despensapp.ui.screens.AddProductScreen +import com.example.despensapp.ui.screens.ProductDetailScreen +import androidx.navigation.NavType +import androidx.navigation.navArgument + +sealed class Screen(val route: String) { + object Login : Screen("login") + object Register : Screen("register") + object Pantry : Screen("pantry") + object AddProduct : Screen("add_product") + object ProductDetail : Screen("product_detail/{productId}") { + fun createRoute(productId: Int) = "product_detail/$productId" + } +} + +@Composable +fun NavGraph(navController: NavHostController) { + NavHost( + navController = navController, + startDestination = Screen.Login.route + ) { + composable(Screen.Login.route) { + LoginScreen( + onLoginSuccess = { + navController.navigate(Screen.Pantry.route) { + popUpTo(Screen.Login.route) { inclusive = true } + } + }, + onNavigateToRegister = { + navController.navigate(Screen.Register.route) + } + ) + } + composable(Screen.Register.route) { + RegisterScreen( + onRegisterSuccess = { + navController.navigate(Screen.Pantry.route) { + popUpTo(Screen.Login.route) { inclusive = true } + } + }, + onNavigateToLogin = { + navController.popBackStack() + } + ) + } + composable(Screen.Pantry.route) { + PantryScreen( + onNavigateToAdd = { + navController.navigate(Screen.AddProduct.route) + }, + onNavigateToDetail = { productId -> + navController.navigate(Screen.ProductDetail.createRoute(productId)) + }, + onLogout = { + navController.navigate(Screen.Login.route) { + popUpTo(Screen.Pantry.route) { inclusive = true } + } + } + ) + } + composable(Screen.AddProduct.route) { + AddProductScreen(onProductAdded = { + navController.popBackStack() + }) + } + composable( + route = Screen.ProductDetail.route, + arguments = listOf(navArgument("productId") { type = NavType.IntType }) + ) { backStackEntry -> + val productId = backStackEntry.arguments?.getInt("productId") ?: 0 + ProductDetailScreen( + productId = productId, + onBack = { navController.popBackStack() } + ) + } + } +} diff --git a/app/src/main/java/com/example/despensapp/ui/screens/AddProductScreen.kt b/app/src/main/java/com/example/despensapp/ui/screens/AddProductScreen.kt new file mode 100644 index 0000000..f5aed07 --- /dev/null +++ b/app/src/main/java/com/example/despensapp/ui/screens/AddProductScreen.kt @@ -0,0 +1,308 @@ +package com.example.despensapp.ui.screens + +import android.Manifest +import android.app.DatePickerDialog +import android.content.Context +import android.content.pm.PackageManager +import android.os.Build +import android.os.VibrationEffect +import android.os.Vibrator +import android.os.VibratorManager +import android.util.Log +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.camera.core.* +import androidx.camera.lifecycle.ProcessCameraProvider +import androidx.camera.view.PreviewView +import androidx.compose.foundation.layout.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.* +import androidx.compose.material3.* +import androidx.compose.runtime.* +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.LocalLifecycleOwner +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.compose.ui.viewinterop.AndroidView +import androidx.core.content.ContextCompat +import com.example.despensapp.R +import com.example.despensapp.data.repository.PantryRepository +import com.example.despensapp.util.DateUtils +import com.google.mlkit.vision.barcode.BarcodeScanning +import com.google.mlkit.vision.common.InputImage +import kotlinx.coroutines.launch +import java.util.* + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun AddProductScreen(onProductAdded: () -> Unit) { + val context = LocalContext.current + val scope = rememberCoroutineScope() + val repository = remember { PantryRepository() } + + var hasCameraPermission by remember { + mutableStateOf( + ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED + ) + } + + val launcher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.RequestPermission(), + onResult = { granted -> hasCameraPermission = granted } + ) + + LaunchedEffect(Unit) { + if (!hasCameraPermission) { + launcher.launch(Manifest.permission.CAMERA) + } + } + + var scannedBarcode by remember { mutableStateOf(null) } + var productName by remember { mutableStateOf("") } + var productCategory by remember { mutableStateOf("General") } + var productImageUrl by remember { mutableStateOf(null) } + var expirationDate by remember { mutableStateOf(null) } + var quantity by remember { mutableStateOf(1) } + var minQuantity by remember { mutableStateOf(1) } + var selectedUnit by remember { mutableStateOf("unidades") } + var isLoading by remember { mutableStateOf(false) } + + var torchEnabled by remember { mutableStateOf(false) } + + val units = listOf("unidades", "kg", "gr", "l", "ml", "paquetes") + var unitsExpanded by remember { mutableStateOf(false) } + + val calendar = Calendar.getInstance() + val datePickerDialog = DatePickerDialog( + context, + { _, year, month, dayOfMonth -> + expirationDate = "$year-${month + 1}-$dayOfMonth" + }, + calendar.get(Calendar.YEAR), + calendar.get(Calendar.MONTH), + calendar.get(Calendar.DAY_OF_MONTH) + ) + + fun triggerVibration() { + val vibrator = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + val vibratorManager = context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager + vibratorManager.defaultVibrator + } else { + @Suppress("DEPRECATION") + context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + vibrator.vibrate(VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE)) + } else { + @Suppress("DEPRECATION") + vibrator.vibrate(100) + } + } + + Column(modifier = Modifier.fillMaxSize().padding(16.dp)) { + if (hasCameraPermission && scannedBarcode == null) { + Box(modifier = Modifier.fillMaxWidth().height(300.dp)) { + BarcodeScannerView( + torchEnabled = torchEnabled, + onBarcodeScanned = { barcode -> + triggerVibration() + scannedBarcode = barcode + scope.launch { + isLoading = true + repository.getProductFromOFF(barcode).onSuccess { offProduct -> + productName = offProduct?.displayName ?: "Desconocido" + productCategory = offProduct?.categories?.split(",")?.firstOrNull() ?: "General" + productImageUrl = offProduct?.imageUrl + isLoading = false + }.onFailure { + isLoading = false + } + } + } + ) + + // Botón de Linterna + IconButton( + onClick = { torchEnabled = !torchEnabled }, + modifier = Modifier.align(Alignment.TopEnd).padding(8.dp), + colors = IconButtonDefaults.iconButtonColors(containerColor = Color.Black.copy(alpha = 0.5f)) + ) { + Icon( + if (torchEnabled) Icons.Default.FlashOn else Icons.Default.FlashOff, + contentDescription = stringResource(if (torchEnabled) R.string.flash_off else R.string.flash_on), + tint = if (torchEnabled) Color.Yellow else Color.White + ) + } + } + } + + Spacer(modifier = Modifier.height(16.dp)) + + if (scannedBarcode != null) { + Text(stringResource(R.string.add_product_barcode_detected, scannedBarcode!!), style = MaterialTheme.typography.titleMedium) + + OutlinedTextField( + value = productName, + onValueChange = { productName = it }, + label = { Text(stringResource(R.string.add_product_name_label)) }, + modifier = Modifier.fillMaxWidth() + ) + + Spacer(modifier = Modifier.height(8.dp)) + + // Selector de Unidad + ExposedDropdownMenuBox( + expanded = unitsExpanded, + onExpandedChange = { unitsExpanded = !unitsExpanded }, + modifier = Modifier.fillMaxWidth() + ) { + OutlinedTextField( + value = selectedUnit, + onValueChange = {}, + readOnly = true, + label = { Text(stringResource(R.string.add_product_unit_label)) }, + trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = unitsExpanded) }, + modifier = Modifier.menuAnchor().fillMaxWidth(), + colors = ExposedDropdownMenuDefaults.outlinedTextFieldColors() + ) + ExposedDropdownMenu( + expanded = unitsExpanded, + onDismissRequest = { unitsExpanded = false } + ) { + units.forEach { unit -> + DropdownMenuItem( + text = { Text(unit) }, + onClick = { + selectedUnit = unit + unitsExpanded = false + } + ) + } + } + } + + Spacer(modifier = Modifier.height(8.dp)) + + // Selector de Fecha + OutlinedButton( + onClick = { datePickerDialog.show() }, + modifier = Modifier.fillMaxWidth() + ) { + Icon(Icons.Default.CalendarToday, contentDescription = null) + Spacer(modifier = Modifier.width(8.dp)) + Text(if (expirationDate == null) stringResource(R.string.add_product_expiry_button_empty) + else stringResource(R.string.add_product_expiry_button_date, DateUtils.formatToDisplay(expirationDate) ?: "")) + } + + Spacer(modifier = Modifier.height(8.dp)) + + Row(verticalAlignment = Alignment.CenterVertically) { + Text(stringResource(R.string.add_product_quantity_label, quantity), modifier = Modifier.weight(1f)) + IconButton(onClick = { if (quantity > 1) quantity-- }) { + Icon(Icons.Default.Remove, stringResource(R.string.add_product_less)) + } + IconButton(onClick = { quantity++ }) { + Icon(Icons.Default.Add, stringResource(R.string.add_product_more)) + } + } + + if (isLoading) { + CircularProgressIndicator(modifier = Modifier.align(Alignment.CenterHorizontally)) + } else { + Button( + onClick = { + scope.launch { + isLoading = true + val success = repository.addProduct( + barcode = scannedBarcode!!, + nombre = productName, + cantidad = quantity, + minCantidad = minQuantity, + unidad = selectedUnit, + categoria = productCategory, + imageUrl = productImageUrl, + fechaCaducidad = expirationDate + ) + isLoading = false + if (success.isSuccess) onProductAdded() + } + }, + modifier = Modifier.fillMaxWidth().padding(top = 16.dp) + ) { + Text(stringResource(R.string.add_product_save_button)) + } + } + + TextButton(onClick = { scannedBarcode = null }, modifier = Modifier.align(Alignment.CenterHorizontally)) { + Text(stringResource(R.string.add_product_scan_another)) + } + } else if (!hasCameraPermission) { + Text(stringResource(R.string.add_product_camera_permission_required)) + } + } +} + +@Composable +fun BarcodeScannerView(torchEnabled: Boolean, onBarcodeScanned: (String) -> Unit) { + val context = LocalContext.current + val lifecycleOwner = LocalLifecycleOwner.current + val cameraProviderFuture = remember { ProcessCameraProvider.getInstance(context) } + + var camera by remember { mutableStateOf(null) } + + LaunchedEffect(torchEnabled) { + camera?.cameraControl?.enableTorch(torchEnabled) + } + + AndroidView( + factory = { ctx -> + val previewView = PreviewView(ctx) + val executor = ContextCompat.getMainExecutor(ctx) + cameraProviderFuture.addListener({ + val cameraProvider = cameraProviderFuture.get() + val preview = Preview.Builder().build().also { + it.setSurfaceProvider(previewView.surfaceProvider) + } + + val imageAnalysis = ImageAnalysis.Builder() + .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) + .build() + + val scanner = BarcodeScanning.getClient() + + @androidx.camera.core.ExperimentalGetImage + imageAnalysis.setAnalyzer(executor) { imageProxy -> + val mediaImage = imageProxy.image + if (mediaImage != null) { + val image = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees) + scanner.process(image) + .addOnSuccessListener { barcodes -> + for (barcode in barcodes) { + barcode.rawValue?.let { + onBarcodeScanned(it) + cameraProvider.unbindAll() // Parar cámara al detectar + } + } + } + .addOnCompleteListener { imageProxy.close() } + } + } + + val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA + try { + cameraProvider.unbindAll() + camera = cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview, imageAnalysis) + camera?.cameraControl?.enableTorch(torchEnabled) + } catch (e: Exception) { + Log.e("Camera", "Use case binding failed", e) + } + }, executor) + previewView + }, + modifier = Modifier.fillMaxSize() + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/example/despensapp/ui/screens/LoginScreen.kt b/app/src/main/java/com/example/despensapp/ui/screens/LoginScreen.kt new file mode 100644 index 0000000..a3d9d5a --- /dev/null +++ b/app/src/main/java/com/example/despensapp/ui/screens/LoginScreen.kt @@ -0,0 +1,111 @@ +package com.example.despensapp.ui.screens + +import androidx.compose.foundation.layout.* +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.input.PasswordVisualTransformation +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import com.example.despensapp.R +import com.example.despensapp.data.repository.UserRepository +import com.example.despensapp.ui.theme.DespensappTheme +import kotlinx.coroutines.launch + +@Composable +fun LoginScreen(onLoginSuccess: () -> Unit, onNavigateToRegister: () -> Unit) { + val context = LocalContext.current + val repository = remember { UserRepository() } + val scope = rememberCoroutineScope() + + var email by remember { mutableStateOf("") } + var password by remember { mutableStateOf("") } + + var isLoading by remember { mutableStateOf(false) } + var errorMessage by remember { mutableStateOf(null) } + + Column( + modifier = Modifier + .fillMaxSize() + .padding(24.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Text( + text = stringResource(R.string.login_welcome), + fontSize = 24.sp, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.primary + ) + + Spacer(modifier = Modifier.height(32.dp)) + + if (errorMessage != null) { + Text(text = errorMessage!!, color = MaterialTheme.colorScheme.error) + Spacer(modifier = Modifier.height(16.dp)) + } + + OutlinedTextField( + value = email, + onValueChange = { email = it }, + label = { Text(stringResource(R.string.login_email_label)) }, + modifier = Modifier.fillMaxWidth(), + enabled = !isLoading + ) + + Spacer(modifier = Modifier.height(16.dp)) + + OutlinedTextField( + value = password, + onValueChange = { password = it }, + label = { Text(stringResource(R.string.login_password_label)) }, + visualTransformation = PasswordVisualTransformation(), + modifier = Modifier.fillMaxWidth(), + enabled = !isLoading + ) + + Spacer(modifier = Modifier.height(24.dp)) + + if (isLoading) { + CircularProgressIndicator() + } else { + Button( + onClick = { + if (email.isNotEmpty() && password.isNotEmpty()) { + isLoading = true + errorMessage = null + scope.launch { + val result = repository.loginUser(email, password) + isLoading = false + result.onSuccess { onLoginSuccess() } + .onFailure { errorMessage = context.getString(R.string.login_error_generic, it.message ?: "") } + } + } else { + errorMessage = context.getString(R.string.login_error_empty) + } + }, + modifier = Modifier.fillMaxWidth() + ) { + Text(stringResource(R.string.login_button)) + } + } + + TextButton(onClick = onNavigateToRegister, enabled = !isLoading) { + Text(stringResource(R.string.login_no_account)) + } + } +} + +@Preview(showBackground = true) +@Composable +fun LoginPreview() { + DespensappTheme { + LoginScreen(onLoginSuccess = {}, onNavigateToRegister = {}) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/despensapp/ui/screens/PantryScreen.kt b/app/src/main/java/com/example/despensapp/ui/screens/PantryScreen.kt new file mode 100644 index 0000000..603883c --- /dev/null +++ b/app/src/main/java/com/example/despensapp/ui/screens/PantryScreen.kt @@ -0,0 +1,486 @@ +package com.example.despensapp.ui.screens + +import android.content.Intent +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.Logout +import androidx.compose.material.icons.filled.* +import androidx.compose.material3.* +import androidx.compose.runtime.* +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.unit.dp +import androidx.compose.ui.unit.sp +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import com.example.despensapp.R +import coil.compose.AsyncImage +import com.example.despensapp.ui.theme.DespensappTheme +import com.example.despensapp.data.model.Product +import com.example.despensapp.data.repository.PantryRepository +import com.example.despensapp.util.CategoryMapper +import com.example.despensapp.util.DateUtils +import kotlinx.coroutines.launch +import java.time.LocalDate +import java.time.format.DateTimeParseException +import java.time.temporal.ChronoUnit + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun PantryScreen( + onNavigateToAdd: () -> Unit, + onNavigateToDetail: (Int) -> Unit, + onLogout: () -> Unit +) { + val context = LocalContext.current + val repository = remember { PantryRepository() } + val scope = rememberCoroutineScope() + val snackbarHostState = remember { SnackbarHostState() } + + var allProducts by remember { mutableStateOf>(emptyList()) } + var isLoading by remember { mutableStateOf(true) } + var errorMessage by remember { mutableStateOf(null) } + + // Filters and Search + var searchQuery by remember { mutableStateOf("") } + var selectedCategory by remember { mutableStateOf(null) } + var showOnlyNearExpiry by remember { mutableStateOf(false) } + var showShoppingList by remember { mutableStateOf(false) } + + // Cargar productos al iniciar + LaunchedEffect(Unit) { + val result = repository.getAllProductsFromDb() + result.onSuccess { + allProducts = it + isLoading = false + }.onFailure { + errorMessage = context.getString(R.string.login_error_generic, it.message ?: "") + isLoading = false + } + } + + val categories = remember(allProducts) { + allProducts.map { it.category }.distinct().sorted() + } + + val filteredProducts = allProducts.filter { product -> + val matchesSearch = product.name.contains(searchQuery, ignoreCase = true) + val matchesCategory = selectedCategory == null || product.category == selectedCategory + val matchesExpiry = !showOnlyNearExpiry || isNearExpiry(product.expirationDate) + val matchesLowStock = !showShoppingList || product.isLowStock + + matchesSearch && matchesCategory && matchesExpiry && matchesLowStock + } + + fun shareShoppingList() { + val lowStockProducts = allProducts.filter { it.isLowStock } + if (lowStockProducts.isEmpty()) { + scope.launch { snackbarHostState.showSnackbar(context.getString(R.string.pantry_empty_shopping_list)) } + return + } + + val listText = lowStockProducts.joinToString("\n") { "- ${it.name} ${it.minQuantity} ${it.unit}" } + val shareText = context.getString(R.string.shopping_list_message, listText) + + val intent = Intent(Intent.ACTION_SEND).apply { + type = "text/plain" + putExtra(Intent.EXTRA_TEXT, shareText) + } + context.startActivity(Intent.createChooser(intent, context.getString(R.string.share))) + } + + Scaffold( + topBar = { + TopAppBar( + title = { Text(if (showShoppingList) stringResource(R.string.shopping_list_title) else stringResource(R.string.pantry_title)) }, + actions = { + if (showShoppingList) { + IconButton(onClick = { shareShoppingList() }) { + Icon(Icons.Default.Share, contentDescription = stringResource(R.string.share)) + } + } + IconButton(onClick = { showShoppingList = !showShoppingList }) { + Icon( + if (showShoppingList) Icons.Default.Inventory else Icons.Default.ShoppingCart, + contentDescription = "Modo Lista Compra", + tint = if (showShoppingList) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface + ) + } + IconButton(onClick = onLogout) { + Icon(Icons.AutoMirrored.Filled.Logout, contentDescription = stringResource(R.string.logout)) + } + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = MaterialTheme.colorScheme.primaryContainer, + titleContentColor = MaterialTheme.colorScheme.onPrimaryContainer + ) + ) + }, + snackbarHost = { SnackbarHost(snackbarHostState) }, + floatingActionButton = { + FloatingActionButton(onClick = onNavigateToAdd) { + Icon(Icons.Default.Add, contentDescription = stringResource(R.string.add)) + } + } + ) { innerPadding -> + Column(modifier = Modifier.padding(innerPadding).fillMaxSize()) { + // Search Bar + OutlinedTextField( + value = searchQuery, + onValueChange = { searchQuery = it }, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 8.dp), + placeholder = { Text(stringResource(R.string.pantry_search_placeholder)) }, + leadingIcon = { Icon(Icons.Default.Search, contentDescription = null) }, + trailingIcon = { + Row(verticalAlignment = Alignment.CenterVertically) { + if (searchQuery.isNotEmpty()) { + IconButton(onClick = { searchQuery = "" }) { + Icon(Icons.Default.Close, contentDescription = stringResource(R.string.pantry_search_clear)) + } + } + IconButton(onClick = onNavigateToAdd) { + Icon(Icons.Default.QrCodeScanner, contentDescription = stringResource(R.string.pantry_search_scan)) + } + } + }, + singleLine = true, + shape = MaterialTheme.shapes.medium + ) + + // Filtros Rápidos + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + FilterChip( + selected = showOnlyNearExpiry, + onClick = { showOnlyNearExpiry = !showOnlyNearExpiry }, + label = { Text(stringResource(R.string.pantry_filter_expiry)) }, + leadingIcon = if (showOnlyNearExpiry) { + { Icon(Icons.Default.Warning, contentDescription = null, modifier = Modifier.size(18.dp)) } + } else null + ) + + FilterChip( + selected = showShoppingList, + onClick = { showShoppingList = !showShoppingList }, + label = { Text(stringResource(R.string.pantry_filter_low_stock)) }, + leadingIcon = if (showShoppingList) { + { Icon(Icons.Default.PriorityHigh, contentDescription = null, modifier = Modifier.size(18.dp)) } + } else null + ) + } + + // Categorías Scrollable + ScrollableTabRow( + selectedTabIndex = if (selectedCategory == null) 0 else categories.indexOf(selectedCategory) + 1, + edgePadding = 16.dp, + divider = {}, + containerColor = Color.Transparent, + indicator = {} + ) { + Tab( + selected = selectedCategory == null, + onClick = { selectedCategory = null }, + text = { Text(stringResource(R.string.pantry_filter_all)) } + ) + categories.forEach { category -> + Tab( + selected = selectedCategory == category, + onClick = { selectedCategory = category }, + text = { Text(category) } + ) + } + } + + Box(modifier = Modifier.weight(1f)) { + if (isLoading) { + CircularProgressIndicator(modifier = Modifier.align(Alignment.Center)) + } else if (errorMessage != null) { + Text( + text = errorMessage!!, + color = MaterialTheme.colorScheme.error, + modifier = Modifier.padding(16.dp).align(Alignment.Center) + ) + } else if (filteredProducts.isEmpty()) { + val emptyText = when { + showShoppingList -> stringResource(R.string.pantry_empty_shopping_list) + showOnlyNearExpiry -> stringResource(R.string.pantry_empty_expiry) + searchQuery.isNotEmpty() -> stringResource(R.string.pantry_empty_search, searchQuery) + else -> stringResource(R.string.pantry_empty_general) + } + Text( + text = emptyText, + modifier = Modifier.align(Alignment.Center), + color = Color.Gray + ) + } else { + LazyColumn( + contentPadding = PaddingValues(16.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + items(filteredProducts, key = { it.id }) { product -> + SwipeToDeleteWrapper( + onDismiss = { + scope.launch { + val result = repository.deleteProduct(product.id) + if (result.isSuccess) { + allProducts = allProducts.filter { it.id != product.id } + snackbarHostState.showSnackbar(context.getString(R.string.pantry_product_deleted, product.name)) + } else { + snackbarHostState.showSnackbar(context.getString(R.string.pantry_delete_error)) + } + } + } + ) { + ProductItem( + product = product, + onItemClick = { onNavigateToDetail(product.id) }, + onQuantityChange = { newQty -> + scope.launch { + val success = repository.updateProductQuantity(product.id, newQty) + if (success.isSuccess) { + allProducts = allProducts.map { + if (it.id == product.id) it.copy(quantity = newQty) else it + } + } + } + } + ) + } + } + } + } + } + } + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun SwipeToDeleteWrapper(onDismiss: () -> Unit, content: @Composable () -> Unit) { + val dismissState = rememberSwipeToDismissBoxState( + confirmValueChange = { + if (it == SwipeToDismissBoxValue.EndToStart) { + onDismiss() + true + } else { + false + } + } + ) + + SwipeToDismissBox( + state = dismissState, + backgroundContent = { + val color = when (dismissState.targetValue) { + SwipeToDismissBoxValue.EndToStart -> MaterialTheme.colorScheme.errorContainer + else -> Color.Transparent + } + Box( + modifier = Modifier + .fillMaxSize() + .background(color, MaterialTheme.shapes.medium) + .padding(horizontal = 20.dp), + contentAlignment = Alignment.CenterEnd + ) { + Icon( + Icons.Default.Delete, + contentDescription = stringResource(R.string.delete), + tint = if (dismissState.targetValue == SwipeToDismissBoxValue.EndToStart) + MaterialTheme.colorScheme.error else Color.LightGray + ) + } + }, + enableDismissFromStartToEnd = false, + content = { content() } + ) +} + +fun isNearExpiry(dateStr: String?): Boolean { + if (dateStr == null) return false + return try { + val expiryDate = LocalDate.parse(dateStr) + val today = LocalDate.now() + val daysUntil = ChronoUnit.DAYS.between(today, expiryDate) + daysUntil <= 7 // Incluye caducados (negativos) y próximos (0-7 días) + } catch (e: DateTimeParseException) { + false + } +} + +@Composable +fun ProductItem(product: Product, onItemClick: () -> Unit, onQuantityChange: (Int) -> Unit) { + Card( + modifier = Modifier + .fillMaxWidth() + .clickable(onClick = onItemClick), + elevation = CardDefaults.cardElevation(defaultElevation = 2.dp) + ) { + Row( + modifier = Modifier.padding(16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Box(modifier = Modifier.size(64.dp)) { + AsyncImage( + model = product.imageUrl, + contentDescription = product.name, + modifier = Modifier + .fillMaxSize() + .background(Color.White, MaterialTheme.shapes.small) + .padding(4.dp), + error = null + ) + + // Icono de Categoría Superpuesto + Surface( + modifier = Modifier.align(Alignment.BottomEnd).offset(x = 4.dp, y = 4.dp), + shape = MaterialTheme.shapes.extraSmall, + color = MaterialTheme.colorScheme.primaryContainer, + tonalElevation = 4.dp + ) { + Icon( + CategoryMapper.getIconForCategory(product.category), + contentDescription = null, + modifier = Modifier.size(16.dp).padding(2.dp), + tint = MaterialTheme.colorScheme.onPrimaryContainer + ) + } + } + + Spacer(modifier = Modifier.width(16.dp)) + + Column(modifier = Modifier.weight(1f)) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Column(modifier = Modifier.weight(1f)) { + Text( + text = product.name, + fontSize = 18.sp, + fontWeight = FontWeight.Bold + ) + Text( + text = product.category, + fontSize = 14.sp, + color = Color.Gray + ) + + // Información de Fechas + Column { + if (product.expirationDate != null) { + val expiryDate = try { LocalDate.parse(product.expirationDate) } catch (e: Exception) { null } + val today = LocalDate.now() + val isExpired = expiryDate?.isBefore(today) == true + val nearExpiry = isNearExpiry(product.expirationDate) + + Row(verticalAlignment = Alignment.CenterVertically) { + Icon( + Icons.Default.CalendarToday, + contentDescription = null, + modifier = Modifier.size(12.dp), + tint = if (nearExpiry) MaterialTheme.colorScheme.error else Color.Gray + ) + Spacer(modifier = Modifier.width(4.dp)) + Text( + text = if (isExpired) stringResource(R.string.pantry_expiry_expired, DateUtils.formatToDisplay(product.expirationDate) ?: "") + else stringResource(R.string.pantry_expiry_date, DateUtils.formatToDisplay(product.expirationDate) ?: ""), + fontSize = 12.sp, + color = if (nearExpiry) MaterialTheme.colorScheme.error else Color.Gray, + fontWeight = if (nearExpiry) FontWeight.Bold else FontWeight.Normal + ) + } + } + + if (product.createdAt != null) { + Row(verticalAlignment = Alignment.CenterVertically) { + Icon( + Icons.Default.History, + contentDescription = null, + modifier = Modifier.size(12.dp), + tint = Color.Gray + ) + Spacer(modifier = Modifier.width(4.dp)) + Text( + text = stringResource(R.string.pantry_added_date, DateUtils.formatToDisplay(product.createdAt) ?: ""), + fontSize = 11.sp, + color = Color.Gray + ) + } + } + } + } + + if (product.isLowStock) { + Icon( + imageVector = Icons.Default.Warning, + contentDescription = stringResource(R.string.pantry_low_stock_warning), + tint = MaterialTheme.colorScheme.error, + modifier = Modifier.size(24.dp) + ) + } + } + + Spacer(modifier = Modifier.height(8.dp)) + + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Surface( + shape = MaterialTheme.shapes.medium, + color = if (product.isLowStock) MaterialTheme.colorScheme.errorContainer + else MaterialTheme.colorScheme.secondaryContainer, + contentColor = if (product.isLowStock) MaterialTheme.colorScheme.onErrorContainer + else MaterialTheme.colorScheme.onSecondaryContainer + ) { + Text( + text = stringResource(R.string.pantry_units_label, product.quantity, product.unit), + modifier = Modifier.padding(horizontal = 8.dp, vertical = 4.dp), + style = MaterialTheme.typography.bodyMedium + ) + } + + Row { + FilledTonalIconButton( + onClick = { if (product.quantity > 0) onQuantityChange(product.quantity - 1) }, + modifier = Modifier.size(32.dp) + ) { + Icon(Icons.Default.Remove, contentDescription = stringResource(R.string.add_product_less), modifier = Modifier.size(18.dp)) + } + Spacer(modifier = Modifier.width(8.dp)) + FilledIconButton( + onClick = { onQuantityChange(product.quantity + 1) }, + modifier = Modifier.size(32.dp) + ) { + Icon(Icons.Default.Add, contentDescription = stringResource(R.string.add_product_more), modifier = Modifier.size(18.dp)) + } + } + } + } + } + } +} + +@Preview(showBackground = true) +@Composable +fun PantryScreenPreview() { + DespensappTheme { + PantryScreen(onNavigateToAdd = {}, onNavigateToDetail = {}, onLogout = {}) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/despensapp/ui/screens/ProductDetailScreen.kt b/app/src/main/java/com/example/despensapp/ui/screens/ProductDetailScreen.kt new file mode 100644 index 0000000..e12b874 --- /dev/null +++ b/app/src/main/java/com/example/despensapp/ui/screens/ProductDetailScreen.kt @@ -0,0 +1,329 @@ +package com.example.despensapp.ui.screens + +import android.app.DatePickerDialog +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material.icons.filled.* +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import com.example.despensapp.R +import coil.compose.AsyncImage +import com.example.despensapp.data.model.Product +import com.example.despensapp.data.repository.PantryRepository +import com.example.despensapp.util.CategoryMapper +import com.example.despensapp.util.DateUtils +import kotlinx.coroutines.launch +import java.util.* + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun ProductDetailScreen(productId: Int, onBack: () -> Unit) { + val context = LocalContext.current + val scope = rememberCoroutineScope() + val repository = remember { PantryRepository() } + var product by remember { mutableStateOf(null) } + var isLoading by remember { mutableStateOf(true) } + var errorMessage by remember { mutableStateOf(null) } + + // Edit Mode State + var isEditing by remember { mutableStateOf(false) } + var editName by remember { mutableStateOf("") } + var editQuantity by remember { mutableStateOf(0) } + var editMinQuantity by remember { mutableStateOf(0) } + var editUnit by remember { mutableStateOf("") } + var editCategory by remember { mutableStateOf("") } + var editExpirationDate by remember { mutableStateOf(null) } + + val units = listOf("unidades", "kg", "gr", "l", "ml", "paquetes") + var unitsExpanded by remember { mutableStateOf(false) } + + val calendar = Calendar.getInstance() + val datePickerDialog = DatePickerDialog( + context, + { _, year, month, dayOfMonth -> + editExpirationDate = "$year-${month + 1}-$dayOfMonth" + }, + calendar.get(Calendar.YEAR), + calendar.get(Calendar.MONTH), + calendar.get(Calendar.DAY_OF_MONTH) + ) + + fun loadProduct() { + isLoading = true + scope.launch { + repository.getProductById(productId).onSuccess { + product = it + it?.let { p -> + editName = p.name + editQuantity = p.quantity + editMinQuantity = p.minQuantity + editUnit = p.unit + editCategory = p.category + editExpirationDate = p.expirationDate + } + isLoading = false + }.onFailure { + errorMessage = context.getString(R.string.login_error_generic, it.message ?: "") + isLoading = false + } + } + } + + LaunchedEffect(productId) { + loadProduct() + } + + Scaffold( + topBar = { + TopAppBar( + title = { Text(if (isEditing) stringResource(R.string.detail_edit_title) else stringResource(R.string.detail_title)) }, + navigationIcon = { + IconButton(onClick = if (isEditing) { { isEditing = false } } else onBack) { + Icon(if (isEditing) Icons.Default.Close else Icons.AutoMirrored.Filled.ArrowBack, + contentDescription = stringResource(if (isEditing) R.string.close else R.string.back)) + } + }, + actions = { + if (!isEditing) { + IconButton(onClick = { isEditing = true }) { + Icon(Icons.Default.Edit, contentDescription = stringResource(R.string.edit)) + } + } else { + IconButton(onClick = { + scope.launch { + isLoading = true + val result = repository.updateProductFull( + productId = productId, + nombre = editName, + cantidad = editQuantity, + minCantidad = editMinQuantity, + unidad = editUnit, + categoria = editCategory, + fechaCaducidad = editExpirationDate + ) + if (result.isSuccess) { + isEditing = false + loadProduct() + } else { + errorMessage = context.getString(R.string.error_db_connection) + isLoading = false + } + } + }) { + Icon(Icons.Default.Save, contentDescription = stringResource(R.string.save)) + } + } + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = MaterialTheme.colorScheme.primaryContainer, + titleContentColor = MaterialTheme.colorScheme.onPrimaryContainer + ) + ) + } + ) { innerPadding -> + Box(modifier = Modifier.padding(innerPadding).fillMaxSize()) { + if (isLoading) { + CircularProgressIndicator(modifier = Modifier.align(Alignment.Center)) + } else if (errorMessage != null) { + Text(text = errorMessage!!, color = MaterialTheme.colorScheme.error, modifier = Modifier.padding(16.dp)) + } else if (product != null) { + val p = product!! + Column( + modifier = Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + ) { + if (!isEditing) { + // Modo Vista + AsyncImage( + model = p.imageUrl, + contentDescription = p.name, + modifier = Modifier + .fillMaxWidth() + .height(250.dp) + .background(Color.White), + contentScale = ContentScale.Fit + ) + + Column(modifier = Modifier.padding(16.dp)) { + Row(verticalAlignment = Alignment.CenterVertically) { + Icon( + CategoryMapper.getIconForCategory(p.category), + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.size(32.dp) + ) + Spacer(modifier = Modifier.width(12.dp)) + Column { + Text(text = p.name, style = MaterialTheme.typography.headlineMedium, fontWeight = FontWeight.Bold) + Text(text = p.category, style = MaterialTheme.typography.titleMedium, color = Color.Gray) + } + } + + Spacer(modifier = Modifier.height(24.dp)) + + DetailRow(icon = Icons.Default.Inventory, label = stringResource(R.string.detail_stock_label), value = stringResource(R.string.pantry_units_label, p.quantity, p.unit)) + DetailRow(icon = Icons.Default.NotificationsActive, label = stringResource(R.string.detail_low_stock_alert_label), value = stringResource(R.string.detail_low_stock_alert_value, p.minQuantity, p.unit)) + + if (p.expirationDate != null) { + DetailRow(icon = Icons.Default.Event, label = stringResource(R.string.detail_expiry_label), value = DateUtils.formatToDisplay(p.expirationDate)!!) + } + + if (p.createdAt != null) { + DetailRow(icon = Icons.Default.AccessTime, label = stringResource(R.string.detail_added_label), value = DateUtils.formatToDisplay(p.createdAt)!!) + } + + Spacer(modifier = Modifier.height(32.dp)) + + Card( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceVariant) + ) { + Column(modifier = Modifier.padding(16.dp)) { + Row(verticalAlignment = Alignment.CenterVertically) { + Icon(Icons.Default.Info, contentDescription = null, tint = MaterialTheme.colorScheme.primary) + Spacer(modifier = Modifier.width(8.dp)) + Text(stringResource(R.string.detail_mariadb_info_title), fontWeight = FontWeight.Bold) + } + Spacer(modifier = Modifier.height(8.dp)) + Text(stringResource(R.string.detail_id_label, p.id), fontSize = 12.sp) + Text(stringResource(R.string.detail_server_label, "mariadb.peta9.com"), fontSize = 12.sp) + } + } + } + } else { + // Modo Edición + Column(modifier = Modifier.padding(16.dp)) { + OutlinedTextField( + value = editName, + onValueChange = { editName = it }, + label = { Text(stringResource(R.string.add_product_name_label)) }, + modifier = Modifier.fillMaxWidth() + ) + + Spacer(modifier = Modifier.height(8.dp)) + + OutlinedTextField( + value = editCategory, + onValueChange = { editCategory = it }, + label = { Text(stringResource(R.string.detail_category_label)) }, + modifier = Modifier.fillMaxWidth() + ) + + Spacer(modifier = Modifier.height(16.dp)) + + Row(verticalAlignment = Alignment.CenterVertically) { + Text(stringResource(R.string.add_product_quantity_label, editQuantity), modifier = Modifier.weight(1f)) + IconButton(onClick = { if (editQuantity > 0) editQuantity-- }) { + Icon(Icons.Default.Remove, stringResource(R.string.add_product_less)) + } + IconButton(onClick = { editQuantity++ }) { + Icon(Icons.Default.Add, stringResource(R.string.add_product_more)) + } + } + + Row(verticalAlignment = Alignment.CenterVertically) { + Text(stringResource(R.string.detail_min_quantity_label) + ": $editMinQuantity", modifier = Modifier.weight(1f)) + IconButton(onClick = { if (editMinQuantity > 0) editMinQuantity-- }) { + Icon(Icons.Default.Remove, null) + } + IconButton(onClick = { editMinQuantity++ }) { + Icon(Icons.Default.Add, null) + } + } + + Spacer(modifier = Modifier.height(8.dp)) + + ExposedDropdownMenuBox( + expanded = unitsExpanded, + onExpandedChange = { unitsExpanded = !unitsExpanded }, + modifier = Modifier.fillMaxWidth() + ) { + OutlinedTextField( + value = editUnit, + onValueChange = {}, + readOnly = true, + label = { Text(stringResource(R.string.add_product_unit_label)) }, + trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = unitsExpanded) }, + modifier = Modifier.menuAnchor().fillMaxWidth(), + colors = ExposedDropdownMenuDefaults.outlinedTextFieldColors() + ) + ExposedDropdownMenu( + expanded = unitsExpanded, + onDismissRequest = { unitsExpanded = false } + ) { + units.forEach { unit -> + DropdownMenuItem( + text = { Text(unit) }, + onClick = { + editUnit = unit + unitsExpanded = false + } + ) + } + } + } + + Spacer(modifier = Modifier.height(16.dp)) + + OutlinedButton( + onClick = { datePickerDialog.show() }, + modifier = Modifier.fillMaxWidth() + ) { + Icon(Icons.Default.CalendarToday, contentDescription = null) + Spacer(modifier = Modifier.width(8.dp)) + Text(if (editExpirationDate == null) stringResource(R.string.add_product_expiry_button_empty) + else stringResource(R.string.add_product_expiry_button_date, DateUtils.formatToDisplay(editExpirationDate) ?: "")) + } + + if (editExpirationDate != null) { + TextButton(onClick = { editExpirationDate = null }, modifier = Modifier.align(Alignment.CenterHorizontally)) { + Text(stringResource(R.string.cancel) + " " + stringResource(R.string.detail_expiry_label)) + } + } + } + } + } + } + } + } +} + +@Composable +fun DetailRow(icon: ImageVector, label: String, value: String) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 12.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Surface( + shape = MaterialTheme.shapes.small, + color = MaterialTheme.colorScheme.secondaryContainer, + modifier = Modifier.size(40.dp) + ) { + Box(contentAlignment = Alignment.Center) { + Icon(icon, contentDescription = null, modifier = Modifier.size(24.dp), tint = MaterialTheme.colorScheme.onSecondaryContainer) + } + } + Spacer(modifier = Modifier.width(16.dp)) + Column { + Text(text = label, style = MaterialTheme.typography.labelMedium, color = Color.Gray) + Text(text = value, style = MaterialTheme.typography.bodyLarge, fontWeight = FontWeight.Medium) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/despensapp/ui/screens/RegisterScreen.kt b/app/src/main/java/com/example/despensapp/ui/screens/RegisterScreen.kt new file mode 100644 index 0000000..af857d3 --- /dev/null +++ b/app/src/main/java/com/example/despensapp/ui/screens/RegisterScreen.kt @@ -0,0 +1,124 @@ +package com.example.despensapp.ui.screens + +import androidx.compose.foundation.layout.* +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.input.PasswordVisualTransformation +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import com.example.despensapp.R +import com.example.despensapp.data.repository.UserRepository +import kotlinx.coroutines.launch + +@Composable +fun RegisterScreen(onRegisterSuccess: () -> Unit, onNavigateToLogin: () -> Unit) { + val context = LocalContext.current + val repository = remember { UserRepository() } + val scope = rememberCoroutineScope() + + var name by remember { mutableStateOf("") } + var email by remember { mutableStateOf("") } + var password by remember { mutableStateOf("") } + var familyCode by remember { mutableStateOf("") } + + var isLoading by remember { mutableStateOf(false) } + var errorMessage by remember { mutableStateOf(null) } + + Column( + modifier = Modifier + .fillMaxSize() + .padding(24.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Text( + text = stringResource(R.string.register_title), + fontSize = 24.sp, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.primary + ) + + Spacer(modifier = Modifier.height(32.dp)) + + if (errorMessage != null) { + Text(text = errorMessage!!, color = MaterialTheme.colorScheme.error) + Spacer(modifier = Modifier.height(16.dp)) + } + + OutlinedTextField( + value = name, + onValueChange = { name = it }, + label = { Text(stringResource(R.string.register_name_label)) }, + modifier = Modifier.fillMaxWidth(), + enabled = !isLoading + ) + + Spacer(modifier = Modifier.height(16.dp)) + + OutlinedTextField( + value = email, + onValueChange = { email = it }, + label = { Text(stringResource(R.string.login_email_label)) }, + modifier = Modifier.fillMaxWidth(), + enabled = !isLoading + ) + + Spacer(modifier = Modifier.height(16.dp)) + + OutlinedTextField( + value = familyCode, + onValueChange = { familyCode = it }, + label = { Text(stringResource(R.string.register_family_code_label)) }, + placeholder = { Text(stringResource(R.string.register_family_code_placeholder)) }, + modifier = Modifier.fillMaxWidth(), + enabled = !isLoading + ) + + Spacer(modifier = Modifier.height(16.dp)) + + OutlinedTextField( + value = password, + onValueChange = { password = it }, + label = { Text(stringResource(R.string.login_password_label)) }, + visualTransformation = PasswordVisualTransformation(), + modifier = Modifier.fillMaxWidth(), + enabled = !isLoading + ) + + Spacer(modifier = Modifier.height(24.dp)) + + if (isLoading) { + CircularProgressIndicator() + } else { + Button( + onClick = { + if (name.isNotEmpty() && email.isNotEmpty() && password.isNotEmpty()) { + isLoading = true + errorMessage = null + scope.launch { + val result = repository.registerUser(name, email, password) + isLoading = false + result.onSuccess { onRegisterSuccess() } + .onFailure { errorMessage = context.getString(R.string.login_error_generic, it.message ?: "") } + } + } else { + errorMessage = context.getString(R.string.register_error_empty) + } + }, + modifier = Modifier.fillMaxWidth() + ) { + Text(stringResource(R.string.register_button)) + } + } + + TextButton(onClick = onNavigateToLogin, enabled = !isLoading) { + Text(stringResource(R.string.register_already_have_account)) + } + } +} diff --git a/app/src/main/java/com/example/despensapp/util/CategoryMapper.kt b/app/src/main/java/com/example/despensapp/util/CategoryMapper.kt new file mode 100644 index 0000000..2b6f38d --- /dev/null +++ b/app/src/main/java/com/example/despensapp/util/CategoryMapper.kt @@ -0,0 +1,24 @@ +package com.example.despensapp.util + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.* +import androidx.compose.ui.graphics.vector.ImageVector + +object CategoryMapper { + fun getIconForCategory(category: String): ImageVector { + return when (category.lowercase()) { + "lácteos", "lacteos", "queso", "leche" -> Icons.Default.Icecream + "carnicería", "carniceria", "carne", "embutidos" -> Icons.Default.LunchDining + "fresco", "fruta", "verdura" -> Icons.Default.Eco + "limpieza", "detergente", "baño" -> Icons.Default.CleaningServices + "despensa", "pasta", "arroz", "legumbres" -> Icons.Default.Inventory + "bebidas", "agua", "refrescos", "alcohol" -> Icons.Default.LocalDrink + "congelados" -> Icons.Default.AcUnit + "panadería", "panaderia", "pan", "bollería" -> Icons.Default.BakeryDining + "snacks", "patatas", "dulces" -> Icons.Default.Cookie + "higiene", "personal", "champú" -> Icons.Default.Face + "mascotas", "perro", "gato" -> Icons.Default.Pets + else -> Icons.Default.Category + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/despensapp/util/DateUtils.kt b/app/src/main/java/com/example/despensapp/util/DateUtils.kt new file mode 100644 index 0000000..4722a91 --- /dev/null +++ b/app/src/main/java/com/example/despensapp/util/DateUtils.kt @@ -0,0 +1,30 @@ +package com.example.despensapp.util + +import java.time.LocalDate +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter +import java.time.format.DateTimeParseException + +object DateUtils { + private val dbDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") + private val dbDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") + private val displayFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy") + + fun formatToDisplay(dateStr: String?): String? { + if (dateStr == null) return null + return try { + if (dateStr.length > 10) { + // Probablemente sea YYYY-MM-DD HH:MM:SS + val dateTime = LocalDateTime.parse(dateStr, dbDateTimeFormatter) + dateTime.format(displayFormatter) + } else { + // Probablemente sea YYYY-MM-DD + val date = LocalDate.parse(dateStr, dbDateFormatter) + date.format(displayFormatter) + } + } catch (e: DateTimeParseException) { + // Si falla el parseo, devolvemos el original para no perder datos + dateStr + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/despensapp/worker/InventoryCheckWorker.kt b/app/src/main/java/com/example/despensapp/worker/InventoryCheckWorker.kt new file mode 100644 index 0000000..332b1d1 --- /dev/null +++ b/app/src/main/java/com/example/despensapp/worker/InventoryCheckWorker.kt @@ -0,0 +1,56 @@ +package com.example.despensapp.worker + +import android.app.NotificationChannel +import android.app.NotificationManager +import android.content.Context +import android.os.Build +import androidx.core.app.NotificationCompat +import androidx.work.CoroutineWorker +import androidx.work.WorkerParameters +import com.example.despensapp.R +import com.example.despensapp.data.repository.PantryRepository +import java.text.SimpleDateFormat +import java.util.* + +class InventoryCheckWorker( + context: Context, + workerParams: WorkerParameters +) : CoroutineWorker(context, workerParams) { + + override suspend fun doWork(): Result { + val repository = PantryRepository() + val result = repository.getAllProductsFromDb() + + result.onSuccess { products -> + val lowStockProducts = products.filter { it.isLowStock } + + if (lowStockProducts.isNotEmpty()) { + showNotification( + applicationContext.getString(R.string.notification_title), + applicationContext.getString(R.string.notification_message, lowStockProducts.size) + ) + } + } + + return Result.success() + } + + private fun showNotification(title: String, message: String) { + val notificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + val channelId = "inventory_alerts" + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val channel = NotificationChannel(channelId, applicationContext.getString(R.string.notification_channel_name), NotificationManager.IMPORTANCE_DEFAULT) + notificationManager.createNotificationChannel(channel) + } + + val notification = NotificationCompat.Builder(applicationContext, channelId) + .setSmallIcon(android.R.drawable.ic_dialog_info) + .setContentTitle(title) + .setContentText(message) + .setPriority(NotificationCompat.PRIORITY_DEFAULT) + .build() + + notificationManager.notify(1, notification) + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml index 07d5da9..d15f1bf 100644 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -4,167 +4,8 @@ android:height="108dp" android:viewportWidth="108" android:viewportHeight="108"> + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_foreground_custom.xml b/app/src/main/res/drawable/ic_launcher_foreground_custom.xml new file mode 100644 index 0000000..730714a --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground_custom.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 74% rename from app/src/main/res/mipmap-anydpi/ic_launcher.xml rename to app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 6f3b755..369004c 100644 --- a/app/src/main/res/mipmap-anydpi/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,6 +1,6 @@ - - - + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 74% rename from app/src/main/res/mipmap-anydpi/ic_launcher_round.xml rename to app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index 6f3b755..369004c 100644 --- a/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,6 +1,6 @@ - - - + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp index c209e78ecd372343283f4157dcfd918ec5165bb3..e51120483276e19e0d38106f154389cd97c8f900 100644 GIT binary patch literal 4438 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 literal 1404 zcmV-?1%vuhNk&F=1pok7MM6+kP&il$0000G0000-002h-06|PpNX!5L00Dqw+t%{r zzW2vH!KF=w&cMnnN@{whkTw+#mAh0SV?YL=)3MimFYCWp#fpdtz~8$hD5VPuQgtcN zXl<@<#Cme5f5yr2h%@8TWh?)bSK`O z^Z@d={gn7J{iyxL_y_%J|L>ep{dUxUP8a{byupH&!UNR*OutO~0{*T4q5R6@ApLF! z5{w?Z150gC7#>(VHFJZ-^6O@PYp{t!jH(_Z*nzTK4 zkc{fLE4Q3|mA2`CWQ3{8;gxGizgM!zccbdQoOLZc8hThi-IhN90RFT|zlxh3Ty&VG z?Fe{#9RrRnxzsu|Lg2ddugg7k%>0JeD+{XZ7>Z~{=|M+sh1MF7~ zz>To~`~LVQe1nNoR-gEzkpe{Ak^7{{ZBk2i_<+`Bq<^GB!RYG+z)h;Y3+<{zlMUYd zrd*W4w&jZ0%kBuDZ1EW&KLpyR7r2=}fF2%0VwHM4pUs}ZI2egi#DRMYZPek*^H9YK zay4Iy3WXFG(F14xYsoDA|KXgGc5%2DhmQ1gFCkrgHBm!lXG8I5h*uf{rn48Z!_@ z4Bk6TJAB2CKYqPjiX&mWoW>OPFGd$wqroa($ne7EUK;#3VYkXaew%Kh^3OrMhtjYN?XEoY`tRPQsAkH-DSL^QqyN0>^ zmC>{#F14jz4GeW{pJoRpLFa_*GI{?T93^rX7SPQgT@LbLqpNA}<@2wH;q493)G=1Y z#-sCiRNX~qf3KgiFzB3I>4Z%AfS(3$`-aMIBU+6?gbgDb!)L~A)je+;fR0jWLL-Fu z4)P{c7{B4Hp91&%??2$v9iRSFnuckHUm}or9seH6 z>%NbT+5*@L5(I9j@06@(!{ZI?U0=pKn8uwIg&L{JV14+8s2hnvbRrU|hZCd}IJu7*;;ECgO%8_*W Kmw_-CKmY()leWbG diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..57279946f96054b7e862a4cc5d8268d11e5447be GIT binary patch literal 4694 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 OvAI5IDtx0pqyPX5Q4ezf literal 2898 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 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp index 4f0f1d64e58ba64d180ce43ee13bf9a17835fbca..c5b70fb4bb3c678cd123896afaa3851a888ea2f8 100644 GIT binary patch literal 2904 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

C%4 zc_9eOXvPbC4kzU8YowIA8cW~Uv|eB&yYwAObSwL2vY~UYI7NXPvf3b+c^?wcs~_t{ ze_m66-0)^{JdOMKPwjpQ@Sna!*?$wTZ~su*tNv7o!gXT!GRgivP}ec?5>l1!7<(rT zds|8x(qGc673zrvYIz;J23FG{9nHMnAuP}NpAED^laz3mAN1sy+NXK)!6v1FxQ;lh zOBLA>$~P3r4b*NcqR;y6pwyhZ3_PiDb|%n1gGjl3ZU}ujInlP{eks-#oA6>rh&g+!f`hv#_%JrgYPu z(U^&XLW^QX7F9Z*SRPpQl{B%x)_AMp^}_v~?j7 zapvHMKxSf*Mtyx8I}-<*UGn3)oHd(nn=)BZ`d$lDBwq_GL($_TPaS{UeevT(AJ`p0 z9%+hQb6z)U9qjbuXjg|dExCLjpS8$VKQ55VsIC%@{N5t{NsW)=hNGI`J=x97_kbz@ E0Of=7!T>s`_=b;t8Lr1ZQHi* zmIN>W2rzlJZQHhO+qP}nwr$(CZQFL60DTZ#fndOJ;4W|$s1RoWLjYbt;17@`t^lsG zZ_(!}CjE@Sh`0hc&k^OH=wA3G0y`%L5C{kZgq<8KARA4kqv@myeo_Kd z0y^q@5ZI?x{t@uqPwc9d`hy5_8-XGk7|qcU&pBDzMFxhygwF?lI0mi*AtwTGgFs|p zErEtgo$K>q#k{0ZtGYPhdIFn!s(9fUYEc*u@91eeBDQQF0ddo(VT$9uW?$io>ho zcrueZ0J_fz`&{a0Q(8NB`_EG`)#1KN%=npBdOkOazsJeaE^=OavuFRJ3wchIbw1%Rs>m)v z0DPzj2!0~*7s(?Z=}q96j|VyNvlHCmC+~dckRL1j{dLdx%IA|L&{I1(u<9|7c?@t1 z*bdaat^;5)7ma>``{*fG3X}i)@%H&w@*FSkJi<5sdkmTV@xRx&##gvW?1^@ZKi$3V zRna*B*L-&v$x7ch5SRgM=DZMdOJHCJ2^>#wHsA{I@AIGkJbCvY$v(|h)9-Y$v$w!Cf_z3`Tb!8`iMQt3_Nc0*}F}dGNniD>j>;|Hu)2Pcb^B6 zNq~dgJnve^EIymt-8S@XY#H+!&+bV#VXS2&GyKa=_URyk7i5q5+2XxVnlfd%fyb;k z^e8{I3;2|vga*bC7%rL3&2q2fIbrq%PL_6&LnmFwU+f5yTlOu!$S$cjV1ci{InJGj z9q-#*?GU!D5q{jPe(2e&xu;~R+CfBwe7 zC{^62naa5E_q8*8JlI|0o&qnRk^8`CM7&OSimb>7Xy<5Bdfp{%$G%=|>Jj{%&JF zb3*{} zH-8dFY&Avdvi1in*}zLxp{k_UnM&6EWL2m-8@y6UDs*P`#tNbDg{ELt*7tm6j2XMv zlxohJ%oZx?E;p7~o&4puZ4dW4V@&6x1=FS_vU=kMi`6Bvl8p)LjupaF85tIYDm@u1 zcW1_!e&;KuNJ^9fLT9bW59%Bn>^^!h#*E%+0<7Q@VAy&i>3FzehRj4(zCB~rzCswW zQ86Mc2(M?QuFM#7HKs@iN&(rKI4S9*7oGjZ7_TwLWXns~Y_5=8=*eLrVXW6ks`VEv z*Os{)APDdff{WOL^k9ssIaIJvbs{n0p}|WqWTleS8!G_C>NA(4KgpbRh27nsj4^%B zRr8`E!j~nPvJ$pGR7sl770h3rxE>$@@Hfz*-R{C3p*v$tOk|kX>ue<{-jK1@P$p@+ zzhL%)#P#U!vHWyr_w^@ZOp)4*)%!Ea!Mv-a%khdCGJ*>Nsxd`YW_R%yUpA)2Lcz>A ziKO$9g6T36NuP5SQzQl#GzWO)C1`qau!ne^F~c_-Uju)WQQM6$Y@_j(gan0gdyVkG zCtubD>F+RqTV?mulQAZJM#47x3c*B%hl>qbX@rqm&HsMoihy*$|B$exqc_>3yvCT< zvqWPic_!N(D1-<28NBGyE=U6>SarFx`|H7&?k5T+jSG^JjTvhU7J>;44&I6pn~f_1 znlW8rVR!YXv0i7!?l$2eJo*1Z{jrRNs}o5~beK12rI}b`_L=~b=PPt?;ERu<<1Q%D2zShTmYd-;D|P!rfKYsv>z>;v0a#3m}tL8fZ&*N4>BgY|6G~ z{FG3Cyf}Z)v(-qi8R~Td_0U%jJ^iVRUUc>swzPw{Xt6TYKHQa^X!5sLnM$)H$w^QU zUJ{DGd)E`R+CV7a79VEYPwRT2%aWgTI93hU-MRnKM^8Qc>AtqS{obPKg`xWXuGDaq zr?E&^kVVHO{uc8n0zZMfz;0j$&=sfzq?@Ca2eJWQnWLs?w>{a8Z}sPfXNJlPU9r9@ zM{SWRI}49WJ^&DB0AGMBfBX*61}Fg}dy{sVKoQ^rLqbA<(Q0vwzR^Z{xBS#PghHIRwG zqbolf*a2JuE&$tsDL|+11F7d|7eALkZyjd>QGsv349CzD`HR4x0|lJ| z2nU>@H$=%KTqY#2Bta1%3hzPllt(GYkx*%@XsS|-(V<1iO;3=gMcsIBGho!ta|Q-2F{vQ%9;qARs@*CqUK-~ zF^9L6uqG?NIdI0L2L1tEG?12ata}8DkW^*XJ$&K9iU3nt&>F0A_99wl743zU$LRRn z&rV|C;)^wqoDnj!W~EX^R-?1(x*NPj_?;sEHi8m<%KQFvhtZ7 zfo+Na!T-9X!Ljftd^74cMsk8H5#|@k}f2yuyy^jIxQ% zwd%F;W===ZT);B4Z8K+RJGU!cdrxPpXYI|*XkRBB-NkOC$X3>|1ONcbMoN3OefPF) z+qTDUt2MMM&U)LnZQHhu^PhdRY}-~FJLjS#zc4fX<|~a!gVG3Qj%48#*fO(=(eN0G z8O&UwYumPI+bY+#ZAUgT+qSLD<_Flmv28OyiZ7r2)*7=iaN9^xvUrTM`vxS@aS)Um zH%%|&foznMArWOkG9?P2)L?~}88mLiHI!CMlukq5$Z(?Iy-FlkN`VX^N~`v!wdxyMt6~@z zgITd+d^(Gp*N?c~BetI|ISC0@5JCtjGBiGAcxo>9M)V+$q_zLALuly( zdKt-?M)bqSlaN)VWO7K)qjB3(DOsvTV^Q5^W~sf?bNd=GxRQ=^PmV;Wi$tzmsC{HN zg%ILrHjg5d|A1ab{3#JyPt9E7+k6Zof@a<5xnrGX`AFR2q29YUth}g1zo4UANJ$#6 z1G%3aTWIT=1=lTMU3}vTN(w>7wVOj~o__W~3s)vLOr(2tYB$J=cz4qiEh}tZy$k@9 z61!4~5M|PjZ2f8)(POOHl=t=?o8XQV5jU(qUzuxl6{n(OSZrLaz%8=?pk4vxw4a zYma9*FCd}^rPGjh+tx()n2F^xHUj|WU#=zh+vC^tCtX6y3;;6Ph4O|8E=)Yr9>Ssm zFj7h)r2B?tY9({!N?(z^QW7VtZzSg-#N^ve=>O}5!Osq>kJlTJT+I9C>Hq8He>BK@ zK_do2#xSngsuqg*Jy6oGZ6*+@8(qU~@uPfGbcGOq%)Z~U{&eNO+J!T< zirxVKeaiFyTe4PhIqvRrBOQb70mC1+W~_^1_R56>Z_o2Z7M1&baw zb?UyO)PCz)_~|vH8Fv+u3)Pz-US%Hd7tpMWV%>ajTAtD0t~LjEgocLd{OjplFU7Cv z&sL0d>3duo*huIYUNU>#9h33_v&ug6ik^=fR1M4oA}moLEDpd-Ynb6BZ@4u8AcFf$ zxy~(%O$l`zQj;|9ShmN9IiGQO3dzDnSFBVQRC46ad9xYR#Gqyb2G%|Qkk!{4G-?S9 zH2Brgu3m;$>+ezZepk%zz7pZv+C&tYmh~`Cvo?L>+VY)cirbg8=rt28MljLGmC=Wg zE@dyf^^8y?Lz8`#yEiO4DJf%K&Lff(V4LAOax4;4#bQwq*ayB zU^%%01<8;nZJ#)r(x@R|ZAwV>^;`jjt0XC!Il1voMXox=G;wg_$2SwX+7wft=f;m8 z-`LL8z?lojkN-`5jvGI|HqF&%nek7kNpcN&W_$ylnZ*@ibtyE$nLIm9hNk)0yyuXx z(S#K=ZksZN?+ii4<(ipRd-_6IHKv)&wUoJ!avEWk%^b$fom|phM3&JM#<;YGF>8a> z=NQ~V;u3c!vX3D!PSS(OI-0;u1V^>pe#a5#}}*m+JYiT z36Qh{5{}7}*OfyI>+!VuQn?J|Hp^-&G90QJisTqiVH}#QH(}D6U@0+=(u%=q5FEaP zadRZqKmudqmRQQZ7;fy~I1P|&V<;B8w7j*2prq06MlFO^aRyCzsPRR(^H*PET=G|^ zEc-B(RYfydf)jKlK8G>RK9-7I5BUYg<@Aht1X9()NMsEup3$u<;f z{44_Luys}BK%|Tk(@>G%d{ZcuP^7V)!MNBQN;?`k6XQ>)gdmj=Ml#-{{Y&5V^^OQF zmYHcMhM_j!-P6sIRZ|uC6PnRj@i`R6)iFjh5-B;K!MF~?MGZvC=@=>Kw0*4$LUS#z zHTT1;ucB}fU5Sg2>9(WFii)N(_b&ZrSn7d9DE@_J6q0)qgK=XU6Uh%Ly?~O;I<)xK zY;UuTKb224YWeb_Xm^O40Wr%P-?*-r#L&VU-?;puf(ZUdUQ||Bmf*C53B4xRzc9W@ z$^it%Eu36LA5eTABN4ll9Cs;ElKb}4`Un9471j}g7m#$&q#ZQj*k&8PoB~rCn;y==k&-0HCt} zm-`QAyMIQsLrA0j+ccw)l7gbKEICp&3@JE`!Z_DN>QO9Hb5A6MF=>UR>`&keZ8{SL zXHxgCU}mC~Ov6z~SR*lY5dbJREWT7W2mmOxdSYtT(P3dCtl>=H6b)pUBdMV(nu&}} zN6fYp)>7hdSuHi22WTpC7{{)UWgbQ0Q0tCZrV&JQnQNj*a!h9m=(s(rtBNYBqM{m8 zn3lzBK~lDR`^kfFEWE6|aT@y_cHgwtb*xeUjnEo3MDWvV^4!~}*On+JDH_R=T;qv2 z^^kfj(^BTD-JR%_?kR?`DMX#OPp`xrPPfBdN5j7aD zfg-6X%JS$X6-8MkNm0(JC@m<8*Y zcWnAI?<*n16tyaHTVxsMN>YwztOs%i9VzWbSmYoiLft~lydmpvH!{3BRr21RCKn#+ zvvt*q8F?=D01vZ4%JJ#%?ZjBj&TME-~M64Lng zz#mx8_esj&WcS6%?TZa2H2m&pd(Lrc#*FfNEWcmN@a$OGD^IjN*09K?753?QBa^b+ z<&d`{0OinniD`de<=cJhC1&_v8lM%M5>iEme{Wj~1sXX3P;s%;!X}C0+d%~bbOiPhF5qdaXB21_j4YF!L8OG?y`0i&+;IE9ItLq*gXdbmQBE`t0{}JW zTTnaCzP(W!j}P89ZZ|fg4W=JQOKC6tmVwq7_f5 z6pqQ|Duokr!FIy?sT5796poWh;W%r)YtwMv6R~=66#!@(oC-i$B%;Ux0DzWlcB~)d zWDWkcaF=BBdMRc0yqD>?@s#4_slj%i6D_>k*&c8a65h?~>_~7H5(N7>3qf*;Ph~Eo zliod=asTbHVdch|W$(d?!YKQ z-M6l6T{@$1)gdYO#z_f_+&J&^nvD4It?l-8Ov$}@@vSZa06I>8{Z*}0C>^kwOE>^f zefmqMs{EgIPyFU&aQbH_LoR&QEvLS8`g!5j8i&06?|p9sK(6 MOFfW{a#Bn{5M1_gJOBUy literal 1772 zcmVQj4N+cqN`nQhxvX7dAV-`K|Ub$-q+H-5I?Tx0g9jWxd@A|?POE8`3b8fO$T))xP* z(X?&brZw({`)WU&rdAs1iTa0x6F@PIxJ&&L|dpySV!ID|iUhjCcKz(@mE z!x@~W#3H<)4Ae(4eQJRk`Iz3<1)6^m)0b_4_TRZ+cz#eD3f8V;2r-1fE!F}W zEi0MEkTTx}8i1{`l_6vo0(Vuh0HD$I4SjZ=?^?k82R51bC)2D_{y8mi_?X^=U?2|F{Vr7s!k(AZC$O#ZMyavHhlQ7 zUR~QXuH~#o#>(b$u4?s~HLF*3IcF7023AlwAYudn0FV~|odGH^05AYPEfR)8p`i{n zwg3zPVp{+wOsxKc>)(pMupKF!Y2HoUqQ3|Yu|8lwR=?5zZuhG6J?H`bSNk_wPoM{u zSL{c@pY7+c2kck>`^q1^^gR0QB7Y?KUD{vz-uVX~;V-rW)PDcI)$_UjgVV?S?=oLR zf4}zz{#*R_{LkiJ#0RdQLNC^2Vp%JPEUvG9ra2BVZ92(p9h7Ka@!yf9(lj#}>+|u* z;^_?KWdzkM`6gqPo9;;r6&JEa)}R3X{(CWv?NvgLeOTq$cZXqf7|sPImi-7cS8DCN zGf;DVt3Am`>hH3{4-WzH43Ftx)SofNe^-#|0HdCo<+8Qs!}TZP{HH8~z5n`ExcHuT zDL1m&|DVpIy=xsLO>8k92HcmfSKhflQ0H~9=^-{#!I1g(;+44xw~=* zxvNz35vfsQE)@)Zsp*6_GjYD};Squ83<_?^SbALb{a`j<0Gn%6JY!zhp=Fg}Ga2|8 z52e1WU%^L1}15Ex0fF$e@eCT(()_P zvV?CA%#Sy08_U6VPt4EtmVQraWJX` zh=N|WQ>LgrvF~R&qOfB$!%D3cGv?;Xh_z$z7k&s4N)$WYf*k=|*jCEkO19{h_(%W4 zPuOqbCw`SeAX*R}UUsbVsgtuG?xs(#Ikx9`JZoQFz0n*7ZG@Fv@kZk`gzO$HoA9kN z8U5{-yY zvV{`&WKU2$mZeoBmiJrEdzUZAv1sRxpePdg1)F*X^Y)zp^Y*R;;z~vOv-z&)&G)JQ{m!C9cmziu1^nHA z`#`0c>@PnQ9CJKgC5NjJD8HM3|KC(g5nnCq$n0Gsu_DXk36@ql%npEye|?%RmG)

FJ$wK}0tWNB{uH;AM~i diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp index 948a3070fe34c611c42c0d3ad3013a0dce358be0..5007b74a6a7f54ccdcb1c201a12d70e939f111be 100644 GIT binary patch literal 6128 zcmV)~$cu}pEmI|C^sz#W1EZoMntt#sa?o{ymuZoz+?aZAYG1TC= zv2CY0B4@4+I4u9#a{raM1mra(xNRiKaoRZh@#a$xwG4pyN3s^N7^(v;P4qv31o$H% zC-(zYl759e<5U_qya|HTeIT#Kgb+g4WB}-KGxJ9Af%tuE`QOM434p+wAz%NvTu&(q zuJ+QjpH2Xfsbu(OkV-14q|*7V(E|WZhLE9CNhJt^FqAO>Huiy3x2sOoDcwKA;xnvh z06qglpldPBN+3xXfMYm@_AKq0%z0uSF?|aQ5ag1rGHKh<#(I#5Ndq9ERPciofW{jB ze~R2T|Cyb=JArkQ#StsajE=(0jAdqKW@ct)<~Gcn7+Nz)ikRtiv^z5|cE`86=v80+ zLP|+-Tf5B64VUZ37yti<8~^`zyFZ@KnPi$|yXCgs-PhZ;ZQHiZLm%4q`^>iavW|ZJ4b6(2Z0b1_~Q{ z_Ib|ceZVaMn2Ox{$@y&^!L6Rnt-3xl{nG1veOX|N+CCh0H(0E((bmKv;HB~mYxXoS zkOed71QRPYO<4vqun@X|iADXCG7Jpp@(k5`@G4Q5r)TO2XMu!O;RA9D$&Th%-A%R=Y;KyI=ZrM> z62b5*8!sKn%)t~_6Nx~uDfIRnm-|Mzr0V`jyLvD*QLD;eXw8%R;MU9Rg_Q)q2vR2W z5&|3d{xXNbe2ugl2>1%uY~O^crEK3ccl|}5_}RxiFrf%!4`ut%V$-1WaOWqP zfc@+`KJ=h3k11r|O(W>Jrj)efBXrn{@XAlbvV-VY0J52Iq?4?k{D*h_LB<4;h*M4) z1%XEZM3mi8#TumHg+IXEHX{Hnj8#aM=pIOIEAJ+R8?4HCR+eH{mnC^LlvE_qo&rdj z5qA3EW+E)P3h(@e+HVX3iw=iI0i1UqJpUEdIWLk#Leph>@%NOs2UCymf)a&Zk7}a` zcu0op1Z7HQ0nfW*&Au}#k7=KU3qUcz;D!J+uT-i)W=_N_UWlugl?N=40IuT;52@o% z4by3{n6w4AdaPoECtH>Do+sC74~psbpr$aqa^QE=ibX#qW5|!F0I}3A$!SbNR&Ix_T!&gP~HS}*> zIMQuMTvz|)?g0-I_ZSqfLiD*3T0SFN!kFQcoaE2wL}`;`bVG|Gr`7WQR3%;r1!n+>vB?GV%%f8s3NcI90@w zae_AqKH=&B*c9v|aR8ilcf9)f1)yv8?LK$kFAB$V4-^g*a%P76^IH4zqOQ4k)cf9| zYYqVZf`#K-5@_iidHV5V;${y+Hem-vsniFa{{EkOM$idXOd_ylF|G6KpkCmJ15|*| zTI2!X%sT^KAw6Ans0ATJ*}P(F*oo&fFXNLB(ao_+m)-?eWPyjY|6}k*zVGk4LU-fDX9BQfs>#9THmqdB0&=U+@9@qrr006smE;SZsfLOZo zxsBhe5)QCIPyotw;yAq=T9;zcK|JgOZ*}hvz15fUL;`^0!_NJ~j*T#}Px?b$ZUTTP zI62p29<<|!2m&h)w4p{i)TF@$(;X$LP%6k10Vg2%&#JB*+*%*=vxkTYSl=WhOz`nZ2j)-+Qv<4);!SbbcW!v;Z zp8x2tx$j4C;(PJ5@8Z564`zBzI_mVAs3RN_0r>hniwbb|c0I0L?w7!TCk~L?+e>v1 zZmg9KH6_veC+9q$aaaJ;J`ON+B3t6r#?lLpmIpjw-+TN)wAurHxcBpG>qlY~oR_DG zuxA#l2i9ktSSj)(cz0VEo-~U)*9XJ%LurIZmV$_jTTE`TaN#6hiohl9&XRhNaRSO~ zl()rMxF(+!<%Pkp<7W#sMMUG!o0hEt208L5kGGxiF(1C*gOm%+SL)24Md1?AQtgPP zD+B;idwcFAS-lVyf}k>3Sa=K_#3&yeXhSVp*40;*YyW>?oBL4!2PMRj+HgI=f) zerNdDcXpokwM9!fKF0l{L{x4ipNIC|1O6q#W1}SX(iY3Y!MpFW({#-Mpb?CDjZ5Tm z(dW@cKp^C{JJ#$u05`K1(kE(y+M@uRF<2vYa-v!~zz>Il*GPv96+7~j4FKd#7L1Ng z!3C1AOWot0)5iB!bY2Q+fj|UA70i^EB%&AqV0#(3BM;<*Lcsy!9S{I!NDo88mplar zmbAa&bFM2L*!mAc>W2FOuvS#c>Rr%XVS*11Q3yhHw0dkH04SHxee?npazKRG=sxl8 zKYyDwi$5wW0NRz<0}uKq0GAyDFwGnw2Y`(nrIalJ(;K71z_VOc*Pi&q&%Xs(x@pjs zjV>s3o)7o3g#b`z3zznJ(m$jo5`_|NI4w9TUV@8aNUESDDG~5j4A4LdfO24JtpplD zhLBcDK#qj90RDX`p{1rjJuhz*G6Jv~WrHOhK7@tdlXf2e_fG)Oi^z4=1uyrs*L{v% z6a-=nfP)rq?BVknk9_n!hBEyb=#2REvbZXH6^LHKH{kIq*@n*CDI!a zqW~zh5Mc5B_nvguF93K_(>HL~N09~CWgJyCS{X=S5;9~KiwKzixmbJfCRCSF1fW%y z-2uS5egyw@^B%nikV^)1rH3B)yd@hd>eziOl-wPgzZ{76f}2(;YX?{^@jFfgPmv7_ z95PfsvhRrcCqZ;j)F1M?aZQLBR%+52$jYs+x%ITaOb4B^h$zGX0NmKAXqOCQXu0G# z{9MOMX;|_}OUq5yd;Ypq8kao7V40uwh$ljI48?zh3lgp7a`BW5FaBha{!R&9OAp}9us5tK^^e9_#I1OP-C#Z7>eBE z1r66+NnJ5Gbs&xagj_-zMIDl#aHJhQ8Gg!xUB-9op5vLonkFCFtAE`3d(YBx^el|!KZ&XEI2jrm!AS5MUBIiT3vo6 z2J|ZYY{WrYQj#ZVoh3J*OYv&3CrgYao10Q5?53h z&FDuyc^P>qF2#_KCEVpo(lHTPTQt$WM;4W};=Di-C;;T6a#z}Lwd9in{^&Y}9X|iD zOsmrtlK?}9URpT~+Kwnbiq#1OSg6jRUCmiOVN-#_bqxmjSkiwK`s*Zssw3L%=a8-y zCt}OhidRqupuy`uEfx;)a7PJH(m;}r@VaYt8cYV^T^;^~2`e_kMNX7c3Mg=u3MtTT z@}QJLugT{>cdd4)$pEu{ipq6#-zEBYqoRjIB_J$RXDF#9fn1(q#6dsO$a9PBP~dNq z!i)_a@Gbmy#qnX+J1ogcZXx`#LHJg)q$E!s$VG9-IP!3VK&u_cHNckK0;~iJMJWtA zi3+d`066w*;yH3EBwD#qsg4Ms3Pc=TC=NVf6m>{6h&)zCD3=m`G!YbJ4ZwS1g+xXW z)GJ}ddZD8jFz5+bM`ZA9wSHlXGvdpSLFbl`sH6qtI@WWzQj5tG0#PJQ1Cob?kOgI= zgo$7gVm0hVS-ql4K{(@}X{aH7s6!ceA9@T8JUHSLcX-x%b8uYgj+|1kOtl6ydnkzj zV1b!}b`4~BaH|$lRB#GW2H!<$y;3(W?n${df(Z7&Z`Rj(b~KWp42cx9A+OnX4qpo@&O12soyXtOY~E zpd0`wL2LVvPgp|AwMs%@k_`ZD(uT3JdV5vjAtPi|yuj>VzXrKxIkE{yo{29tnCaL| zSX;0Oo~5PFtVFDcmC~**05ecT8bN6kLOw~!6Y7YY!c_oJ0UM)zRCT7IWym16gpAMz z0C!wgSNEkaSRWmbBdd0~N*xPI&&D=}TvvF4$c`{)4h#0H)x$*s0iledtWK#9RUrWR zfT6X31`^fZJ&t<)P_i0>!cDiRpj+$afbl^A7pG0h^(Hvu0mz{w2wX zKToMe)a+NXFHFg-RMy{ihw$fSPNjXCmU5~;WYUZ`E-o;gS zX4RemM;hDxv`gW3g~(X>G)Hq(g;<@P8^-HTlwha&-$Y%nr&FAhzYr%Zmr5URW?y2DkXjf0M;x*w}(C<809u7 z*G~=1MID$Zfkn{FDQ!a#!Jn(>5Vm*i^D5eM~#D5pa=uCP?O*TnCvB}k>nNtLIO-H;p4CR zsh-70s=#*OhN!9bgcB$gwm?7rJC| zhl2(rq!?O;>ZPJtG#t`J7w9v$Y##iH8$NOf-WMxn(6!VU)_j<(3O`U&0XH0F*vmAE z=FIO|LW6?~!(gSf5y}_pwISjB1Ch8Sl2^(-KDd*kATo9eCAz_+NCtsEsYTUIZF=Xh zOIZ=a0KRf4n168-GCefJOP``NNOta69w7s|i5Ao+G=MNzH!=XSGcr}l78DwmP^*~b zQDlL!9l5PGGCU-J0gruq$>UJFGVq?P<#4Wr$zFgQOKk(-!c!sy_{Plb3$AJuVFR$c zqu2^-6sWmPSz=`!aC$LE*tDh)m04hP2TQL5L&sPh5(KZ9!?n7VffcX@a5rU&9E7_e z_ZZ-fpuNw27fs9%cA@g6G6M#Mm745U2b=+boDvAn31uxAV9)bn-!qkvE*5GP1w;(B z9YuUsI~tCNLRKF3?+@AO(l@*8et&SGsm>!$7!lf09PN3Y_Bl%c$>4cJ0PJViUh|Th zCHq!)rHZfp3Xl3M*t#dzpTe5%|L)F zns_)gnbFTI-`}=AnX-R32YBohIqWb4B*0aU^Id(Qw6EO<*yiRa0LW6_m2=-Z_iSA3 z8U*ErS*Gn>xd6;4S{M@_KkHZT@KKNnLI0LlUT1=FFMGq&ZFXRVyJ@R2W#ARd5(|~Q zO30eX{SiMK@YPTV`@gg~SC@vvuQ$K=G!YCl!CPK=T|e+gj65W>C=waCn*~yblykFK1aiD;?X+K#)6)Q3RtGwDa={_d**y?)LTFA~j(l z8h~>Y_M#|;fzOD~l)EXDyMr6K!Jrzc5yZSqax}3rcn1a+VJ(MyD*(bmG$eMz@Ub;> z^WCujveqXXD9uIQzXT!(?|8-WYiK0M=xr@LQoY!%HZ6{jB(fZl@DhbqEg1yBgt zlu7SQmT%NR20npoCpOra^cXxWx{|@7sM^TA1prSYQpIh1g-+l1<@JN$&&GNESx$ct z3=t$j+>(yFVL1#5{`S%@sWdxkMgWl036#pP$`XK57_Oy>V7?X^6BL53Tz0wmro6o6Gy zRq6Ap5(_{XLdXcL-MzlN`ugSdZY_`jXhcENAu)N_0?GhF))9R;E`!bo9p?g?SRgw_ zEXHhFG$0{qYOqhdX<(wE4N@es3VIo$%il%6xP9gjiBri+2pI6aY4 zJbgh-Ud|V%3O!IcHKQx1FQH(_*TK;1>FQWbt^$K1zNn^cczkBs=QHCYZ8b&l!UV{K z{L0$KCf_&KR^}&2Fe|L&?1I7~pBENnCtCuH3sjcx6$c zwqkNkru);ie``q+_QI;IYLD9OV0ZxkuyBz|5<$1BH|vtey$> z5oto4=l-R-Aaq`Dk0}o9N0VrkqW_#;!u{!bJLDq%0092{Ghe=F;(kn} z+sQ@1=UlX30+2nWjkL$B^b!H2^QYO@iFc0{(-~yXj2TWz?VG{v`Jg zg}WyYnwGgn>{HFaG7E~pt=)sOO}*yd(UU-D(E&x{xKEl6OcU?pl)K%#U$dn1mDF19 zSw@l8G!GNFB3c3VVK0?uyqN&utT-D5%NM4g-3@Sii9tSXKtwce~uF zS&Jn746EW^wV~8zdQ1XC28~kXu8+Yo9p!<8h&(Q({J*4DBglPdpe4M_mD8AguZFn~ ztiuO~{6Bx?SfO~_ZV(GIboeR9~hAym{{fV|VM=77MxDrbW6`ujX z<3HF(>Zr;#*uCvC*bpoSr~C$h?_%nXps@A)=l_;({Fo#6Y1+Zv`!T5HB+)#^-Ud_; zBwftPN=d8Vx)*O1Mj+0oO=mZ+NVH*ptNDC-&zZ7Hwho6UQ#l-yNvc0Cm+2$$6YUk2D2t#vdZX-u3>-Be1u9gtTBiMB^xwWQ_rgvGpZ6(C@e23c!^K=>ai-Rqu zhqT`ZQof;9Bu!AD(i^PCbYV%yha9zuoKMp`U^z;3!+&d@Hud&_iy!O-$b9ZLcSRh? z)R|826w}TU!J#X6P%@Zh=La$I6zXa#h!B;{qfug}O%z@K{EZECu6zl)7CiNi%xti0 zB{OKfAj83~iJvmpTU|&q1^?^cIMn2RQ?jeSB95l}{DrEPTW{_gmU_pqTc)h@4T>~& zluq3)GM=xa(#^VU5}@FNqpc$?#SbVsX!~RH*5p0p@w z;~v{QMX0^bFT1!cXGM8K9FP+=9~-d~#TK#ZE{4umGT=;dfvWi?rYj;^l_Zxywze`W z^Cr{55U@*BalS}K%Czii_80e0#0#Zkhlij4-~I@}`-JFJ7$5{>LnoJSs??J8kWVl6|8A}RCGAu9^rAsfCE=2}tHwl93t0C?#+jMpvr7O3`2=tr{Hg$=HlnjVG^ewm|Js0J*kfPa6*GhtB>`fN!m#9J(sU!?(OSfzY*zS(FJ<-Vb zfAIg+`U)YaXv#sY(c--|X zEB+TVyZ%Ie4L$gi#Fc++`h6%vzsS$pjz9aLt+ZL(g;n$Dzy5=m=_TV(3H8^C{r0xd zp#a%}ht55dOq?yhwYPrtp-m1xXp;4X;)NhxxUpgP%XTLmO zcjaFva^}dP3$&sfFTIR_jC=2pHh9kpI@2(6V*GQo7Ws)`j)hd+tr@P~gR*2gO@+1? zG<`_tB+LJuF|SZ9tIec;h%}}6WClT`L>HSW?E{Hp1h^+mlbf_$9zA>!ug>NALJsO{ mU%z=YwVD?}XMya)Bp;vlyE5&E_6!fzx9pwrdz474!~g(M6R?N? diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..992d38e5c477eebabffa09f6352511cb9cf45312 GIT binary patch literal 6370 zcmV<87#-(QNk&H67ytlQMM6+kP&iD@7ytk-*T6LpRbkq;?X-0{&u6RfVcWKC+qUgp z`}0?}ZQHhO+qSFz!5rgVbFV$eT=5>QXhu!rCw#|f#kR4Jv}{|W5q)vKR#av)w(S&q zv2E;TZ0D-9?DV*g-44EL#dcEucC1qKYsI#0t83d%T25AL#kQRlHfzNwqZQlunz3!$ zR@1g^+cuiEtr?7dY};9}ZQHi3LTqO@V>i>X^HwvqZL67PxzeC^+u9*XI`12fvXz-p zwr$(Ct8KeG-uQz(#^<(eCADpv3`y1#5gC!_p4nsD`gDHl*mG=iZQHhOZ?^<600=O7 zwr$(CZQHhO+qP}nwr$&Xn*h6W|99^HCGb=rs6aJ=l>#RPb_w(lh!XV>h$^s8;J*Ms z;DtbesD?n0tHfB~y+HCPhCsPEAfW(&z~U%|z#O3Bw3~9*9o1CPISEA{EI=Sk)Iwl8 z&{5TKy=^(Dx6KC?9s2;p38aWx2&@L$sW_=np~}*40G>Z;AutVSq2#PWg&N4a2oM++ zNdy9|y+GJ6`?4<+2p#s9K=$(!m?{t{NDvqR)Ec^?*`l**30+ZQ{5^oc_Q)ZSdmaMs z1U}!}z1^F@8-a}isr>V00#86-c90;@8byIe0>L7KKp}x2nEvlB`9+{IAh0t?czzXu zp91kB!CwkoK=C)j{t#FX2(+~@fxH5%u2JBvz)^vg0wD|p3aTJbA`%G1jDuvLXd%{W zt%^n@25?RSq5SaV0$)Jjmq0Yj3JdfV_=B&&p=Irr!%)hjq zupO|#NFb0HC|9T<8ezTHdvHc5LI^mrFH_pkOZ0hdKwz_N*#b4x~FHpp`w=%|>1mdqcq%j`rRntL*3Oy{)l|VpP;3g!XufO@fnLzF| z$8p+7*a1iiQiE4}wKPC|b^T(lCa?gwK!IF&LEyn7*#cDsZU~$ZNN-6o0%t)4S}8rP zP_LU0Y9RL_;N#v*AVWM9Y2GyIs!`+1pX4}BA5vEU8WUo;TC)19KT>H%FO70dLPTiU zlx|iaoQlA7K%k_+WZni6VcTC%W(jZRC(DUEV%hzJR^2NFe*1aa(1qqyFL01zmnA}|&Zs4egu z3J7F8EP;<$mO#qFD9%yfI?$hjU%6v18xv^+%61F%?9FpV_vB5ZfBJ@TzI)EN-aV_` zuMHsZS|FQ(z!0FTI1o4|kWAni@c1WWO)&zeReaOy_l>M-f;*PV5s_uhy9J8-;l}p( zZR30Nj`2T!+oaz-Z_;m{H`aI0N*`4~m+NM>V!)~c0;3iM%u%42ZP5bV4YFu=bdfq$nRaz#K&q%3!i!gR z?ei!D{WWBhcqS;O!G?(;>9bvHhPqPe;Sk&0SHVp5olp#DA2{W?3lX)2AHvs z<2e0GTgae4`M+{qcSlu5AkCbOiUwnq#xKcG1Ap`NKqD~+IgT?PZ&q36Wk6!lGu(<9uIv7^%Dp#>NCbS6fNVm|#4ojc z>F8QzQg5GE=C1@kP9UKjBT(yf<4_e?{+D(@zr=?V7;5;$0=)#P-)h(odkK_kUNe4g zhT}MWN?i^}t35E1%1N&4j-_&h(%7XLmNbKx=I{>h@P;qcOw6(;zNKHOA2Dt(;dMY` zp9U#CN;N+M6j-*kztlLC1@;`09oPkSqqyqx5GWZFp=ARqj5%ilxlyD{<$T_IYMA@ewsUI0$*5{0Sll&h4Jl1F7n^5#6H=anUJz*r!%ntB3s{--w zClE0r0)>IPlJ*-{@fgQ(oSvnu0hC}}HLB_{uIo;#vy%7w05ZCFHC?+;??zYZ@600o zoLVAh??zR5XC;qj=g=$x*V?EXmrMe*H(u9am1>drqZ=aR(-E(^N z=6OSV{+jVTdPhXc&Aen_i~or=?NR@FN#zp|FOVa!DGS87RDdm2TOg1vw1PX9%3%}q zrZ|o>mhhJ{$on7xeSOLMi|a0pfuGe3%l}pk>E$cbp0Us4%f%|zR(KpBFu^kHnCAm_ z@5__~1_C__FX6i5DV*Rqj?+%Uc0dI&XN{p|h&#rbVdoH;NEsD_{`eH7ROTbi*6sCe z3cVg)EgyW7b=ZfrDBy^c1O@{=2`@Irnj!93D@OQ?HuQ}&@*z0({ucbob;p-KAySbs zs>c5ASt@YI4OJX6sHK1STzfBu*67dlVgs6A=%7I0ZP+^OD+C1g$Eche(9_5wuIrAs zV3OlFPK$B70aeAF;JV`~9_LftyUTiYZ?9R-vUd-6>hqH=l*|8eO@zvjstqk^Lo@Yi zCOH6deCbeQcKx1NA~rU5U<>~#HRYPiO{(>jpLIzJ<1rBU5@R9nCGY_XT#Sl9A0SU? zDc5z!RzAvSBso7wDIS4DqHo~EKXAuhHp-{Xr^ig}?n0ZosgwTmZ&UsMN6PiTKP^JF zN>#96!H)DK8mjo=6q0B?Kzi$e0nRNH8ynl>{&g_^qOgV70`mZYVJZS`fsV3Qb6t0g zHN(cAH_34vr_tC0fOaz1ahJwy;=lcGD*yeYQyZ8OeiMrSWy~%&Yu9F3yEm)WJM9j0 z_ihjy8ynlt>7`QWj~NMUx2;ql4}w?{z+>22+!E>g5S7f zsvgqU^rcKTbrw_k|0kW+AdQd$K(W7!S;m;V2EO#KSo59^tW{a~yp+acJ^~#qC1z28 zKpBPK1?o-O$7f8{Lk`+;9A_w*ziU5ntNwU@a9y|0nTwfi>ZE@E#}xkg&6NNBnR$Kh z&gk^&D?1`qx%Z9ADyMx0^Nb9R(La@!k9CB+;NtS@o}7Ac3rpkp+yvw>w0}b zrycXVTk%>Vz7A?%wLH`k}kugra_#F~56O7hQBw*$)TDz5(B++Hl1ofWVd+ znSPm7Y^cCftoGvs+FFDyFv@aRs8yUh0a7QaBJxeaf<@-5;`3DrdBO@4 z8^S_tfkr@PPqh>@TI+0n)vmKX)v*5-66vDJ%azu; zm7vP)hp5JrKXqbDZdW@Wv~S0Lrj+}3h*%y!blj`BGBduS4>1@&JazkB@t<0KFOFaO3WAS zopnkLFD6I1uI-!&3N7xtB6CC$*{X#-r%=2c6vpt*YwnOj=q=_(Ejl3YY%R!UN4<_}`B|zC#MlC)8fHRE1 zDnfD#om>q;&zlMSgJiB~`dX#6?m!hL9bI(!V0~XhX^zPq0V!OO?OIUVUpR*jFSwv5 zd{#g;vq5X!T2PtHF>|JX=vEFprBKlk1^L=K>C}qLRggfU-7_xeu>~3enLX2D&}gmi z#VB;UK#c>5T7~rrXmrJ?l~y8v){na2=gT$|?xew!h1R+qRhTrpmHZ5Bq*`sG2~b17 zQCokY`8^l>*pCL3)9JLcM5F)XZiAlwGORDrq*rPXs|96c4Er zM02+rt#wDLFbb7YB!I@(5~cRfxjTVO8A7d^E(6?I5F`-j)q$GVGOhIrnAARMfJ&N_ z($sbmlG`HN^`KPqPy*CBZh|0t1A$^ojMiHJvr(HT+#=yUrlu0wN67aqN_9^f;DLgn zU+oqW8RGu6))#LywG4>@5^AEYQ$gt|fku}TrG^$0psEfN4A}zffJ%m(*7~*H&LH%Z zK%Enb(y9X0_a#bAZ6rX&jVdS-C>saq(^QM9(OUOF6-JFLJD{{urPR!p1InsYO79IE zQ&4nA0uLa%u7g5r{ZU38T?$DJKnh2^hDv+q!U7>vx=?E4n9B!O7Zll>3zSlyXsz?- z^fQA{(P0JA|E98gsbU1&Q}!D{rQNe3kp!Gra3qlG<6th$-l(+J|6#OIKsDV)B~*;3 z;I-$b((&bxSO?s6a1<6e08~AbX|3=0?F?GlPecePGFvEB)S!TEQOR*5yal975W$fx zP#?(TnJ3m-XH|v4!={cCu*m7Dd<{^2pHZ1(3LEhLx$lJFNFd@lL3Bf>3a$0J8-&U% zS3pAxiOQ7&Kd2H)pCBNag_{VDY=N0TIUR}CI{!5r)H9s`<<}~eUreL}GNucqU4|qE zI=UEwq#KNbRPo}pwAP1ausJh_^*vjKV>t%6nw&R-O0f|EGvAybNg(Kl0X44%t##`` zWAGa{4YYCGDTIpk1mv5WN-4z(ex{9MNo3o-bnyZNep-<&&5$;9L*fbX*;TVM@P@leoOw-PjO=acoS zOJ)hUr)<}PLbE##D6>MTRMlmGr|uLk)GV}Q<=3e?Moq5UA@p{+{E$s$9jl^!RkW>& z;!6zhaMmPH3doQqTDa3_t>4*aj*9}C+H?vXoO26=jA=rprU3)gHJSKnYMC+>bU#&? zStqLKP!$*7ma19{nr^gWL#L~h zaRLySV_Wno0j1O$t+mdnGN0CuIUrMp_zkmAv7Q2+MWMm@1gN^pn5}sFBmtGTDucJX z<_mx4|7cegZK|r(pvkWzx=VHLW+~$ZAn^MBtV$qR0Z3+}>8q92x_wpntoVVzBHKIX z6dnXgnp&;0?9btpwE}hC-oGc{K{CcREq1V>|)=MWOxk;hy-Jbv5|Itg86X7j9cstp`;r zs?vUL=2}(X(W3gLtfGFmET5Jru!kai>L~`6R2Wa zxImZ{0;-w{T5H{|s`B_D6q??w;FccNEZbF=HeNv8lZnqY|MT{4{He7WRF{%p`}edO zK3mnkoxNc>9j>@?)13^J#6$uKA}a7(VCgh%OFuXunJXGSUumuNFXZyG&>V}*5s=gp zom_Edp|;P2YWhq)OYTGeV~1AYweoBKHhsNm@MKZTdREz3D5J#{U8vF}i^Qf#AO(Jm z6L>3d?8OC=hHY!VPJvrM_d{kQwbuHzHa?fi8eemJvB=wF+0CYb`eS?p`cWEO}y{`SN>e;NkZdZIo(%meT zG8PwrALAA(@KE5ez}yuRs3wr<$v4yvK95Ua3BVCmJ`tL`)%f8knz>#za<-~%yQpF! zl+~6LQ(_)Bxr==GvB1d*-1#hlDG&E~0;!iV#tvQuLJBO714x%5Djf-@zT77B-SY-d zRW+|?m5#VFnv$Xl&HpB`1^)cFlM}cquu)*_&dyLEnLv0u2>#2X@_{?~@>1)QiUwR2 z<6$`~=yj#kC7E+gnnbZc{22FfU9MMGr}S+C`2-Sds2xQAsgb|q3JAP-yx9r#6R6XL zK&%)$=>AKA>p++ODDYzf`?gk~$8HH^6o_O8?Z*b()~p0d3(Wr_vm+C@Ca_Il^0WWY zvTbPC4(`JOn*f3Swr&6AG#~8S1lsNFrV13C=7z@DQNkK-oa^mnZZ~fBOHQHzTV$q(5C$UW^59A6H=6gBL%jc!0uZB~U)b ziUhJR3dLt$wt(_O`-*wIz~(2no*%k5loue7Ie-W>E{yUs3na3d$GSIw)KZnKyYkJV zJTogncPWGd*w+~aj34?qAUeHNr5fR=$~CiMb(d5K0D<$fvKE10Hwq*c;;8C(x*Bu` zc%E0U(^ZBM5+VSBwc!A<2Wt%^M^t7O4LDt%=XrIx1FkC?n5(t?Cy+>ps;$N|t;j5* zA?^kP#EJpQgs9nWJkv6a4CwagtRyV37bw%nJjLR42MEj#49B&FKqY43nK$4L$S4gU z(9=o;B6JH$gs9u?@;t9Wr>kbWqgK1arxvFp8V>3-ceJxDknNFtE+!sQ3pIDo^X6Wo z-PG=Md7kH0WjDZ5Sjl4nnY6_7Jg-ze5d96F=gmEhPz1oejj?TeKEQQ(o;UZRbjO2N zZdIP=)#G#}MS#F-E7?(C6FkqW&mC|ckVcxhd!E;QX#zpqlG?T{&;&SW&-3bVx)KNh znWgbOZ|*6jf&x||kP|3MOFYk;`@TTYTH<-0mqDsP@WR(=+xAHTFXee&eNNXtKxumL zJa2823js%FB~Km?sidmk9pHIhT~1f&MmXqt+yS2F)$MeB3*6h*K3`{ht^#Ro+qSy_ z_Qmr&uQt2mrM{tlx6AXqSww@tB`f*Modl||8c(rYvjA?>4u~t&B}8w4r&y960D-Ai zVlOSQ59evNuIB;#QedzJ76RRqW)5c6+D#$=@t0{S0@42$=#Et1Z}fEc1#IDu2Z(>1 zBalTibvYeIRa@100P_f2ioMElz-^UcgzD|)JnMA2s|Q9a#5K;BuVN#|bR`F58mB0$G+;V1vN% k6Fa|yyBIs*ZsjWr44>}L2^?OzXP>6sx&J%&{}MnA0G-1irvLx| literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp index 1b9a6956b3acdc11f40ce2bb3f6efbd845cc243f..55cd2e2c975755cf690662b5c5eced00b5df3798 100644 GIT binary patch literal 8754 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 literal 3918 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 Ju`srr>T=#6U=l4L!Rc-10HHJbe5qcsYZ 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�(p-{x$&=IACIfoAR!za)F-^da-t3#0Dycnp zwO~NVXwXCl;jE<}>%@xz|=8fIJAB?>+E{7)|4l${4ngA3G|=r z2Dyv;VVWSgZx9Wj>qUjleGl3Ei9K4>h!(lPS%8VOG>Xu0%6VDz^O=bjJmuP7>DeUv zrbI}MlHB^^d?{zv6d=@_ZD2lg1&G7UjnVN{1}9WkaM3H~btX0GtSzB+tZ^qRgWo4m z!GmimlG$=wgXCnr6j@m<1gAL46#T~5Bnm=2{^@>|t&`9mkEPddj zAvG~@Tv~TAm2i%VW}R-g(Z0)z-Y|szHr@rk>4MAyG*Ma*7Yh#H7(!-5>DZ@8r;_dx z{prSe<>~099F8vsYd2xff7uAS%7{S)f(|@me3t2$iy&NEc7OUEchp@9A|X;;IA>8!oX+y(BKJ$EzV* znR$z;!L$s7uy@{OT~nG#B!NRraT8(X##Ho!0r_o@gg0CA-9H^;-uE&?$2$nHv_00o z%cbuUc-tCx$Uh&EZ4Nf4Zgqv)Y6>usG3>GeQnxx_Z6+PcbX-+ysbt1hQ`K1LDpOE? zrAhIZhSN9yVIAOa22gn577tbc&i3|3V8NWy&!tw##`}9*x}gtI^h1DzZRA>UuaJG) zaZ7j)dq!O}{?#8Y7~7i6fHh4{`pL?>-18|p!S75Y#^DM>-S3)vuZG+Q7l@ek zQP~#cBpWgg#mApc_sPYjpw8odQuRokmTkzcNl`^CcKB7e&;zViV;{Y{o^Y$%7i0m# z62%#1Lq!RC?}lK>%mp}T!3Xv;L*0v*>USLm``N%>w>@fwC+#T&Tx2bN4w(20JB}oU zuSa6v^kXi0xPs?pbaOHnyiqq6By1EZY9OZ^^QA>{q-Hsd&m`pbQ%8121aWG-F5xf zlZ%;B{;C>X19|`^_?dVyCq>n+41w7|!tUS!{9rHlbhX=SZO5CQ^;!Du_E7*`GiR^Q w)2!4MKjfSAeNRZBHhFpsUo^5 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

c1+M69Vo)83E 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 Utze#$GbB57_%C3m<@;~20i2g@%>V!Z literal 3844 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 Cy7f>1 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp index 9126ae37cbc3587421d6889eadd1d91fbf1994d4..8ac3f1d20cd5e79929eea84d5a4e4bc55da45a35 100644 GIT binary patch literal 18264 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 b3=gI)yKZ_e8dhA`$wkM79Sti=g^LmZO6p}R literal 7778 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

UmY2RIYtNPVDpE$%vda+HD#3m z&VuXJ{BK&Qe+rBa7eq}Q(bq|tn(RrJAk|ztj2(i{d>nmQnM?;HF2k&9sA6up5tmjl z7lySlzMbifH17-m-Lwa_F&e7nOH?ESi3#ckR3tsM+jsck3`oG!uMS}|eAwVXv>}qxwq?QY%QJ0}r@^;fhuUA9W z*BVl>TGo&N004@xSiwDUXUvp51sVmqO3m)=B55aPwf@0=e}cN+$-BdKxY`YrT_4)0 z_d10#i44Q*rFr8MC>*)v$EJvz``(pb{e&*6k+b zsMz%($|1+8hn8c2?P(l@;Rb&CsZeYoCI3?2!LqjbwPXW3z4G$Qfj=cT5Yb%vY0(AX oeb?AaKtwrnc|$|zzw9vfvn^aJJ!zd)XFXqqy0000001=f@-~a#s diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fdd5850..84514c5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,92 @@ Despensapp + + + Error al conectar con la base de datos + Cargando... + Volver + Cerrar + Añadir + Guardar + Borrar + Cancelar + Editar + Compartir + Cerrar Sesión + Encender Flash + Apagar Flash + Error al cargar productos: %1$s + Hay que comprar lo siguiente:\n%1$s + + + Bienvenido a Despensapp + Correo Electrónico + Contraseña + Iniciar Sesión + ¿No tienes cuenta? Regístrate aquí + Introduce tus credenciales + Error: %1$s + + + Crear Cuenta Familiar + Nombre Completo + Código de Familia (Opcional) + Para unirse a una despensa existente + Registrarse + ¿Ya tienes cuenta? Inicia sesión + Por favor, rellena todos los campos + + + Mi Despensa + Lista de la Compra + Buscar productos... + Limpiar + Escanear + Caducidad + Stock Bajo + Todas + ¡Genial! No falta nada en la despensa. + No hay productos próximos a caducar. + No se encontraron productos para \"%1$s\". + La despensa está vacía. + Producto eliminado: %1$s + Error al eliminar de la base de datos + Stock Bajo + %1$s %2$s + CADUCADO: %1$s + Caduca: %1$s + Añadido: %1$s + + + Añadir Producto + Producto detectado: %1$s + Nombre del Producto + Unidad de Medida + Elegir Fecha de Caducidad + Caduca: %1$s + Cantidad: %1$d + Menos + Más + Guardar en Despensa + Escanear otro + Se necesita permiso de cámara para escanear + + + Detalles del Producto + Editar Producto + Stock actual + Alerta stock bajo + Menos de %1$s %2$s + Fecha de caducidad + Fecha de alta + Categoría + Cantidad Mínima + Información de MariaDB + ID interno: %1$d + Servidor: mariadb.peta9.com + + + ¡Revisa tu despensa! + Tienes %1$d productos con stock bajo. + Alertas de Inventario \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index eaf63d0..b148454 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,6 +8,15 @@ lifecycleRuntimeKtx = "2.11.0" activityCompose = "1.13.0" kotlin = "2.2.10" composeBom = "2026.02.01" +navigationCompose = "2.8.5" +retrofit = "2.11.0" +okhttp = "4.12.0" +mariadbJavaClient = "3.5.10" +camerax = "1.4.1" +barcodeScanning = "17.3.0" +coil = "2.7.0" +workManager = "2.10.0" +room = "2.6.1" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } @@ -24,6 +33,23 @@ androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "u androidx-compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" } +androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" } +retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" } +retrofit-gson = { group = "com.squareup.retrofit2", name = "converter-gson", version.ref = "retrofit" } +okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" } +okhttp-logging = { group = "com.squareup.okhttp3", name = "logging-interceptor", version.ref = "okhttp" } +mariadb-java-client = { group = "org.mariadb.jdbc", name = "mariadb-java-client", version.ref = "mariadbJavaClient" } +androidx-camera-core = { group = "androidx.camera", name = "camera-core", version.ref = "camerax" } +androidx-camera-camera2 = { group = "androidx.camera", name = "camera-camera2", version.ref = "camerax" } +androidx-camera-lifecycle = { group = "androidx.camera", name = "camera-lifecycle", version.ref = "camerax" } +androidx-camera-view = { group = "androidx.camera", name = "camera-view", version.ref = "camerax" } +barcode-scanning = { group = "com.google.mlkit", name = "barcode-scanning", version.ref = "barcodeScanning" } +coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" } +androidx-work-runtime = { group = "androidx.work", name = "work-runtime-ktx", version.ref = "workManager" } +androidx-room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" } +androidx-room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" } +androidx-room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" } +material-icons-extended = { group = "androidx.compose.material", name = "material-icons-extended" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" }