fix(kiosk): target SDK 35 + setInstallReason for Android 16 compatibility
- compileSdk/targetSdk 34 → 35 (Android 15 stable) - versionCode 17 → 18, versionName 1.7.16 → 1.7.17 - PackageInstaller.SessionParams: add setInstallReason(INSTALL_REASON_USER) on API 26+ — required on Android 14+ to avoid STATUS_FAILURE=1 on self-update - DownloadManager failure: report dm_status + dm_reason in error payload so future issues include the HTTP error code (e.g. 404 vs network error) Fixes #91 #92
This commit is contained in:
@@ -5,14 +5,14 @@ plugins {
|
|||||||
|
|
||||||
android {
|
android {
|
||||||
namespace = "it.dadaloop.evershelf.kiosk"
|
namespace = "it.dadaloop.evershelf.kiosk"
|
||||||
compileSdk = 34
|
compileSdk = 35
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = "it.dadaloop.evershelf.kiosk"
|
applicationId = "it.dadaloop.evershelf.kiosk"
|
||||||
minSdk = 24
|
minSdk = 24
|
||||||
targetSdk = 34
|
targetSdk = 35
|
||||||
versionCode = 17
|
versionCode = 18
|
||||||
versionName = "1.7.16"
|
versionName = "1.7.17"
|
||||||
}
|
}
|
||||||
|
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
|
|||||||
@@ -774,7 +774,13 @@ class KioskActivity : AppCompatActivity() {
|
|||||||
val q = DownloadManager.Query().setFilterById(downloadId)
|
val q = DownloadManager.Query().setFilterById(downloadId)
|
||||||
val c = (getSystemService(DOWNLOAD_SERVICE) as DownloadManager).query(q)
|
val c = (getSystemService(DOWNLOAD_SERVICE) as DownloadManager).query(q)
|
||||||
var ok = false
|
var ok = false
|
||||||
if (c.moveToFirst()) ok = c.getInt(c.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL
|
var dmStatus = -1
|
||||||
|
var dmReason = -1
|
||||||
|
if (c.moveToFirst()) {
|
||||||
|
dmStatus = c.getInt(c.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS))
|
||||||
|
dmReason = c.getInt(c.getColumnIndexOrThrow(DownloadManager.COLUMN_REASON))
|
||||||
|
ok = dmStatus == DownloadManager.STATUS_SUCCESSFUL
|
||||||
|
}
|
||||||
c.close()
|
c.close()
|
||||||
if (ok) {
|
if (ok) {
|
||||||
pollHandler.removeCallbacksAndMessages(null); activeDownloadId = -1
|
pollHandler.removeCallbacksAndMessages(null); activeDownloadId = -1
|
||||||
@@ -784,7 +790,12 @@ class KioskActivity : AppCompatActivity() {
|
|||||||
pollHandler.removeCallbacksAndMessages(null); activeDownloadId = -1
|
pollHandler.removeCallbacksAndMessages(null); activeDownloadId = -1
|
||||||
setInstallUI("\u274C", getString(R.string.install_error_download), getString(R.string.install_error_download_detail), 0xFFf87171.toInt(), btnEnabled = true, progress = -2)
|
setInstallUI("\u274C", getString(R.string.install_error_download), getString(R.string.install_error_download_detail), 0xFFf87171.toInt(), btnEnabled = true, progress = -2)
|
||||||
runOnUiThread { activeInstallBtn?.text = getString(R.string.install_btn_retry) }
|
runOnUiThread { activeInstallBtn?.text = getString(R.string.install_btn_retry) }
|
||||||
ErrorReporter.reportMessage("install_download_failed", "DownloadManager returned failure for URL: $apkUrl")
|
ErrorReporter.reportMessage(
|
||||||
|
"install_download_failed",
|
||||||
|
"DownloadManager returned failure for URL: $apkUrl",
|
||||||
|
mapOf("dm_status" to dmStatus, "dm_reason" to dmReason,
|
||||||
|
"device" to buildDeviceLabel())
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -868,6 +879,11 @@ class KioskActivity : AppCompatActivity() {
|
|||||||
val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
|
val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
|
||||||
// Note: setAppPackageName() is intentionally omitted — it causes STATUS_FAILURE (1)
|
// Note: setAppPackageName() is intentionally omitted — it causes STATUS_FAILURE (1)
|
||||||
// on some OEM/Android versions even when the package name is correct.
|
// on some OEM/Android versions even when the package name is correct.
|
||||||
|
// setInstallReason is required on Android 14+ (API 34+) for PackageInstaller
|
||||||
|
// to accept self-updates; without it Android 16 returns STATUS_FAILURE=1.
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
params.setInstallReason(android.content.pm.PackageManager.INSTALL_REASON_USER)
|
||||||
|
}
|
||||||
val sessionId = pi.createSession(params)
|
val sessionId = pi.createSession(params)
|
||||||
val session = pi.openSession(sessionId)
|
val session = pi.openSession(sessionId)
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user