diff --git a/app/src/main/java/com/dano/test1/DatabaseDownloader.kt b/app/src/main/java/com/dano/test1/DatabaseDownloader.kt new file mode 100644 index 0000000..3c16f88 --- /dev/null +++ b/app/src/main/java/com/dano/test1/DatabaseDownloader.kt @@ -0,0 +1,74 @@ +package com.dano.test1 + +import android.content.Context +import android.util.Log +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import okhttp3.OkHttpClient +import okhttp3.Request +import java.io.File +import java.io.FileOutputStream + +object DatabaseDownloader { + + private const val DB_NAME = "questionnaire_database" + private const val SERVER_DOWNLOAD_URL = "http://49.13.157.44/exported_encrypted_database.db" + + private val client = OkHttpClient() + + fun downloadAndReplaceDatabase(context: Context) { + CoroutineScope(Dispatchers.IO).launch { + try { + Log.d("DOWNLOAD", "Download gestartet: $SERVER_DOWNLOAD_URL") + + val request = Request.Builder() + .url(SERVER_DOWNLOAD_URL) + .build() + + val response = client.newCall(request).execute() + if (!response.isSuccessful) { + Log.e("DOWNLOAD", "Fehler beim Download: ${response.code}") + return@launch + } + + // Temporäre verschlüsselte Datei speichern + val encryptedFile = File(context.cacheDir, "downloaded_encrypted_database.db") + response.body?.byteStream()?.use { input -> + FileOutputStream(encryptedFile).use { output -> + input.copyTo(output) + } + } + Log.d("DOWNLOAD", "Verschlüsselte Datei gespeichert: ${encryptedFile.absolutePath}") + + // Datei entschlüsseln (hier deine echte Entschlüsselungslogik einfügen) + val decryptedFile = File(context.cacheDir, "decrypted_database.db") + decryptDatabase(encryptedFile, decryptedFile) + Log.d("DOWNLOAD", "Datei entschlüsselt: ${decryptedFile.absolutePath}") + + // Alte DB ersetzen + val dbFile = context.getDatabasePath(DB_NAME) + if (dbFile.exists()) { + if (dbFile.delete()) { + Log.d("DOWNLOAD", "Alte Datenbank gelöscht.") + } else { + Log.e("DOWNLOAD", "Löschen der alten Datenbank fehlgeschlagen!") + return@launch + } + } + decryptedFile.copyTo(dbFile, overwrite = true) + + Log.d("DOWNLOAD", "Neue Datenbank erfolgreich eingesetzt.") + + } catch (e: Exception) { + Log.e("DOWNLOAD", "Fehler beim Download oder Ersetzen der DB", e) + } + } + } + + // Platzhalter für echte Entschlüsselung + private fun decryptDatabase(encryptedFile: File, outputFile: File) { + // TODO: hier echte Entschlüsselungslogik einfügen + encryptedFile.copyTo(outputFile, overwrite = true) + } +} diff --git a/app/src/main/java/com/dano/test1/DatabaseUploader.kt b/app/src/main/java/com/dano/test1/DatabaseUploader.kt index c3c4319..9ba2cf5 100644 --- a/app/src/main/java/com/dano/test1/DatabaseUploader.kt +++ b/app/src/main/java/com/dano/test1/DatabaseUploader.kt @@ -85,4 +85,4 @@ object DatabaseUploader { } }) } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/dano/test1/HandlerOpeningScreen.kt b/app/src/main/java/com/dano/test1/HandlerOpeningScreen.kt index c0b18a3..a70c6d5 100644 --- a/app/src/main/java/com/dano/test1/HandlerOpeningScreen.kt +++ b/app/src/main/java/com/dano/test1/HandlerOpeningScreen.kt @@ -24,6 +24,7 @@ class HandlerOpeningScreen(private val activity: MainActivity) { private lateinit var saveButton: Button private lateinit var editButton: Button private lateinit var uploadButton: Button + private lateinit var downloadButton: Button private val dynamicButtons = mutableListOf