- MainActivity.kt übernommen - MainScreen.kt übernommen - fun MainScreen - fun ContentScreen - fun AppTopBar - fun ReportOverlay
222 lines
7.3 KiB
Kotlin
222 lines
7.3 KiB
Kotlin
package com.example.snapandsolve
|
|
|
|
import android.app.Application
|
|
import androidx.compose.foundation.background
|
|
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
|
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
import androidx.compose.foundation.layout.fillMaxWidth
|
|
import androidx.compose.foundation.layout.height
|
|
import androidx.compose.foundation.layout.heightIn
|
|
import androidx.compose.foundation.layout.offset
|
|
import androidx.compose.foundation.layout.padding
|
|
import androidx.compose.foundation.shape.CornerSize
|
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
import androidx.compose.material.icons.Icons
|
|
import androidx.compose.material.icons.filled.Add
|
|
import androidx.compose.material.icons.filled.Menu
|
|
import androidx.compose.material3.BottomAppBar
|
|
import androidx.compose.material3.Button
|
|
import androidx.compose.material3.ButtonColors
|
|
import androidx.compose.material3.ButtonDefaults
|
|
import androidx.compose.material3.Card
|
|
import androidx.compose.material3.CardColors
|
|
import androidx.compose.material3.CardDefaults
|
|
import androidx.compose.material3.CenterAlignedTopAppBar
|
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
|
import androidx.compose.material3.FabPosition
|
|
import androidx.compose.material3.FloatingActionButton
|
|
import androidx.compose.material3.FloatingActionButtonDefaults
|
|
import androidx.compose.material3.Icon
|
|
import androidx.compose.material3.IconButton
|
|
import androidx.compose.material3.LargeFloatingActionButton
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.material3.MediumTopAppBar
|
|
import androidx.compose.material3.OutlinedButton
|
|
import androidx.compose.material3.Scaffold
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.material3.TopAppBar
|
|
import androidx.compose.material3.TopAppBarColors
|
|
import androidx.compose.material3.TopAppBarDefaults
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.runtime.mutableStateOf
|
|
import androidx.compose.runtime.remember
|
|
import androidx.compose.runtime.saveable.rememberSaveable
|
|
import androidx.compose.runtime.setValue
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.graphics.Color
|
|
import androidx.compose.ui.unit.dp
|
|
import com.example.snapandsolve.ui.theme.AppColor
|
|
import com.example.snapandsolve.ui.theme.ButtonColor
|
|
import com.example.snapandsolve.ui.theme.WidgetColor
|
|
|
|
|
|
@Composable
|
|
fun MainScreen(modifier: Modifier = Modifier, application: Application) {
|
|
var showReport by rememberSaveable { mutableStateOf(false) }
|
|
|
|
Scaffold(
|
|
modifier = Modifier.fillMaxSize(),
|
|
topBar = {
|
|
AppTopBar()
|
|
},
|
|
bottomBar = {
|
|
BottomAppBar(
|
|
modifier = Modifier.height(120.dp),
|
|
containerColor = AppColor,
|
|
// contentColor = AppColor
|
|
) {
|
|
Row(
|
|
modifier = Modifier
|
|
.fillMaxWidth()
|
|
.padding(start = 16.dp),
|
|
verticalAlignment = Alignment.CenterVertically
|
|
) {
|
|
IconButton(
|
|
onClick = {
|
|
/*TODO*/
|
|
},
|
|
modifier = Modifier.padding(bottom = 8.dp) // Abstand "in" der Bar
|
|
) {
|
|
Icon(
|
|
Icons.Default.Menu,
|
|
contentDescription = "Menu",
|
|
|
|
)
|
|
}
|
|
Spacer(Modifier.weight(1f))
|
|
}
|
|
}
|
|
},
|
|
floatingActionButton = {
|
|
LargeFloatingActionButton(
|
|
onClick = {
|
|
showReport = true
|
|
},
|
|
modifier = Modifier.offset(y = 64.dp),
|
|
containerColor = ButtonColor
|
|
) {
|
|
Icon(Icons.Default.Add, contentDescription = "Add")
|
|
}
|
|
},
|
|
floatingActionButtonPosition = FabPosition.Center,
|
|
) {
|
|
innerPadding ->
|
|
ContentScreen(
|
|
modifier = Modifier.padding(innerPadding),
|
|
application,
|
|
showReport = showReport,
|
|
onDismissReport = { showReport = false })
|
|
}
|
|
}
|
|
|
|
@Composable
|
|
fun ContentScreen(
|
|
modifier: Modifier = Modifier,
|
|
application: Application,
|
|
showReport: Boolean,
|
|
onDismissReport: () -> Unit
|
|
) {
|
|
val mapViewModel = remember { MapViewModel(application) }
|
|
Box(modifier = modifier.fillMaxSize()) {
|
|
|
|
// 2) Overlay
|
|
if (showReport) {
|
|
ReportOverlay(
|
|
onCancel = onDismissReport,
|
|
onAdd = { /* später */ }
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
@OptIn(ExperimentalMaterial3Api::class)
|
|
@Composable
|
|
fun AppTopBar(
|
|
modifier: Modifier = Modifier
|
|
) {
|
|
MediumTopAppBar(
|
|
title = {
|
|
Text("Scan And Solve")
|
|
},
|
|
colors = TopAppBarDefaults.mediumTopAppBarColors(
|
|
containerColor = AppColor,
|
|
titleContentColor = Color.White
|
|
)
|
|
|
|
)
|
|
}
|
|
|
|
@Composable
|
|
fun ReportOverlay(
|
|
onCancel: () -> Unit,
|
|
onAdd: () -> Unit
|
|
) {
|
|
// leichter Dim-Hintergrund
|
|
Box(
|
|
modifier = Modifier
|
|
.fillMaxSize()
|
|
.background(Color.Black.copy(alpha = 0.25f)),
|
|
contentAlignment = Alignment.Center
|
|
) {
|
|
Card(
|
|
modifier = Modifier
|
|
.fillMaxWidth(0.9f)
|
|
.heightIn(min = 400.dp),
|
|
shape = RoundedCornerShape(24.dp),
|
|
colors = CardColors(
|
|
containerColor = WidgetColor,
|
|
contentColor = ButtonColor,
|
|
disabledContainerColor = Color.White,
|
|
disabledContentColor = Color.White
|
|
)
|
|
) {
|
|
Column(
|
|
modifier = Modifier
|
|
.fillMaxWidth()
|
|
.padding(20.dp),
|
|
verticalArrangement = Arrangement.spacedBy(16.dp)
|
|
) {
|
|
Text("Schadensbeschreibung:",
|
|
color = Color.Black
|
|
)
|
|
|
|
// Platzhalter fürs Textfeld / Icons etc.
|
|
Box(
|
|
modifier = Modifier
|
|
.fillMaxWidth()
|
|
.height(220.dp)
|
|
.background(Color.White, RoundedCornerShape(12.dp))
|
|
)
|
|
|
|
Row(
|
|
modifier = Modifier.fillMaxWidth(),
|
|
horizontalArrangement = Arrangement.SpaceBetween
|
|
) {
|
|
OutlinedButton(
|
|
onClick = onCancel,
|
|
colors = ButtonColors(
|
|
containerColor = ButtonColor,
|
|
contentColor = Color.White,
|
|
disabledContainerColor = Color.White,
|
|
disabledContentColor = Color.White
|
|
)
|
|
) { Text(
|
|
"Abbrechen",
|
|
color = Color.Black
|
|
) }
|
|
Button(onClick = onAdd) { Text("Hinzufügen") }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|