Update qr display & add icon or icon app on qr

This commit is contained in:
Hasinjato 2026-05-29 12:58:28 +03:00
parent 23d025899b
commit 1f05027f1f

View file

@ -5,7 +5,9 @@ import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
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.CircularProgressIndicator import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@ -14,14 +16,20 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.produceState import androidx.compose.runtime.produceState
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.shadow import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import feufaro.composeapp.generated.resources.Res
import feufaro.composeapp.generated.resources.compose_multiplatform
import mg.dot.feufaro.FileRepository import mg.dot.feufaro.FileRepository
import mg.dot.feufaro.solfa.ColorPrefixA import mg.dot.feufaro.solfa.ColorPrefixA
import mg.dot.feufaro.solfa.ColorPrefixB import mg.dot.feufaro.solfa.ColorPrefixB
import mg.dot.feufaro.solfa.ColorValue import mg.dot.feufaro.solfa.ColorValue
import org.jetbrains.compose.resources.painterResource
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
import java.util.zip.GZIPOutputStream import java.util.zip.GZIPOutputStream
import kotlin.io.encoding.Base64 import kotlin.io.encoding.Base64
@ -47,53 +55,91 @@ fun QRDisplay(sharedScreenModel: SharedScreenModel, fileRepository: FileReposito
val compressedData = Base64.UrlSafe.encode(compressedBytes).trim('=') val compressedData = Base64.UrlSafe.encode(compressedBytes).trim('=')
val uri = "feufaro://song?file=${compressedData}&name=$fileName" val uri = "feufaro://song?file=${compressedData}&name=$fileName"
value = generateQRCode(uri, size = 800) value = generateQRCode(uri, size = 1200)
} }
} }
Box( Box(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background(MaterialTheme.colorScheme.scrim.copy(alpha = 0.5f)) // Fond semi-transparent .background(Color.Black.copy(alpha = 0.6f)) // Assombrissement moderne
.clickable { sharedScreenModel.toggleQRCodeVisibility() } // Fermer au clic .clickable { sharedScreenModel.toggleQRCodeVisibility() } // Fermer au clic
.imePadding() .imePadding()
.systemBarsPadding(), .systemBarsPadding(),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Card( Card(
modifier = Modifier.wrapContentSize().shadow(16.dp, shape = MaterialTheme.shapes.large) modifier = Modifier
.width(400.dp)
.wrapContentHeight()
.shadow(24.dp, shape = RoundedCornerShape(28.dp)),
shape = RoundedCornerShape(28.dp),
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface)
) { ) {
Column( Column(
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.padding(24.dp) modifier = Modifier.padding(24.dp)
) { ) {
Text("Scanner pour ouvrir ce partition") Text(
text = "Partager la partition",
style = MaterialTheme.typography.titleLarge.copy(
fontWeight = FontWeight.Bold,
letterSpacing = 0.5.sp
)
)
Text(
text = "Scannez pour ouvrir instantanément",
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
),
modifier = Modifier.padding(top = 4.dp, bottom = 24.dp)
)
if (qrCodeImage != null) { if (qrCodeImage != null) {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier
.size(350.dp)
.clip(RoundedCornerShape(16.dp))
.background(Color.White)
.padding(5.dp)
) {
Image( Image(
bitmap = qrCodeImage!!, bitmap = qrCodeImage!!,
contentDescription = "Code QR du fichier actif", contentDescription = "Code QR du fichier actif",
modifier = Modifier.size(400.dp) modifier = Modifier.fillMaxSize()
) )
} else {
Box( Box(
modifier = Modifier modifier = Modifier
.size(400.dp) .size(54.dp)
.padding(16.dp), .background(Color.White, shape = RoundedCornerShape(12.dp))
.padding(4.dp),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Column( Image(
horizontalAlignment = Alignment.CenterHorizontally, painter = painterResource(Res.drawable.compose_multiplatform),
verticalArrangement = Arrangement.Center contentDescription = "App Logo",
modifier = Modifier
.fillMaxSize()
.clip(RoundedCornerShape(8.dp))
)
}
}
} else {
Box(
modifier = Modifier.size(280.dp),
contentAlignment = Alignment.Center
) { ) {
Column(horizontalAlignment = Alignment.CenterHorizontally) {
CircularProgressIndicator( CircularProgressIndicator(
modifier = Modifier.size(48.dp), modifier = Modifier.size(48.dp),
color = ColorPrefixA, color = ColorPrefixA,
strokeWidth = 4.dp, strokeWidth = 4.dp,
trackColor = ColorPrefixB.copy(alpha = 0.2f) trackColor = ColorPrefixB.copy(alpha = 0.2f)
) )
Spacer(modifier = Modifier.height(16.dp)) Spacer(modifier = Modifier.height(16.dp))
Text( Text(
text = "Génération du QR Code...", text = "Génération du QR Code...",
style = MaterialTheme.typography.bodyMedium.copy( style = MaterialTheme.typography.bodyMedium.copy(
@ -104,6 +150,8 @@ fun QRDisplay(sharedScreenModel: SharedScreenModel, fileRepository: FileReposito
} }
} }
} }
Spacer(modifier = Modifier.height(12.dp))
} }
} }
} }