diff --git a/app/src/main/java/com/example/android_programming/composeui/Navigation/NavController.kt b/app/src/main/java/com/example/android_programming/composeui/Navigation/NavController.kt index 1c34571..a2b597e 100644 --- a/app/src/main/java/com/example/android_programming/composeui/Navigation/NavController.kt +++ b/app/src/main/java/com/example/android_programming/composeui/Navigation/NavController.kt @@ -18,12 +18,13 @@ import com.example.android_programming.composeui.Screens.ProfileScreen.Profile.P import com.example.android_programming.composeui.Screens.ProfileScreen.SignIn.LoginScreen import com.example.android_programming.composeui.Screens.ProfileScreen.SignUp.SignUpScreen import com.example.android_programming.model.Sneaker +import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.vmodel.OrderViewModel import com.google.gson.Gson @Composable fun NavController(navController: NavHostController){ - var orderViewModel: OrderViewModel = viewModel(factory = OrderViewModel.factory) + var orderViewModel: OrderViewModel = viewModel(factory = AppViewModelProvider.Factory) NavHost( navController = navController, startDestination = NavItem.Home.route @@ -35,7 +36,7 @@ fun NavController(navController: NavHostController){ MyOrderScreen(orderViewModel) } composable(NavItem.Order.route){ - OrderScreen(orderViewModel, navController) + OrderScreen(navController, orderViewModel) } composable(NavItem.Profile.route){ ProfileScreen(navController) diff --git a/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/AddPanel.kt b/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/AddPanel.kt index e133f75..1c36490 100644 --- a/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/AddPanel.kt +++ b/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/AddPanel.kt @@ -35,10 +35,11 @@ import androidx.compose.ui.unit.sp import androidx.lifecycle.viewmodel.compose.viewModel import com.example.android_programming.R import com.example.android_programming.model.PhotoManager +import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.vmodel.SneakerViewModel @Composable -fun AddPanel(sneakerViewModel: SneakerViewModel = viewModel(factory = SneakerViewModel.factory)){ +fun AddPanel(sneakerViewModel: SneakerViewModel = viewModel(factory = AppViewModelProvider.Factory)){ val photoManager = PhotoManager() Row( modifier = Modifier diff --git a/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/CardSneakerForChange.kt b/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/CardSneakerForChange.kt index 9340e52..8fe0db7 100644 --- a/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/CardSneakerForChange.kt +++ b/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/CardSneakerForChange.kt @@ -30,11 +30,12 @@ import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavHostController import com.example.android_programming.R import com.example.android_programming.model.Sneaker +import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.vmodel.SneakerViewModel import com.google.gson.Gson @Composable -fun CardSneakerForChange(item: Sneaker, navController: NavHostController, sneakerViewModel: SneakerViewModel = viewModel(factory = SneakerViewModel.factory)) { +fun CardSneakerForChange(item: Sneaker, navController: NavHostController, sneakerViewModel: SneakerViewModel = viewModel(factory = AppViewModelProvider.Factory)) { Row( modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/ChangePanel.kt b/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/ChangePanel.kt index 0e275ef..88db2af 100644 --- a/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/ChangePanel.kt +++ b/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/ChangePanel.kt @@ -14,10 +14,11 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavHostController +import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.vmodel.SneakerViewModel @Composable -fun ChangePanel(navHostController: NavHostController, sneakerViewModel: SneakerViewModel = viewModel(factory = SneakerViewModel.factory)) { +fun ChangePanel(navHostController: NavHostController, sneakerViewModel: SneakerViewModel = viewModel(factory = AppViewModelProvider.Factory)) { val list = sneakerViewModel.SneakerList.collectAsState(initial = emptyList()).value Column( modifier = Modifier diff --git a/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/ChangeSneaker.kt b/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/ChangeSneaker.kt index 337c19e..0f8460f 100644 --- a/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/ChangeSneaker.kt +++ b/app/src/main/java/com/example/android_programming/composeui/Screens/AdminPanel/ChangeSneaker.kt @@ -43,10 +43,11 @@ import androidx.lifecycle.viewmodel.compose.viewModel import com.example.android_programming.R import com.example.android_programming.model.PhotoManager import com.example.android_programming.model.Sneaker +import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.vmodel.SneakerViewModel @Composable -fun ChangeSneaker(sneaker: Sneaker, onBackClick: () -> Unit, sneakerViewModel: SneakerViewModel = viewModel(factory = SneakerViewModel.factory)) { +fun ChangeSneaker(sneaker: Sneaker, onBackClick: () -> Unit, sneakerViewModel: SneakerViewModel = viewModel(factory = AppViewModelProvider.Factory)) { val brand = remember {mutableStateOf(sneaker.brand)} val model = remember{mutableStateOf(sneaker.model)} val description = remember{mutableStateOf(sneaker.description)} diff --git a/app/src/main/java/com/example/android_programming/composeui/Screens/HomeScreen/HomeScreen.kt b/app/src/main/java/com/example/android_programming/composeui/Screens/HomeScreen/HomeScreen.kt index bdd30e9..e224d89 100644 --- a/app/src/main/java/com/example/android_programming/composeui/Screens/HomeScreen/HomeScreen.kt +++ b/app/src/main/java/com/example/android_programming/composeui/Screens/HomeScreen/HomeScreen.kt @@ -17,11 +17,13 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavHostController import com.example.android_programming.composeui.Screens.HomeScreen.FilterByBrand.FilterByBrand import com.example.android_programming.composeui.Screens.HomeScreen.SearchField.SearchField import com.example.android_programming.composeui.Screens.HomeScreen.SneakerRecyclerView.RecyclerView import com.example.android_programming.model.Sneaker +import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.vmodel.OrderViewModel @Composable diff --git a/app/src/main/java/com/example/android_programming/composeui/Screens/HomeScreen/SneakerRecyclerView/RecyclerView.kt b/app/src/main/java/com/example/android_programming/composeui/Screens/HomeScreen/SneakerRecyclerView/RecyclerView.kt index b8d0d94..236182d 100644 --- a/app/src/main/java/com/example/android_programming/composeui/Screens/HomeScreen/SneakerRecyclerView/RecyclerView.kt +++ b/app/src/main/java/com/example/android_programming/composeui/Screens/HomeScreen/SneakerRecyclerView/RecyclerView.kt @@ -12,11 +12,12 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavHostController +import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.vmodel.OrderViewModel import com.example.android_programming.vmodel.SneakerViewModel @Composable -fun RecyclerView(navHostController : NavHostController, orderViewModel: OrderViewModel, sneakerViewModel: SneakerViewModel = viewModel(factory = SneakerViewModel.factory)) { +fun RecyclerView(navHostController : NavHostController, orderViewModel: OrderViewModel, sneakerViewModel: SneakerViewModel = viewModel(factory = AppViewModelProvider.Factory)) { Column( modifier = Modifier .fillMaxSize() diff --git a/app/src/main/java/com/example/android_programming/composeui/Screens/MyOrderScreen/MyOrderScreen.kt b/app/src/main/java/com/example/android_programming/composeui/Screens/MyOrderScreen/MyOrderScreen.kt index 1e6cce9..2b65a1a 100644 --- a/app/src/main/java/com/example/android_programming/composeui/Screens/MyOrderScreen/MyOrderScreen.kt +++ b/app/src/main/java/com/example/android_programming/composeui/Screens/MyOrderScreen/MyOrderScreen.kt @@ -11,21 +11,25 @@ import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue 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.lifecycle.viewmodel.compose.viewModel import com.example.android_programming.GlobalUser import com.example.android_programming.model.Order +import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.vmodel.OrderViewModel +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch @Composable fun MyOrderScreen(orderViewModel: OrderViewModel) { - val userWithOrder by orderViewModel.database.userDao().getUserOrders(GlobalUser.getInstance().getUser()?.userId!!).collectAsState(null) + /*val userWithOrder by orderViewModel.database.userDao().getUserOrders(GlobalUser.getInstance().getUser()?.userId!!).collectAsState(null)*/ + val userId = GlobalUser.getInstance().getUser()?.userId + val userWithOrder = orderViewModel.getOrderList(userId!!).collectAsState(null).value?.orders - val orderList: List? = userWithOrder?.orders - println() Column( modifier = Modifier .padding(bottom = 50.dp) @@ -46,8 +50,8 @@ fun MyOrderScreen(orderViewModel: OrderViewModel) { modifier = Modifier .fillMaxSize() ) { - if (orderList != null) { - for (item in orderList) { + if (userWithOrder != null) { + for (item in userWithOrder) { OrderCard(item, orderViewModel) } } diff --git a/app/src/main/java/com/example/android_programming/composeui/Screens/MyOrderScreen/OrderCard.kt b/app/src/main/java/com/example/android_programming/composeui/Screens/MyOrderScreen/OrderCard.kt index 2b7b882..a609204 100644 --- a/app/src/main/java/com/example/android_programming/composeui/Screens/MyOrderScreen/OrderCard.kt +++ b/app/src/main/java/com/example/android_programming/composeui/Screens/MyOrderScreen/OrderCard.kt @@ -31,11 +31,8 @@ import java.util.Date @Composable fun OrderCard(order: Order, orderViewModel: OrderViewModel){ - val SneakerList = order.orderId?.let { - orderViewModel.database.orderDao().getOrderWithSneakers( - it - ) - } + val SneakerList = order?.orderId?.let { orderViewModel.getOrderWithSneakers(it) } + val sneakerWithOrder by SneakerList!!.collectAsState(null) val sneakerList: List? = sneakerWithOrder?.sneakers diff --git a/app/src/main/java/com/example/android_programming/composeui/Screens/OrderScreen/OrderScreen.kt b/app/src/main/java/com/example/android_programming/composeui/Screens/OrderScreen/OrderScreen.kt index 9bc230a..eea7d0f 100644 --- a/app/src/main/java/com/example/android_programming/composeui/Screens/OrderScreen/OrderScreen.kt +++ b/app/src/main/java/com/example/android_programming/composeui/Screens/OrderScreen/OrderScreen.kt @@ -15,14 +15,16 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.colorResource import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavHostController import com.example.android_programming.GlobalUser import com.example.android_programming.R +import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.vmodel.OrderViewModel @Composable -fun OrderScreen(orderViewModel: OrderViewModel, navHostController: NavHostController) { +fun OrderScreen(navHostController: NavHostController, orderViewModel: OrderViewModel) { Column( modifier = Modifier .fillMaxSize() diff --git a/app/src/main/java/com/example/android_programming/composeui/Screens/ProfileScreen/SignIn/SignInCard.kt b/app/src/main/java/com/example/android_programming/composeui/Screens/ProfileScreen/SignIn/SignInCard.kt index 06d8a71..a656dd8 100644 --- a/app/src/main/java/com/example/android_programming/composeui/Screens/ProfileScreen/SignIn/SignInCard.kt +++ b/app/src/main/java/com/example/android_programming/composeui/Screens/ProfileScreen/SignIn/SignInCard.kt @@ -38,10 +38,11 @@ import androidx.compose.ui.unit.sp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavHostController import com.example.android_programming.R +import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.vmodel.UserViewModel @Composable -fun SignInCard(navController: NavHostController, userViewModel: UserViewModel = viewModel(factory = UserViewModel.factory)) { +fun SignInCard(navController: NavHostController, userViewModel: UserViewModel = viewModel(factory = AppViewModelProvider.Factory)) { Row( modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/java/com/example/android_programming/composeui/Screens/ProfileScreen/SignUp/SignUpCard.kt b/app/src/main/java/com/example/android_programming/composeui/Screens/ProfileScreen/SignUp/SignUpCard.kt index f13387e..eca7d8b 100644 --- a/app/src/main/java/com/example/android_programming/composeui/Screens/ProfileScreen/SignUp/SignUpCard.kt +++ b/app/src/main/java/com/example/android_programming/composeui/Screens/ProfileScreen/SignUp/SignUpCard.kt @@ -32,10 +32,11 @@ import androidx.compose.ui.unit.sp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavHostController import com.example.android_programming.R +import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.vmodel.UserViewModel @Composable -fun SignUpCard(navHostController: NavHostController, userViewModel: UserViewModel = viewModel(factory = UserViewModel.factory)) { +fun SignUpCard(navHostController: NavHostController, userViewModel: UserViewModel = viewModel(factory = AppViewModelProvider.Factory)) { Row( modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/java/com/example/android_programming/dao/OrderDao.kt b/app/src/main/java/com/example/android_programming/dao/OrderDao.kt index 566b1e1..69c7c35 100644 --- a/app/src/main/java/com/example/android_programming/dao/OrderDao.kt +++ b/app/src/main/java/com/example/android_programming/dao/OrderDao.kt @@ -7,6 +7,7 @@ import androidx.room.Query import com.example.android_programming.model.Order import com.example.android_programming.model.OrderSneaker import com.example.android_programming.model.OrderWithSneakers +import com.example.android_programming.model.UserWithOrder import kotlinx.coroutines.flow.Flow @Dao @@ -26,4 +27,7 @@ interface OrderDao { @Delete suspend fun delete(order: Order) + + @Query("SELECT * FROM users WHERE userId =:id") + fun getUserOrders(id: Int) : Flow } \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/dao/UserDao.kt b/app/src/main/java/com/example/android_programming/dao/UserDao.kt index 2450b3d..526385e 100644 --- a/app/src/main/java/com/example/android_programming/dao/UserDao.kt +++ b/app/src/main/java/com/example/android_programming/dao/UserDao.kt @@ -25,7 +25,4 @@ interface UserDao { @Query("SELECT * FROM users WHERE email = :email") suspend fun getUserByEmail(email: String): User - - @Query("SELECT * FROM users WHERE userId =:id") - fun getUserOrders(id: Int) : Flow } \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/repository/OrderRepoImpl.kt b/app/src/main/java/com/example/android_programming/repository/OrderRepoImpl.kt index a1e5e13..9b5b49d 100644 --- a/app/src/main/java/com/example/android_programming/repository/OrderRepoImpl.kt +++ b/app/src/main/java/com/example/android_programming/repository/OrderRepoImpl.kt @@ -4,6 +4,7 @@ import com.example.android_programming.dao.OrderDao import com.example.android_programming.model.Order import com.example.android_programming.model.OrderSneaker import com.example.android_programming.model.OrderWithSneakers +import com.example.android_programming.model.UserWithOrder import kotlinx.coroutines.flow.Flow class OrderRepoImpl(private val orderDao: OrderDao) : OrderRepository { @@ -17,4 +18,6 @@ class OrderRepoImpl(private val orderDao: OrderDao) : OrderRepository { override fun getOrderWithSneakers(id: Int): Flow = orderDao.getOrderWithSneakers(id) override fun getAllOrder(): Flow> = orderDao.getAllOrder() + + override fun getUserOrders(id: Int): Flow = orderDao.getUserOrders(id) } \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/repository/OrderRepository.kt b/app/src/main/java/com/example/android_programming/repository/OrderRepository.kt index 6f7b760..f9c2f14 100644 --- a/app/src/main/java/com/example/android_programming/repository/OrderRepository.kt +++ b/app/src/main/java/com/example/android_programming/repository/OrderRepository.kt @@ -3,6 +3,7 @@ package com.example.android_programming.repository import com.example.android_programming.model.Order import com.example.android_programming.model.OrderSneaker import com.example.android_programming.model.OrderWithSneakers +import com.example.android_programming.model.UserWithOrder import kotlinx.coroutines.flow.Flow interface OrderRepository { @@ -11,4 +12,5 @@ interface OrderRepository { suspend fun delete(order: Order) fun getOrderWithSneakers(id: Int): Flow fun getAllOrder(): Flow> + fun getUserOrders(id: Int) : Flow } \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/repository/UserRepoImpl.kt b/app/src/main/java/com/example/android_programming/repository/UserRepoImpl.kt index d210b13..f45d18b 100644 --- a/app/src/main/java/com/example/android_programming/repository/UserRepoImpl.kt +++ b/app/src/main/java/com/example/android_programming/repository/UserRepoImpl.kt @@ -16,6 +16,4 @@ class UserRepoImpl(private val userDao: UserDao) : UserRepository { override suspend fun getUserById(id: Int): User = userDao.getUserById(id) override suspend fun getUserByEmail(email: String): User = userDao.getUserByEmail(email) - - override fun getUserOrders(id: Int): Flow = userDao.getUserOrders(id) } \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/repository/UserRepository.kt b/app/src/main/java/com/example/android_programming/repository/UserRepository.kt index 6bfcf0b..9a3cfaf 100644 --- a/app/src/main/java/com/example/android_programming/repository/UserRepository.kt +++ b/app/src/main/java/com/example/android_programming/repository/UserRepository.kt @@ -10,5 +10,4 @@ interface UserRepository { suspend fun deleteUser(user: User) suspend fun getUserById(id: Int): User suspend fun getUserByEmail(email: String): User - fun getUserOrders(id: Int) : Flow } \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/vmodel/AppViewModelProvider.kt b/app/src/main/java/com/example/android_programming/vmodel/AppViewModelProvider.kt new file mode 100644 index 0000000..2db2622 --- /dev/null +++ b/app/src/main/java/com/example/android_programming/vmodel/AppViewModelProvider.kt @@ -0,0 +1,24 @@ +package com.example.android_programming.vmodel + +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.viewmodel.CreationExtras +import androidx.lifecycle.viewmodel.initializer +import androidx.lifecycle.viewmodel.viewModelFactory +import com.example.android_programming.App + +object AppViewModelProvider { + val Factory = viewModelFactory { + initializer { + SneakerViewModel(app().container.sneakerRepo) + } + initializer { + UserViewModel(app().container.userRepo) + } + initializer { + OrderViewModel(app().container.orderRepo) + } + } +} + +fun CreationExtras.app(): App = + (this[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY] as App) \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/vmodel/OrderViewModel.kt b/app/src/main/java/com/example/android_programming/vmodel/OrderViewModel.kt index ca7f62c..6fdd4f5 100644 --- a/app/src/main/java/com/example/android_programming/vmodel/OrderViewModel.kt +++ b/app/src/main/java/com/example/android_programming/vmodel/OrderViewModel.kt @@ -1,6 +1,8 @@ package com.example.android_programming.vmodel import androidx.compose.runtime.mutableStateOf +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope @@ -10,11 +12,17 @@ import com.example.android_programming.GlobalUser import com.example.android_programming.database.AppDatabase import com.example.android_programming.model.Order import com.example.android_programming.model.OrderSneaker +import com.example.android_programming.model.OrderWithSneakers import com.example.android_programming.model.Sneaker +import com.example.android_programming.model.UserWithOrder +import com.example.android_programming.repository.OrderRepository +import com.example.android_programming.repository.SneakerRepository +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import java.util.Date -class OrderViewModel(val database: AppDatabase) : ViewModel() { +class OrderViewModel(private val orderRepository: OrderRepository) : ViewModel() { private var _selectedItems = mutableStateOf>(emptyList()) val selectedItems get() = _selectedItems.value var city = mutableStateOf("") @@ -26,11 +34,11 @@ class OrderViewModel(val database: AppDatabase) : ViewModel() { } fun deleteOrder(order: Order) = viewModelScope.launch { - database.orderDao().delete(order) + orderRepository.delete(order) } - fun getOrderList(id: Int) = viewModelScope.launch { - database.userDao().getUserOrders(id) + fun getOrderList(id: Int) : Flow { + return orderRepository.getUserOrders(id) } fun removeSelectedItem(item: Sneaker) { @@ -39,6 +47,10 @@ class OrderViewModel(val database: AppDatabase) : ViewModel() { _selectedItems.value = updatedItems } + fun getOrderWithSneakers(id: Int) : Flow { + return orderRepository.getOrderWithSneakers(id) + } + fun createOrder() = viewModelScope.launch { val order = Order( date = Date().time, @@ -51,11 +63,12 @@ class OrderViewModel(val database: AppDatabase) : ViewModel() { creatorUserId = GlobalUser.getInstance().getUser()?.userId!! ) - val orderId = database.orderDao().createOrder(order) + val orderId = orderRepository.createOrder(order) + for (sneaker in selectedItems) { val orderSneaker = OrderSneaker( orderId.toInt(), sneaker.sneakerId!!) - database.orderDao().insertOrderSneaker(orderSneaker) + orderRepository.insertOrderSneaker(orderSneaker) } city.value = "" street.value = "" @@ -66,16 +79,4 @@ class OrderViewModel(val database: AppDatabase) : ViewModel() { fun getSubTotal(): Double { return selectedItems.sumOf { it.price } } - - companion object{ - val factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory{ - override fun create( - modelClass: Class, - extras: CreationExtras - ): T { - val database = (checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY]) as App).database - return OrderViewModel(database) as T - } - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/vmodel/SneakerViewModel.kt b/app/src/main/java/com/example/android_programming/vmodel/SneakerViewModel.kt index a2fe811..87d5f94 100644 --- a/app/src/main/java/com/example/android_programming/vmodel/SneakerViewModel.kt +++ b/app/src/main/java/com/example/android_programming/vmodel/SneakerViewModel.kt @@ -10,15 +10,16 @@ import com.example.android_programming.App import com.example.android_programming.R import com.example.android_programming.database.AppDatabase import com.example.android_programming.model.Sneaker +import com.example.android_programming.repository.SneakerRepository import kotlinx.coroutines.launch -class SneakerViewModel(val database: AppDatabase): ViewModel() { +class SneakerViewModel(private val sneakerRepository: SneakerRepository): ViewModel() { var brand = mutableStateOf("") val model = mutableStateOf("") val description = mutableStateOf("") val price = mutableStateOf("") val photo = mutableStateOf(R.drawable.img) - val SneakerList = database.sneakerDao().getAllSneakers() + val SneakerList = sneakerRepository.getAllSneakers() var sneaker: Sneaker? = null fun insertSneaker() = viewModelScope.launch { @@ -29,29 +30,18 @@ class SneakerViewModel(val database: AppDatabase): ViewModel() { price = price.value.toDouble(), photo = photo.value ) - database.sneakerDao().insert(sneaker) + sneakerRepository.insertSneaker(sneaker) } fun deleteSneaker(sneaker : Sneaker) = viewModelScope.launch { - database.sneakerDao().delete(sneaker) + sneakerRepository.deleteSneaker(sneaker) } fun getSneakerById(id: Int) = viewModelScope.launch { - database.sneakerDao().getSneakerById(id) + sneakerRepository.getSneakerById(id) } fun UpdateSneaker(sneaker: Sneaker) = viewModelScope.launch { - database.sneakerDao().update(sneaker) - } - - companion object{ - val factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory{ - override fun create( - modelClass: Class, - extras: CreationExtras): T { - val database = (checkNotNull(extras[APPLICATION_KEY]) as App).database - return SneakerViewModel(database) as T - } - } + sneakerRepository.updateSneaker(sneaker) } } \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/vmodel/UserViewModel.kt b/app/src/main/java/com/example/android_programming/vmodel/UserViewModel.kt index ea54c21..077807b 100644 --- a/app/src/main/java/com/example/android_programming/vmodel/UserViewModel.kt +++ b/app/src/main/java/com/example/android_programming/vmodel/UserViewModel.kt @@ -10,9 +10,11 @@ import com.example.android_programming.GlobalUser import com.example.android_programming.database.AppDatabase import com.example.android_programming.model.RoleEnum import com.example.android_programming.model.User +import com.example.android_programming.repository.SneakerRepository +import com.example.android_programming.repository.UserRepository import kotlinx.coroutines.launch -class UserViewModel(val database: AppDatabase): ViewModel() { +class UserViewModel(private val userRepository: UserRepository): ViewModel() { var name = mutableStateOf("") val surname = mutableStateOf("") @@ -26,10 +28,10 @@ class UserViewModel(val database: AppDatabase): ViewModel() { password = password.value, role = RoleEnum.User ) - database.userDao().createUser(user) + userRepository.createUser(user) } fun authUser() = viewModelScope.launch { - val user = database.userDao().getUserByEmail(email.value) + val user = userRepository.getUserByEmail(email.value) if (password.value != "" && user.password == password.value) { val globalUser = GlobalUser.getInstance() globalUser.setUser(user) @@ -39,16 +41,4 @@ class UserViewModel(val database: AppDatabase): ViewModel() { fun isValidEmail(email: String): Boolean { return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches() } - - companion object{ - val factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory{ - override fun create( - modelClass: Class, - extras: CreationExtras - ): T { - val database = (checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY]) as App).database - return UserViewModel(database) as T - } - } - } } \ No newline at end of file