added offline mode and improved coachcode system
This commit is contained in:
@ -27,29 +27,37 @@ class HandlerClientCoachCode(
|
||||
this.question = question
|
||||
|
||||
val clientCodeField = layout.findViewById<EditText>(R.id.client_code)
|
||||
val coachCodeField = layout.findViewById<EditText>(R.id.coach_code)
|
||||
val coachCodeField = layout.findViewById<EditText>(R.id.coach_code)
|
||||
val questionTextView = layout.findViewById<TextView>(R.id.question)
|
||||
val titleTextView = layout.findViewById<TextView>(R.id.textView)
|
||||
val titleTextView = layout.findViewById<TextView>(R.id.textView)
|
||||
|
||||
questionTextView.text = question.question?.let { LanguageManager.getText(languageID, it) } ?: ""
|
||||
|
||||
setTextSizePercentOfScreenHeight(titleTextView, 0.03f)
|
||||
setTextSizePercentOfScreenHeight(questionTextView,0.03f)
|
||||
setTextSizePercentOfScreenHeight(clientCodeField, 0.025f)
|
||||
setTextSizePercentOfScreenHeight(coachCodeField, 0.025f)
|
||||
setTextSizePercentOfScreenHeight(titleTextView, 0.03f)
|
||||
setTextSizePercentOfScreenHeight(questionTextView, 0.03f)
|
||||
setTextSizePercentOfScreenHeight(clientCodeField, 0.025f)
|
||||
setTextSizePercentOfScreenHeight(coachCodeField, 0.025f)
|
||||
|
||||
// *** WICHTIG: Nur den ERFOLGREICH GELADENEN Code verwenden ***
|
||||
// Client-Code: nur verwenden, wenn bereits geladen
|
||||
val loadedClientCode = GlobalValues.LOADED_CLIENT_CODE
|
||||
if (!loadedClientCode.isNullOrBlank()) {
|
||||
clientCodeField.setText(loadedClientCode)
|
||||
clientCodeField.isEnabled = false
|
||||
} else {
|
||||
// Nichts ist geladen → Feld bleibt leer und editierbar
|
||||
clientCodeField.setText("")
|
||||
clientCodeField.isEnabled = true
|
||||
}
|
||||
|
||||
coachCodeField.setText(answers["coach_code"] as? String ?: "")
|
||||
// === NEU: Coach-Code immer aus dem Login (TokenStore) setzen und sperren ===
|
||||
val coachFromLogin = TokenStore.getUsername(layout.context)
|
||||
if (!coachFromLogin.isNullOrBlank()) {
|
||||
coachCodeField.setText(coachFromLogin)
|
||||
lockCoachField(coachCodeField) // optisch & technisch gesperrt
|
||||
} else {
|
||||
// Falls (theoretisch) kein Login-Username vorhanden ist, verhalten wie bisher
|
||||
coachCodeField.setText(answers["coach_code"] as? String ?: "")
|
||||
coachCodeField.isEnabled = true
|
||||
}
|
||||
|
||||
layout.findViewById<Button>(R.id.Qnext).setOnClickListener {
|
||||
onNextClicked(clientCodeField, coachCodeField)
|
||||
@ -67,7 +75,6 @@ class HandlerClientCoachCode(
|
||||
}
|
||||
|
||||
private fun onNextClicked(clientCodeField: EditText, coachCodeField: EditText) {
|
||||
// 1) Ohne vorher geladenen Client NICHT weiter
|
||||
val loadedClientCode = GlobalValues.LOADED_CLIENT_CODE
|
||||
|
||||
if (!validate()) {
|
||||
@ -77,7 +84,8 @@ class HandlerClientCoachCode(
|
||||
}
|
||||
|
||||
val clientCode = clientCodeField.text.toString()
|
||||
val coachCode = coachCodeField.text.toString()
|
||||
// Erzwinge Coach-Code aus Login (falls vorhanden)
|
||||
val coachCode = TokenStore.getUsername(layout.context) ?: coachCodeField.text.toString()
|
||||
|
||||
// Prüfen, ob die DB-Datei vor dem Zugriff existiert
|
||||
val dbPath = layout.context.getDatabasePath("questionnaire_database")
|
||||
@ -87,7 +95,6 @@ class HandlerClientCoachCode(
|
||||
val existingClient = MyApp.database.clientDao().getClientByCode(clientCode)
|
||||
|
||||
withContext(Dispatchers.Main) {
|
||||
// Wenn Feld editierbar war und Code bereits existiert → Hinweis
|
||||
if (existingClient != null && clientCodeField.isEnabled) {
|
||||
val message = LanguageManager.getText(languageID, "client_code_exists")
|
||||
showToast(message)
|
||||
@ -108,25 +115,44 @@ class HandlerClientCoachCode(
|
||||
|
||||
private fun onPreviousClicked(clientCodeField: EditText, coachCodeField: EditText) {
|
||||
val clientCode = clientCodeField.text.toString()
|
||||
val coachCode = coachCodeField.text.toString()
|
||||
val coachCode = TokenStore.getUsername(layout.context) ?: coachCodeField.text.toString()
|
||||
saveAnswers(clientCode, coachCode)
|
||||
goToPreviousQuestion()
|
||||
}
|
||||
|
||||
override fun validate(): Boolean {
|
||||
val clientCode = layout.findViewById<EditText>(R.id.client_code).text
|
||||
val coachCode = layout.findViewById<EditText>(R.id.coach_code).text
|
||||
return clientCode.isNotBlank() && coachCode.isNotBlank()
|
||||
// Validierung nimmt den (ggf. gesperrten) Text – passt
|
||||
val coachText = layout.findViewById<EditText>(R.id.coach_code).text
|
||||
return clientCode.isNotBlank() && coachText.isNotBlank()
|
||||
}
|
||||
|
||||
private fun saveAnswers(clientCode: String, coachCode: String) {
|
||||
// Optional: LAST_CLIENT_CODE kann gesetzt bleiben; maßgeblich ist LOADED_CLIENT_CODE
|
||||
GlobalValues.LAST_CLIENT_CODE = clientCode
|
||||
answers["client_code"] = clientCode
|
||||
answers["coach_code"] = coachCode
|
||||
// Speichere garantierten Coach-Code aus Login bevorzugt
|
||||
val loginCoach = TokenStore.getUsername(layout.context)
|
||||
answers["coach_code"] = loginCoach ?: coachCode
|
||||
}
|
||||
|
||||
override fun saveAnswer() {
|
||||
// Not used
|
||||
}
|
||||
|
||||
// --- Helfer zum Sperren inkl. optischer Markierung (wie im Opening Screen) ---
|
||||
private fun lockCoachField(field: EditText) {
|
||||
field.isFocusable = false
|
||||
field.isFocusableInTouchMode = false
|
||||
field.isCursorVisible = false
|
||||
field.keyListener = null
|
||||
field.isLongClickable = false
|
||||
field.isClickable = false
|
||||
field.setBackgroundResource(R.drawable.bg_field_locked)
|
||||
field.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_lock_24, 0)
|
||||
field.compoundDrawablePadding = dp(8)
|
||||
field.alpha = 0.95f
|
||||
}
|
||||
|
||||
private fun dp(v: Int): Int =
|
||||
(v * layout.resources.displayMetrics.density).toInt()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user