finished opening screen

This commit is contained in:
oxidiert
2025-09-21 19:49:49 +02:00
parent 1ffd09049e
commit 894823f42a
11 changed files with 420 additions and 175 deletions

View File

@ -14,8 +14,8 @@ class EditButtonHandler(
private val questionnaireFiles: Map<Button, String>,
private val buttonPoints: MutableMap<String, Int>,
private val updateButtonTexts: () -> Unit,
private val setButtonsEnabled: (List<Button>) -> Unit,
// vor "Bearbeiten" ggf. Laden anstoßen
private val setButtonsEnabled: (List<Button>, Boolean) -> Unit,
private val setUiFreeze: (Boolean) -> Unit,
private val triggerLoad: () -> Unit
) {
@ -38,29 +38,29 @@ class EditButtonHandler(
return
}
// Nutzerwunsch merken (info)
GlobalValues.LAST_CLIENT_CODE = desiredCode
// Nur laden, wenn noch nicht/anders geladen
val needLoad = GlobalValues.LOADED_CLIENT_CODE?.equals(desiredCode) != true
if (needLoad) triggerLoad()
if (needLoad) {
// Zwischenzustände aus dem Load-Handler unterdrücken
setUiFreeze(true)
triggerLoad()
}
CoroutineScope(Dispatchers.IO).launch {
val loadedOk = waitUntilClientLoaded(desiredCode, timeoutMs = 2500, stepMs = 50)
if (!loadedOk) {
withContext(Dispatchers.Main) {
Toast.makeText(activity, "Bitte den Klienten über \"Laden\" öffnen.", Toast.LENGTH_LONG).show()
setUiFreeze(false)
}
return@launch
}
// Ab hier: geladen → Bearbeiten-Logik
val completedEntries: List<CompletedQuestionnaire> =
MyApp.database.completedQuestionnaireDao().getAllForClient(desiredCode)
val completedFiles = completedEntries
.filter { it.isDone }
.map { it.questionnaireId.lowercase() }
val completedFiles = completedEntries.filter { it.isDone }.map { it.questionnaireId.lowercase() }
buttonPoints.clear()
for (entry in completedEntries) {
@ -70,21 +70,19 @@ class EditButtonHandler(
}
withContext(Dispatchers.Main) {
// nur den finalen Zustand anzeigen
updateButtonTexts()
val enabledButtons = questionnaireFiles.filter { (_, fileName) ->
completedFiles.any { completedId -> fileName.lowercase().contains(completedId) }
}.keys.toList()
setButtonsEnabled(enabledButtons)
setButtonsEnabled(enabledButtons, true)
setUiFreeze(false)
}
}
}
private suspend fun waitUntilClientLoaded(expectedCode: String, timeoutMs: Long, stepMs: Long): Boolean {
// sofort ok, wenn bereits korrekt geladen
if (GlobalValues.LOADED_CLIENT_CODE?.equals(expectedCode) == true) return true
var waited = 0L
while (waited < timeoutMs) {
delay(stepMs)