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
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()
|
|
}
|
|
}
|