Почтиииии

This commit is contained in:
ElEgEv 2023-12-11 13:56:24 +04:00
parent 91a0de0cc9
commit 38cb371048
21 changed files with 178 additions and 154 deletions

Binary file not shown.

View File

@ -1,65 +0,0 @@
kotlin version: 1.9.10
error message: java.lang.Exception: Could not flush incremental caches in C:\Users\egore\Desktop\MyProjects\ULSTU\TankAppMobile\TanksApp\compose\app\build\kspCaches\debug\symbolLookups: lookups.tab
at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.forEachMapSafe(BasicMapsOwner.kt:64)
at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.flush(BasicMapsOwner.kt:48)
at org.jetbrains.kotlin.incremental.LookupStorage.flush(LookupStorage.kt:155)
at com.google.devtools.ksp.IncrementalContext.updateLookupCache(Incremental.kt:262)
at com.google.devtools.ksp.IncrementalContext.updateCaches(Incremental.kt:486)
at com.google.devtools.ksp.IncrementalContext.updateCachesAndOutputs(Incremental.kt:556)
at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension.doAnalysis(KotlinSymbolProcessingExtension.kt:357)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:112)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:88)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:256)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:42)
at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:115)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:247)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.repeatAnalysisIfNeeded(KotlinToJVMBytecodeCompiler.kt:181)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:87)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:47)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:168)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:53)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:100)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:46)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1497)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
Suppressed: java.lang.reflect.InaccessibleObjectException: Unable to make field protected java.io.OutputStream java.io.FilterOutputStream.out accessible: module java.base does not "opens java.io" to unnamed module @59fd97a8
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:172)
at org.jetbrains.kotlin.com.intellij.util.io.IOUtil.syncStream(IOUtil.java:216)
at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMapValueStorage.appendBytes(PersistentHashMapValueStorage.java:188)
at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMapValueStorage.appendBytes(PersistentHashMapValueStorage.java:175)
at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl$2.onDropFromCache(PersistentMapImpl.java:237)
at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl$2.onDropFromCache(PersistentMapImpl.java:215)
at org.jetbrains.kotlin.com.intellij.util.containers.SLRUMap.clear(SLRUMap.java:172)
at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.flushAppendCache(PersistentMapImpl.java:930)
at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.clearAppenderCaches(PersistentMapImpl.java:754)
at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.doForce(PersistentMapImpl.java:741)
at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.force(PersistentMapImpl.java:730)
at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.force(PersistentHashMap.java:194)
at org.jetbrains.kotlin.incremental.storage.CachingLazyStorage.flush(CachingLazyStorage.kt:115)
at org.jetbrains.kotlin.incremental.storage.BasicMap.flush(BasicMap.kt:40)
at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$flush$1.invoke(BasicMapsOwner.kt:48)
at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$flush$1.invoke(BasicMapsOwner.kt:48)
at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.forEachMapSafe(BasicMapsOwner.kt:56)
... 38 more

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="ModuleClassLoaderOverlays">
<paths>
<option value="C:\Users\egore\AppData\Local\Temp\overlay16197097467506260191" />
</paths>
</component>
</module>

View File

@ -66,7 +66,6 @@ import ru.ulstu.`is`.pmu.tank.composeui.TankList
import ru.ulstu.`is`.pmu.tanks.composeui.Account import ru.ulstu.`is`.pmu.tanks.composeui.Account
import ru.ulstu.`is`.pmu.tanks.composeui.Constructor import ru.ulstu.`is`.pmu.tanks.composeui.Constructor
import ru.ulstu.`is`.pmu.tanks.composeui.Hangar import ru.ulstu.`is`.pmu.tanks.composeui.Hangar
import ru.ulstu.`is`.pmu.ui.theme.CustomYellow
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable

View File

@ -23,15 +23,23 @@ import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExposedDropdownMenuBox
import androidx.compose.material3.ExposedDropdownMenuDefaults
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.key import androidx.compose.runtime.key
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -42,6 +50,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import ru.ulstu.`is`.pmu.R import ru.ulstu.`is`.pmu.R
import ru.ulstu.`is`.pmu.composeui.navigation.Screen import ru.ulstu.`is`.pmu.composeui.navigation.Screen
import ru.ulstu.`is`.pmu.tank.composeui.edit.NationDropDownViewModel import ru.ulstu.`is`.pmu.tank.composeui.edit.NationDropDownViewModel
@ -127,7 +137,7 @@ fun ColumnItem(
) { ) {
CuteImage( CuteImage(
imageBitmap = tank.miniature.asImageBitmap(), imageBitmap = tank.miniature.asImageBitmap(),
modifier = Modifier.weight(0.5F) modifier = Modifier.fillMaxWidth()
) )
Text( Text(
text = tank.name, text = tank.name,
@ -182,7 +192,7 @@ private fun TankList(
nations: NationsListUiState, nations: NationsListUiState,
listTanks: List<Tank>, listTanks: List<Tank>,
onClick: (uid: Long) -> Unit, onClick: (uid: Long) -> Unit,
) { ) {
LazyColumn( LazyColumn(
verticalArrangement = Arrangement.Bottom, verticalArrangement = Arrangement.Bottom,
modifier = Modifier.height(300.dp * nations.nationList.size), modifier = Modifier.height(300.dp * nations.nationList.size),

View File

@ -49,7 +49,7 @@ class TankEditViewModel(
suspend fun saveTank() { suspend fun saveTank() {
if (validateInput()) { if (validateInput()) {
val image: Bitmap = tankUiState.tankDetails.image!! val image: Bitmap = tankUiState.tankDetails.miniature!!
if (tankUid > 0) { if (tankUid > 0) {
tankRepository.updateTank(tankUiState.tankDetails.toTank(tankUid), image = image) tankRepository.updateTank(tankUiState.tankDetails.toTank(tankUid), image = image)
} else { } else {
@ -65,7 +65,7 @@ class TankEditViewModel(
&& levelId!! != 0L && levelId!! != 0L
&& nationId!! != 0L && nationId!! != 0L
&& imageId !! != 0L && imageId !! != 0L
&& image != null && miniature != null
} }
} }
} }
@ -81,7 +81,6 @@ data class TankDetails(
val levelId: Long? = 0, val levelId: Long? = 0,
val nationId: Long? = 0, val nationId: Long? = 0,
val miniature: Bitmap = getEmptyBitmap(), val miniature: Bitmap = getEmptyBitmap(),
val image: Bitmap? = null,
val imageId: Long = -1 val imageId: Long = -1
) )

View File

@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@ -213,8 +214,7 @@ private fun Constructor(
fun handleImageUpload(bitmap: Bitmap) { fun handleImageUpload(bitmap: Bitmap) {
tankViewModel.updateUiState( tankViewModel.updateUiState(
tankUiState.tankDetails.copy( tankUiState.tankDetails.copy(
image = bitmap.resize(tankImageBound), miniature = bitmap.resize(miniatureBound),
miniature = bitmap.resize(miniatureBound)
) )
) )
} }
@ -236,25 +236,22 @@ private fun Constructor(
){ ){
Text(text="Добавить танк", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold) Text(text="Добавить танк", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
} }
Spacer(Modifier.height(10.dp))
Row( Row(
horizontalArrangement = Arrangement.SpaceAround, horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier.fillMaxWidth() modifier = Modifier.fillMaxWidth().padding(5.dp)
){ ){
Column( Column(
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.padding(0.dp, 5.dp) modifier = Modifier.padding(0.dp, 5.dp)
) { ) {
Text(text="Название:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold) Text(
Spacer(Modifier.height(40.dp)) text = "Название:",
Text(text="Изображение:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold) fontSize = 30.sp,
Spacer(Modifier.height(40.dp)) color = Color.Black,
Text(text="Уровень:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold) fontWeight = FontWeight.Bold
Spacer(Modifier.height(40.dp)) )
Text(text="Нация:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
Spacer(Modifier.height(40.dp))
Text(text="Стоимость:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
} }
Column {
TextField( TextField(
value = tankUiState.tankDetails.name, value = tankUiState.tankDetails.name,
placeholder = { Text(text = "Название", color = CustomDark) }, placeholder = { Text(text = "Название", color = CustomDark) },
@ -262,12 +259,39 @@ private fun Constructor(
modifier = Modifier modifier = Modifier
.width(200.dp), .width(200.dp),
) )
}
Spacer(Modifier.height(10.dp)) Spacer(Modifier.height(10.dp))
Row(
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier.fillMaxWidth().padding(5.dp)
){
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.padding(0.dp, 5.dp)
) {
Row(
horizontalArrangement = Arrangement.Center,
modifier = Modifier.fillMaxWidth()
){
Text(text="Изображение", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
}
CuteImageUploader( CuteImageUploader(
bitmap = tankUiState.tankDetails.image, bitmap = tankUiState.tankDetails.miniature,
onResult = { bitmap: Bitmap -> handleImageUpload(bitmap) } onResult = { bitmap: Bitmap -> handleImageUpload(bitmap) }
) )
}
}
Spacer(Modifier.height(10.dp)) Spacer(Modifier.height(10.dp))
Row(
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier.fillMaxWidth().padding(5.dp)
){
Column(
verticalArrangement = Arrangement.Center,
modifier = Modifier.padding(0.dp, 5.dp).fillMaxHeight()
) {
Text(text="Уровень:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
}
// Выпадающий список уровней // Выпадающий список уровней
LevelDropDown( LevelDropDown(
levelUiState = levelUiState, levelUiState = levelUiState,
@ -277,7 +301,18 @@ private fun Constructor(
onLevelUpdate(it) onLevelUpdate(it)
}, },
) )
}
Spacer(Modifier.height(10.dp)) Spacer(Modifier.height(10.dp))
Row(
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier.fillMaxWidth().padding(5.dp)
){
Column(
verticalArrangement = Arrangement.Center,
modifier = Modifier.padding(0.dp, 5.dp).fillMaxHeight()
) {
Text(text="Нация:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
}
// Выпадающий список наций // Выпадающий список наций
NationDropDown( NationDropDown(
nationUiState = nationUiState, nationUiState = nationUiState,
@ -287,7 +322,18 @@ private fun Constructor(
onNationUpdate(it) onNationUpdate(it)
}, },
) )
}
Spacer(Modifier.height(10.dp)) Spacer(Modifier.height(10.dp))
Row(
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier.fillMaxWidth().padding(5.dp)
){
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.padding(0.dp, 5.dp)
) {
Text(text="Стоимость:", fontSize = 30.sp, color = Color.Black, fontWeight = FontWeight.Bold)
}
TextField( TextField(
value = tankUiState.tankDetails.price.toString(), value = tankUiState.tankDetails.price.toString(),
placeholder = { Text(text = "Стоимость", color = CustomDark) }, placeholder = { Text(text = "Стоимость", color = CustomDark) },
@ -296,7 +342,7 @@ private fun Constructor(
.width(200.dp), .width(200.dp),
) )
} }
} Spacer(Modifier.height(10.dp))
Row( Row(
horizontalArrangement = Arrangement.Center, horizontalArrangement = Arrangement.Center,
modifier = Modifier modifier = Modifier

View File

@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
@ -57,6 +58,8 @@ import ru.ulstu.`is`.pmu.tank.model.Tank
import ru.ulstu.`is`.pmu.tank.model.TankWithNationAndLevel import ru.ulstu.`is`.pmu.tank.model.TankWithNationAndLevel
import ru.ulstu.`is`.pmu.tank.model.UserWithTanks import ru.ulstu.`is`.pmu.tank.model.UserWithTanks
import ru.ulstu.`is`.pmu.tanks.composeui.image.CuteImage import ru.ulstu.`is`.pmu.tanks.composeui.image.CuteImage
import ru.ulstu.`is`.pmu.tanks.composeui.image.Dimensions
import ru.ulstu.`is`.pmu.tanks.composeui.image.RoundedCorderImage
import ru.ulstu.`is`.pmu.ui.AppViewModelProvider import ru.ulstu.`is`.pmu.ui.AppViewModelProvider
import ru.ulstu.`is`.pmu.ui.theme.CustomDark import ru.ulstu.`is`.pmu.ui.theme.CustomDark
import ru.ulstu.`is`.pmu.ui.theme.CustomYellow import ru.ulstu.`is`.pmu.ui.theme.CustomYellow
@ -102,7 +105,7 @@ private fun Hangar(
horizontalArrangement = Arrangement.SpaceAround, horizontalArrangement = Arrangement.SpaceAround,
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(10.dp, 0.dp, 10.dp, 0.dp) .padding(5.dp, 0.dp, 5.dp, 0.dp)
) { ) {
var supportSizeRow = 1 var supportSizeRow = 1
@ -113,11 +116,13 @@ private fun Hangar(
//цикл для заполнения строки карточек //цикл для заполнения строки карточек
for (m in 0..supportSizeRow) { for (m in 0..supportSizeRow) {
Column( Column(
modifier = Modifier.background(CustomYellow) modifier = Modifier.background(
color = CustomYellow
)
) { ) {
Box( Box(
Modifier Modifier
.background(CustomYellow) .background(CustomYellow, shape = RoundedCornerShape(Dimensions.cornerRadius))
.height(260.dp), .height(260.dp),
) )
{ {
@ -126,10 +131,10 @@ private fun Hangar(
containerColor = CustomYellow, containerColor = CustomYellow,
), ),
modifier = Modifier modifier = Modifier
.size(width = 170.dp, height = 250.dp) .size(width = 185.dp, height = 250.dp)
.padding(10.dp, 0.dp, 10.dp, 0.dp) .padding(10.dp, 0.dp, 10.dp, 0.dp)
) { ) {
CuteImage( RoundedCorderImage(
imageBitmap = tankList[index].image.asImageBitmap(), imageBitmap = tankList[index].image.asImageBitmap(),
modifier = Modifier.weight(0.5F) modifier = Modifier.weight(0.5F)
) )
@ -171,7 +176,6 @@ private fun Hangar(
index++ index++
} }
} }
Spacer(Modifier.height(20.dp))
} }
} }
} }

View File

@ -19,7 +19,7 @@ fun CuteImage(
contentDescription = null, contentDescription = null,
contentScale = ContentScale.Crop, contentScale = ContentScale.Crop,
modifier = modifier modifier = modifier
.aspectRatio(1F) .aspectRatio(16F/12F)
.clip(RoundedCornerShape(Dimensions.cornerRadius)) .clip(RoundedCornerShape(topStart = Dimensions.cornerRadius, topEnd = Dimensions.cornerRadius))
) )
} }

View File

@ -15,6 +15,7 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
@ -66,7 +67,7 @@ fun CuteImageUploader(
} }
Row( Row(
modifier = Modifier.height(IntrinsicSize.Min) modifier = Modifier.height(IntrinsicSize.Min).padding(5.dp)
) { ) {
Box( Box(
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
@ -75,11 +76,10 @@ fun CuteImageUploader(
color = MaterialTheme.colorScheme.surface, color = MaterialTheme.colorScheme.surface,
shape = RoundedCornerShape(Dimensions.cornerRadius) shape = RoundedCornerShape(Dimensions.cornerRadius)
) )
.weight(0.25F) .weight(1F)
.aspectRatio(1F)
) { ) {
if (bitmap != null) { if (bitmap != null) {
CuteImage( RoundedCorderImage(
imageBitmap = bitmap.asImageBitmap(), imageBitmap = bitmap.asImageBitmap(),
modifier = Modifier.fillMaxSize() modifier = Modifier.fillMaxSize()
) )
@ -93,23 +93,21 @@ fun CuteImageUploader(
} }
Spacer(modifier = Modifier.width(10.dp)) Spacer(modifier = Modifier.width(10.dp))
Column( Column(
modifier = Modifier Modifier
.background( .background(
color = MaterialTheme.colorScheme.surface, color = MaterialTheme.colorScheme.surface,
shape = RoundedCornerShape(Dimensions.cornerRadius) shape = RoundedCornerShape(Dimensions.cornerRadius)
) )
.fillMaxHeight() .padding(10.dp).align(Alignment.CenterVertically)
.padding(10.dp)
.weight(0.75F)
) { ) {
Text( Text(
text = title, text = title,
color = MaterialTheme.colorScheme.onBackground color = MaterialTheme.colorScheme.onBackground
) )
Spacer(modifier = Modifier.weight(1F)) Spacer(modifier = Modifier.height(10.dp))
Button( Button(
modifier = Modifier modifier = Modifier
.width(200.dp) .width(130.dp)
.height(50.dp), .height(50.dp),
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
containerColor = CustomOrange, containerColor = CustomOrange,

View File

@ -0,0 +1,25 @@
package ru.ulstu.`is`.pmu.tanks.composeui.image
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.layout.ContentScale
@Composable
fun RoundedCorderImage(
imageBitmap: ImageBitmap,
modifier: Modifier = Modifier
) {
Image(
bitmap = imageBitmap,
contentDescription = null,
contentScale = ContentScale.Crop,
modifier = modifier
.aspectRatio(16F/12F)
.clip(RoundedCornerShape(Dimensions.cornerRadius))
)
}