44 lines
1.4 KiB
Kotlin
44 lines
1.4 KiB
Kotlin
package de.waypointaudio.util
|
|
|
|
import android.content.Context
|
|
import android.content.pm.PackageInfo
|
|
import android.content.pm.PackageManager
|
|
import android.os.Build
|
|
|
|
/**
|
|
* Liefert die aktuelle App-Version zur Laufzeit aus dem PackageManager.
|
|
* Damit muss die Anzeige bei Versions-Updates nicht mehr manuell gepflegt werden.
|
|
*/
|
|
data class AppVersionInfo(
|
|
val versionName: String,
|
|
val versionCode: Long
|
|
) {
|
|
/** Anzeige-Format, z. B. "1.5.2-version-dialog (17)". */
|
|
val display: String get() = "$versionName ($versionCode)"
|
|
}
|
|
|
|
object AppVersion {
|
|
fun get(context: Context): AppVersionInfo {
|
|
val pm = context.packageManager
|
|
val pkg = context.packageName
|
|
val info: PackageInfo = try {
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
|
pm.getPackageInfo(pkg, PackageManager.PackageInfoFlags.of(0))
|
|
} else {
|
|
@Suppress("DEPRECATION")
|
|
pm.getPackageInfo(pkg, 0)
|
|
}
|
|
} catch (_: PackageManager.NameNotFoundException) {
|
|
return AppVersionInfo(versionName = "?", versionCode = 0L)
|
|
}
|
|
val name = info.versionName ?: "?"
|
|
val code = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
|
info.longVersionCode
|
|
} else {
|
|
@Suppress("DEPRECATION")
|
|
info.versionCode.toLong()
|
|
}
|
|
return AppVersionInfo(versionName = name, versionCode = code)
|
|
}
|
|
}
|