You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
3.5 KiB
Kotlin

package com.cyb3rko.techniklogger
import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.util.Base64
import android.util.Log
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.afollestad.materialdialogs.MaterialDialog
import com.androidnetworking.AndroidNetworking
import com.androidnetworking.error.ANError
import com.androidnetworking.interfaces.StringRequestListener
import com.cyb3rko.installer.DownloadApk
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import es.dmoral.toasty.Toasty
import java.nio.charset.StandardCharsets
internal fun updateCheck(activity: MainActivity) {
AndroidNetworking.initialize(activity)
AndroidNetworking.get("https://git.aldiserver.de/api/v1/repos/niko/technik-logger-app/contents/app/build.gradle")
.addHeaders("Authorization", "token d70a26aa455b25e60885ba5ff31cce231d454f82")
.doNotCacheResponse()
.build()
.getAsString(object : StringRequestListener {
override fun onResponse(response: String?) {
try {
var parts = response!!.split("content\":\"")
var parts2 = parts[1].split("\",\"target")
val content = String(Base64.decode(parts2[0], Base64.DEFAULT), StandardCharsets.UTF_8)
parts = content.split("versionCode ")
parts2 = parts[1].split("\n")
val neuesterVersionCode = parts2[0].toInt()
parts = parts2[1].split("\"")
parts2 = parts[1].split("\"")
val newestVersion = parts2[0]
if (BuildConfig.VERSION_CODE != neuesterVersionCode) {
Log.d("Technik-Logger Updater", "Update verfügbar: $newestVersion")
showDownloadDialog(activity, newestVersion)
ActivityCompat.requestPermissions(
activity, arrayOf(Manifest.permission.INTERNET, Manifest.permission.WRITE_EXTERNAL_STORAGE), 1
)
} else {
Log.d(activity.toString(), "App auf dem neuesten Stand")
}
} catch (e: Exception) {
Toasty.error(activity, "Update-Check fehlgeschlagen", Toasty.LENGTH_LONG).show()
}
}
override fun onError(anError: ANError?) {
Log.d(activity.toString(), "Update-Abfrage fehlgeschlagen: ${anError!!.errorBody.trimIndent()}")
}
})
}
internal fun showDownloadDialog(context: Context, newestVersion: String) {
MaterialAlertDialogBuilder(context)
.setTitle("Neues Update verfügbar")
.setMessage("Das Update '$newestVersion' steht zum Download bereit!\n\nAktuell installierte Version: '${BuildConfig.VERSION_NAME}'")
.setPositiveButton("Herunterladen") { _, _ ->
downloadApk(context, newestVersion)
}
.show()
}
private fun downloadApk(context: Context, newestVersion: String) {
if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
val link = "https://cdn.cyb3rko.de/Apps/Technik-Logger/Technik-Logger%20v$newestVersion.apk"
DownloadApk(context).startDownloadingApk(link)
} else {
Toasty.error(context, "Fehlende Berechtigung, erteile diese beim nächsten App-Start", Toasty.LENGTH_LONG).show()
}
}