From 638b9d6aaf60600887164aff83884d80718cf9b6 Mon Sep 17 00:00:00 2001 From: Zyzf Date: Mon, 4 Dec 2023 22:53:03 +0400 Subject: [PATCH] fixed warning, fixed pullrefresh items --- app/build.gradle.kts | 14 ++-- .../coffeepreorder/database/dao/CoffeeDao.kt | 1 - .../coffeepreorder/database/model/Coffee.kt | 2 +- .../com/zyzf/coffeepreorder/ui/cart/Cart.kt | 53 ++++++-------- .../coffeepreorder/ui/coffee/CoffeeList.kt | 73 +++++++++---------- .../ui/coffee/CoffeeListViewModel.kt | 2 +- .../com/zyzf/coffeepreorder/ui/login/Login.kt | 2 +- .../ui/navigation/MainNavbar.kt | 7 +- .../coffeepreorder/ui/navigation/Screen.kt | 2 +- app/src/main/res/drawable/img.xml | 2 +- 10 files changed, 68 insertions(+), 90 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f430fa4..e1f9abb 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -75,16 +75,16 @@ dependencies { implementation("androidx.compose.ui:ui-graphics:1.6.0-beta02") implementation("androidx.compose.ui:ui-tooling-preview:1.6.0-beta02") implementation("androidx.compose.material3:material3:1.1.2") - implementation("androidx.compose.material:material:1.5.4") implementation("androidx.paging:paging-compose:3.2.1") + implementation("eu.bambooapps:compose-material3-pullrefresh:1.0.0") // Room - val room_version = "2.6.1" - implementation("androidx.room:room-runtime:$room_version") - annotationProcessor("androidx.room:room-compiler:$room_version") - ksp("androidx.room:room-compiler:$room_version") - implementation("androidx.room:room-ktx:$room_version") - implementation("androidx.room:room-paging:$room_version") + val roomVersion = "2.6.1" + implementation("androidx.room:room-runtime:$roomVersion") + annotationProcessor("androidx.room:room-compiler:$roomVersion") + ksp("androidx.room:room-compiler:$roomVersion") + implementation("androidx.room:room-ktx:$roomVersion") + implementation("androidx.room:room-paging:$roomVersion") // Tests testImplementation("junit:junit:4.13.2") diff --git a/app/src/main/java/com/zyzf/coffeepreorder/database/dao/CoffeeDao.kt b/app/src/main/java/com/zyzf/coffeepreorder/database/dao/CoffeeDao.kt index 60a47a0..14974be 100644 --- a/app/src/main/java/com/zyzf/coffeepreorder/database/dao/CoffeeDao.kt +++ b/app/src/main/java/com/zyzf/coffeepreorder/database/dao/CoffeeDao.kt @@ -6,7 +6,6 @@ import androidx.room.Delete import androidx.room.Query import com.zyzf.coffeepreorder.database.model.Coffee import com.zyzf.coffeepreorder.database.model.CoffeeWithCart -import kotlinx.coroutines.flow.Flow @Dao interface CoffeeDao { diff --git a/app/src/main/java/com/zyzf/coffeepreorder/database/model/Coffee.kt b/app/src/main/java/com/zyzf/coffeepreorder/database/model/Coffee.kt index a9eaa0f..a9008c8 100644 --- a/app/src/main/java/com/zyzf/coffeepreorder/database/model/Coffee.kt +++ b/app/src/main/java/com/zyzf/coffeepreorder/database/model/Coffee.kt @@ -59,6 +59,6 @@ data class Coffee( } override fun hashCode(): Int { - return uid ?: -1 + return uid } } \ No newline at end of file diff --git a/app/src/main/java/com/zyzf/coffeepreorder/ui/cart/Cart.kt b/app/src/main/java/com/zyzf/coffeepreorder/ui/cart/Cart.kt index 4bc8352..5d82c4f 100644 --- a/app/src/main/java/com/zyzf/coffeepreorder/ui/cart/Cart.kt +++ b/app/src/main/java/com/zyzf/coffeepreorder/ui/cart/Cart.kt @@ -1,6 +1,5 @@ package com.zyzf.coffeepreorder.ui.cart -import android.content.Context import android.content.res.Configuration import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -13,32 +12,25 @@ import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.filled.Clear -import androidx.compose.material.pullrefresh.PullRefreshIndicator -import androidx.compose.material.pullrefresh.rememberPullRefreshState import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExtendedFloatingActionButton -import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TextButton -import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope @@ -62,20 +54,17 @@ import androidx.paging.compose.itemKey import coil.compose.AsyncImage import coil.request.ImageRequest import com.zyzf.coffeepreorder.R -import com.zyzf.coffeepreorder.database.AppDatabase import com.zyzf.coffeepreorder.database.model.Coffee import com.zyzf.coffeepreorder.ui.AppViewModelProvider -import com.zyzf.coffeepreorder.ui.coffee.CoffeeList -import com.zyzf.coffeepreorder.ui.coffee.CoffeeListViewModel import com.zyzf.coffeepreorder.ui.navigation.Screen import com.zyzf.coffeepreorder.ui.theme.CoffeePreorderTheme -import kotlinx.coroutines.DelicateCoroutinesApi -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope +import eu.bambooapps.material3.pullrefresh.PullRefreshIndicator +import eu.bambooapps.material3.pullrefresh.pullRefresh +import eu.bambooapps.material3.pullrefresh.rememberPullRefreshState import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -@OptIn(DelicateCoroutinesApi::class, ExperimentalMaterialApi::class) + +@OptIn(ExperimentalMaterial3Api::class) @Composable fun Cart( navController: NavController?, @@ -106,21 +95,21 @@ fun Cart( ) } ) { innerPadding -> - PullRefreshIndicator( - refreshing, state, - Modifier - .zIndex(100f) - ) - CartList( - modifier = Modifier - .padding(innerPadding) - .fillMaxSize(), - coffeeList = coffeeListUiState, - onDeleteFromCartClick = {currentCoffee: Coffee -> - coffee.value = currentCoffee - openDialog.value = true - } - ) + Box (modifier = Modifier.padding(0.dp).pullRefresh(state)) { + PullRefreshIndicator(refreshing = refreshing, state = state, + modifier = Modifier.zIndex(100f).align(Alignment.TopCenter) + ) + CartList( + modifier = Modifier + .padding(innerPadding).pullRefresh(state) + .fillMaxSize(), + coffeeList = coffeeListUiState, + onDeleteFromCartClick = {currentCoffee: Coffee -> + coffee.value = currentCoffee + openDialog.value = true + } + ) + } } DeleteFromCartAlertDialog( openDialog = openDialog, diff --git a/app/src/main/java/com/zyzf/coffeepreorder/ui/coffee/CoffeeList.kt b/app/src/main/java/com/zyzf/coffeepreorder/ui/coffee/CoffeeList.kt index 204c359..f5a22f1 100644 --- a/app/src/main/java/com/zyzf/coffeepreorder/ui/coffee/CoffeeList.kt +++ b/app/src/main/java/com/zyzf/coffeepreorder/ui/coffee/CoffeeList.kt @@ -11,6 +11,7 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer @@ -20,18 +21,12 @@ import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.foundation.verticalScroll -import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.outlined.Create -import androidx.compose.material.pullrefresh.PullRefreshIndicator -import androidx.compose.material.pullrefresh.rememberPullRefreshState import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ExperimentalMaterial3Api @@ -48,7 +43,6 @@ import androidx.compose.material3.Text import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableDoubleStateOf import androidx.compose.runtime.mutableStateOf @@ -56,7 +50,6 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment -import androidx.compose.ui.Alignment.Companion.CenterHorizontally import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.ContentScale @@ -80,10 +73,13 @@ import com.zyzf.coffeepreorder.R import com.zyzf.coffeepreorder.database.model.Coffee import com.zyzf.coffeepreorder.ui.AppViewModelProvider import com.zyzf.coffeepreorder.ui.theme.CoffeePreorderTheme +import eu.bambooapps.material3.pullrefresh.PullRefreshIndicator +import eu.bambooapps.material3.pullrefresh.pullRefresh +import eu.bambooapps.material3.pullrefresh.rememberPullRefreshState import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch -@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterialApi::class) +@OptIn(ExperimentalMaterial3Api::class) @Composable fun CoffeeList( viewModel: CoffeeListViewModel = viewModel(factory = AppViewModelProvider.Factory) @@ -132,46 +128,46 @@ fun CoffeeList( } } ) { innerPadding -> - PullRefreshIndicator( - refreshing, state, - Modifier - .zIndex(100f) - ) - CoffeeList( - modifier = Modifier - .padding(innerPadding) - .fillMaxSize(), - coffeeList = coffeeListUiState, - onAddToCartClick = { coffeeUid: Int -> - coroutineScope.launch { - viewModel.addCoffeeToCart(coffeeUid = coffeeUid) + Box (modifier = Modifier.padding(0.dp).pullRefresh(state)) { + PullRefreshIndicator(refreshing = refreshing, state = state, + modifier = Modifier.zIndex(100f).align(Alignment.TopCenter) + ) + CoffeeList( + modifier = Modifier + .padding(innerPadding) + .fillMaxSize(), + coffeeList = coffeeListUiState, + onAddToCartClick = { coffeeUid: Int -> + coroutineScope.launch { + viewModel.addCoffeeToCart(coffeeUid = coffeeUid) + } + }, + onEditClick = { currentCoffee: Coffee -> + coroutineScope.launch { + coffee.value = currentCoffee + openDialog.value = true + } } - }, - onEditClick = { curcoffee: Coffee -> - coroutineScope.launch { - coffee.value = curcoffee - openDialog.value = true - } - } - ) + ) + } } AddEditModalBottomSheet( coffee = coffee, sheetState = sheetState, openDialog = openDialog, - onAddClick = { coffee: Coffee, context: Context -> + onAddClick = { currentCoffee: Coffee, context: Context -> coroutineScope.launch { - viewModel.createCoffee(coffee, imageUri as Uri, context) + viewModel.createCoffee(currentCoffee, imageUri as Uri, context) } }, - onEditClick = { coffee: Coffee, context: Context -> + onEditClick = { currentCoffee: Coffee, context: Context -> coroutineScope.launch { - viewModel.editCoffee(coffee, imageUri as Uri, context) + viewModel.editCoffee(currentCoffee, imageUri as Uri, context) } }, - onDeleteClick = { coffee: Coffee -> + onDeleteClick = { currentCoffee: Coffee -> coroutineScope.launch { - viewModel.deleteCoffee(coffee) + viewModel.deleteCoffee(currentCoffee) } }, photoPicker = photoPicker, @@ -189,8 +185,7 @@ private fun AddEditModalBottomSheet( onEditClick: (coffee: Coffee, context: Context) -> Unit, onDeleteClick: (coffee: Coffee) -> Unit, photoPicker: ManagedActivityResultLauncher, - imageUri: Any?, - modifier: Modifier = Modifier + imageUri: Any? ) { var name: String by remember { mutableStateOf("")} var cost: Double by remember { mutableDoubleStateOf(0.0) } @@ -350,7 +345,7 @@ private fun CoffeeListItem( .padding(top = 5.dp)) { Button( onClick = { - coffee.uid.let { onAddToCartClick(it) } + onAddToCartClick(coffee.uid) }, shape = CircleShape, modifier = Modifier.fillMaxWidth(fraction = 0.75f) diff --git a/app/src/main/java/com/zyzf/coffeepreorder/ui/coffee/CoffeeListViewModel.kt b/app/src/main/java/com/zyzf/coffeepreorder/ui/coffee/CoffeeListViewModel.kt index 805dd57..b23dc3e 100644 --- a/app/src/main/java/com/zyzf/coffeepreorder/ui/coffee/CoffeeListViewModel.kt +++ b/app/src/main/java/com/zyzf/coffeepreorder/ui/coffee/CoffeeListViewModel.kt @@ -55,7 +55,7 @@ class CoffeeListViewModel( copyFileToSftp(f, "/mnt/nextcloud/data/Zyzf/files/Images") } suspend fun editCoffee(coffee: Coffee, imageUri: Uri, context: Context) { - val editedCoffee: Int = coffeeRepository.update(coffee.uid!!, coffee.name, coffee.cost, coffee.ingredients, coffee.cartId, coffee.count)!! + val editedCoffee: Int = coffeeRepository.update(coffee.uid, coffee.name, coffee.cost, coffee.ingredients, coffee.cartId, coffee.count)!! val inputStream = context.contentResolver.openInputStream(imageUri) val bitmap = BitmapFactory.decodeStream(inputStream) diff --git a/app/src/main/java/com/zyzf/coffeepreorder/ui/login/Login.kt b/app/src/main/java/com/zyzf/coffeepreorder/ui/login/Login.kt index eb372e1..5cc6792 100644 --- a/app/src/main/java/com/zyzf/coffeepreorder/ui/login/Login.kt +++ b/app/src/main/java/com/zyzf/coffeepreorder/ui/login/Login.kt @@ -1,4 +1,4 @@ -package com.zyzf.coffeepreorder.composeui +package com.zyzf.coffeepreorder.ui.login import android.content.res.Configuration import androidx.compose.foundation.layout.Column diff --git a/app/src/main/java/com/zyzf/coffeepreorder/ui/navigation/MainNavbar.kt b/app/src/main/java/com/zyzf/coffeepreorder/ui/navigation/MainNavbar.kt index 1d54bca..41caf09 100644 --- a/app/src/main/java/com/zyzf/coffeepreorder/ui/navigation/MainNavbar.kt +++ b/app/src/main/java/com/zyzf/coffeepreorder/ui/navigation/MainNavbar.kt @@ -1,6 +1,5 @@ package com.zyzf.coffeepreorder.ui.navigation -import android.content.res.Configuration import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons @@ -12,7 +11,6 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.NavigationBar import androidx.compose.material3.NavigationBarItem import androidx.compose.material3.Scaffold -import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults @@ -20,7 +18,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.compose.ui.tooling.preview.Preview import androidx.navigation.NavDestination import androidx.navigation.NavDestination.Companion.hierarchy import androidx.navigation.NavGraph.Companion.findStartDestination @@ -30,13 +27,12 @@ import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import com.zyzf.coffeepreorder.R -import com.zyzf.coffeepreorder.composeui.Login import com.zyzf.coffeepreorder.ui.cart.Cart import com.zyzf.coffeepreorder.ui.coffee.CoffeeList +import com.zyzf.coffeepreorder.ui.login.Login import com.zyzf.coffeepreorder.ui.order.Order import com.zyzf.coffeepreorder.ui.profile.Profile import com.zyzf.coffeepreorder.ui.register.Register -import com.zyzf.coffeepreorder.ui.theme.CoffeePreorderTheme @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -115,7 +111,6 @@ fun Navhost( } } -@OptIn(ExperimentalMaterial3Api::class) @Composable fun MainNavbar() { val navController = rememberNavController() diff --git a/app/src/main/java/com/zyzf/coffeepreorder/ui/navigation/Screen.kt b/app/src/main/java/com/zyzf/coffeepreorder/ui/navigation/Screen.kt index da05bb8..07b5df8 100644 --- a/app/src/main/java/com/zyzf/coffeepreorder/ui/navigation/Screen.kt +++ b/app/src/main/java/com/zyzf/coffeepreorder/ui/navigation/Screen.kt @@ -43,7 +43,7 @@ enum class Screen( fun getItem(route: String): Screen? { val findRoute = route.split("/").first() - return values().find { value -> value.route.startsWith(findRoute) } + return entries.find { value -> value.route.startsWith(findRoute) } } } } \ No newline at end of file diff --git a/app/src/main/res/drawable/img.xml b/app/src/main/res/drawable/img.xml index a8b409b..1c281ec 100644 --- a/app/src/main/res/drawable/img.xml +++ b/app/src/main/res/drawable/img.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file