From cfcb689ffc0b9122da683cc728984dc9dbe5d0f7 Mon Sep 17 00:00:00 2001 From: oxidiert Date: Fri, 26 Sep 2025 12:28:11 +0200 Subject: [PATCH] added session time stamp and online/offline state --- app/src/main/AndroidManifest.xml | 3 + .../com/dano/test1/HandlerOpeningScreen.kt | 137 +++++++----------- .../main/java/com/dano/test1/LoginManager.kt | 27 ++-- .../main/java/com/dano/test1/MainActivity.kt | 92 +++++++++--- .../main/java/com/dano/test1/NetworkUtilis.kt | 19 +++ .../main/java/com/dano/test1/TokenStore.kt | 30 ++-- app/src/main/res/layout/opening_screen.xml | 129 +++++++++++------ 7 files changed, 255 insertions(+), 182 deletions(-) create mode 100644 app/src/main/java/com/dano/test1/NetworkUtilis.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9e49029..49acd6e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,7 +3,9 @@ xmlns:tools="http://schemas.android.com/tools" package="com.dano.test1"> + + () private val questionnaireFiles = mutableMapOf() @@ -42,6 +49,15 @@ class HandlerOpeningScreen(private val activity: MainActivity) { private var uiFreeze: Boolean = false + // Status-Updater (jede Minute) + private val uiHandler = Handler(Looper.getMainLooper()) + private val statusTicker = object : Runnable { + override fun run() { + updateStatusStrip() + uiHandler.postDelayed(this, 60_000) // jede Minute + } + } + // Feste Standard-Randfarben private val STROKE_ENABLED = Color.parseColor("#8C79F2") // wenn anklickbar private val STROKE_DISABLED = Color.parseColor("#D8D3F5") // wenn nicht anklickbar @@ -62,6 +78,11 @@ class HandlerOpeningScreen(private val activity: MainActivity) { setupDownloadButton() setupDatabaseButtonHandler() + // Statusleiste initial & Ticker starten + uiHandler.removeCallbacks(statusTicker) + updateStatusStrip() + uiHandler.post(statusTicker) + val pathExists = File("/data/data/com.dano.test1/databases/questionnaire_database").exists() updateMainButtonsState(pathExists) if (pathExists && !editText.text.isNullOrBlank()) buttonLoad.performClick() @@ -79,6 +100,10 @@ class HandlerOpeningScreen(private val activity: MainActivity) { downloadButton = activity.findViewById(R.id.downloadButton) databaseButton = activity.findViewById(R.id.databaseButton) + // NEU: + statusSession = activity.findViewById(R.id.statusSession) + statusOnline = activity.findViewById(R.id.statusOnline) + val tag = editText.tag as? String ?: "" editText.hint = t(tag) textView.text = t("example_text") @@ -278,6 +303,9 @@ class HandlerOpeningScreen(private val activity: MainActivity) { private fun applyUpdateButtonTexts(force: Boolean) { if (uiFreeze && !force) return + // Statuszeile bei jedem Refresh aktualisieren + updateStatusStrip() + questionnaireFiles.forEach { (button, fileName) -> val entry = questionnaireEntries.firstOrNull { it.file == fileName } val key = fileName.substringAfter("questionnaire_").substringAfter("_").removeSuffix(".json") @@ -291,7 +319,6 @@ class HandlerOpeningScreen(private val activity: MainActivity) { val enabled = button.isEnabled val locked = !enabled && !completed - // Rahmenbreite & -farbe je nach Klickbarkeit setClickableStroke(button, enabled) if (locked) { @@ -302,7 +329,6 @@ class HandlerOpeningScreen(private val activity: MainActivity) { setLockedAppearance(button, false) parts.title.setTextColor(Color.parseColor("#2F2A49")) parts.subtitle.setTextColor(Color.parseColor("#7B7794")) - // Tönung nur wenn showPoints == true applyTintForButton(button, points, emphasize = enabled) } @@ -357,7 +383,6 @@ class HandlerOpeningScreen(private val activity: MainActivity) { button.isEnabled = shouldEnable button.alpha = if (completed || shouldEnable) 1.0f else 0.6f - // Rahmenbreite & -farbe je nach Klickbarkeit setClickableStroke(button, shouldEnable) cardParts[button]?.let { parts -> @@ -369,7 +394,6 @@ class HandlerOpeningScreen(private val activity: MainActivity) { setLockedAppearance(button, false) parts.title.setTextColor(Color.parseColor("#2F2A49")) parts.subtitle.setTextColor(Color.parseColor("#7B7794")) - // Tönung nur wenn showPoints == true applyTintForButton(button, getPointsForButton(button), emphasize = shouldEnable) } @@ -394,11 +418,6 @@ class HandlerOpeningScreen(private val activity: MainActivity) { } } - // öffentliche Wrapper - private fun updateButtonTexts() = applyUpdateButtonTexts(force = false) - private fun setButtonsEnabled(enabledButtons: List