feat(core, device-initialization): Netzwerk-Discovery verbessert, IP-Binding hinzugefügt und UI optimiert

Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
This commit is contained in:
2026-04-30 12:12:46 +02:00
parent 46d993e47f
commit 8ab6ab1c2a
25 changed files with 686 additions and 179 deletions
@@ -180,6 +180,46 @@ fun Erfolgsscreen(email: String, onBack: () -> Unit) {
}
}
@Composable
fun DownloadDesktopAppCard() {
Card(
modifier = Modifier.fillMaxWidth(),
colors = CardDefaults.cardColors(containerColor = AppColors.PrimaryContainer),
elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
) {
Row(
modifier = Modifier.padding(24.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(24.dp)
) {
Column(modifier = Modifier.weight(1f)) {
Text(
"Meldestelle Desktop",
style = MaterialTheme.typography.headlineSmall,
fontWeight = FontWeight.Bold,
color = AppColors.OnPrimaryContainer
)
Text(
"Laden Sie die professionelle Desktop-App für die Offline-Verwaltung Ihres Turniers herunter.",
style = MaterialTheme.typography.bodyLarge,
color = AppColors.OnPrimaryContainer.copy(alpha = 0.8f),
modifier = Modifier.padding(top = 8.dp)
)
}
Button(
onClick = { /* In POC: Zeigt Hinweis oder simuliert Download */ },
colors = ButtonDefaults.buttonColors(containerColor = AppColors.Primary),
modifier = Modifier.height(56.dp)
) {
Icon(Icons.Default.Description, contentDescription = null) // Verwende Description als Ersatz für Download
Spacer(Modifier.width(12.dp))
Text("Desktop-App laden", style = MaterialTheme.typography.titleMedium)
}
}
}
}
@Composable
fun LandingPage(
onVeranstaltungClick: (Long) -> Unit,
@@ -205,6 +245,10 @@ fun LandingPage(
modifier = Modifier.fillMaxSize().padding(16.dp),
verticalArrangement = Arrangement.spacedBy(24.dp)
) {
item {
DownloadDesktopAppCard()
}
item {
Text(
"Willkommen bei der Meldestelle Online",
@@ -23,7 +23,8 @@ fun main() {
}
ComposeViewport("compose-target") {
AppTheme {
// Web-Shell wird hart auf Light-Mode gesetzt (Ablesbarkeit am Turnierplatz)
AppTheme(darkTheme = false) {
WebMainScreen()
}
}