- Bewertungsystem

- Filtern nach Schäden
- Docs Ordner mit Markdown dummies gefüllt.
This commit is contained in:
2026-01-21 21:37:58 +01:00
parent 33e95641d0
commit 05426b687c
21 changed files with 642 additions and 29 deletions

View File

@@ -24,6 +24,7 @@ import androidx.compose.material.icons.filled.AddLocationAlt
import androidx.compose.material.icons.filled.FilterAlt
import androidx.compose.material.icons.filled.FormatListNumbered
import androidx.compose.material.icons.filled.Menu
import androidx.compose.material.icons.filled.ThumbUp
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
@@ -48,6 +49,8 @@ import com.example.snapandsolve.camera.AlbumViewState
import com.example.snapandsolve.camera.Intent
import com.example.snapandsolve.ui.theme.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@Composable
fun MainScreen(modifier: Modifier = Modifier, application: Application) {
@@ -124,15 +127,20 @@ fun ContentScreen(
sliderOpen: Boolean,
onDismissReport: () -> Unit
) {
val context = LocalContext.current
val coroutineScope = rememberCoroutineScope()
// NEU: State für Filter-Dialog
var showFilterDialog by remember { mutableStateOf(false) }
Box(modifier = modifier.fillMaxSize()) {
// HINTERGRUND: Die Map
// Map
MapSegment(
modifier = Modifier.fillMaxSize(),
mapViewModel = mapViewModel,
mapViewModel = mapViewModel
)
// VORDERGRUND: Das Overlay (wenn showReport = true)
// Report Overlay
if (showReport) {
ReportOverlay(
onCancel = onDismissReport,
@@ -142,15 +150,34 @@ fun ContentScreen(
)
}
if (mapViewModel.showFeatureInfo && mapViewModel.selectedFeature != null) {
FeatureInfoOverlay(
feature = mapViewModel.selectedFeature!!,
onClose = { mapViewModel.closeFeatureInfo() }
// Feature Info Dialog
if (mapViewModel.showFeatureInfo) {
FeatureInfoDialog(
feature = mapViewModel.selectedFeature,
onDismiss = { mapViewModel.closeFeatureInfo() },
onRate = { feature, isPositive ->
coroutineScope.launch {
mapViewModel.updateFeatureRating(feature, isPositive, context)
}
}
)
}
// Filter Dialog - NEU!
if (showFilterDialog) {
DamageFilterDialog(
damageTypes = MapViewModel.DAMAGE_TYPES, // <-- Nutzt zentrale Liste
currentFilters = mapViewModel.getActiveFilters(),
onDismiss = { showFilterDialog = false },
onApplyFilter = { selectedTypes ->
coroutineScope.launch {
mapViewModel.applyDamageFilter(selectedTypes)
}
}
)
}
// Slider von Links
// Side Slider
SideSlider(visible = sliderOpen) {
Text(
"Menü",
@@ -162,16 +189,14 @@ fun ContentScreen(
text = "Schäden filtern",
icon = Icons.Default.FilterAlt,
onClick = {
/* TODO */
showFilterDialog = true // <-- Öffnet Filter-Dialog
}
)
SliderMenuItem(
text = "Schadensliste",
icon = Icons.Default.FormatListNumbered,
onClick = {
/* TODO */
}
onClick = { /* TODO */ }
)
}
}
@@ -275,7 +300,7 @@ fun ReportOverlay(
expanded = dropdownExpanded,
onDismissRequest = { dropdownExpanded = false }
) {
listOf("Straße", "Gehweg", "Fahrradweg", "Beleuchtung", "Sonstiges").forEach { typ ->
MapViewModel.DAMAGE_TYPES.forEach { typ -> // <-- Nutzt zentrale Liste
DropdownMenuItem(
text = { Text(typ) },
onClick = {