finished opening screen
This commit is contained in:
@ -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)
|
||||
|
||||
Reference in New Issue
Block a user