From e337cf031ea249b4dde5406cbca6161d4696bee6 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 15 Jan 2026 10:40:27 -0300 Subject: [PATCH] Take signer into account when finding installed version in app details and multiple candidates with the same version code exist --- .../org/fdroid/ui/details/DetailsPresenter.kt | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/org/fdroid/ui/details/DetailsPresenter.kt b/app/src/main/kotlin/org/fdroid/ui/details/DetailsPresenter.kt index f037bcab0..4ff9f91f5 100644 --- a/app/src/main/kotlin/org/fdroid/ui/details/DetailsPresenter.kt +++ b/app/src/main/kotlin/org/fdroid/ui/details/DetailsPresenter.kt @@ -126,14 +126,14 @@ fun DetailsPresenter( ) } } - val possibleUpdate = remember(versions, appPrefs) { - if (versions == null || appPrefs == null) { + val possibleUpdate = remember(versions, appPrefs, packageInfo) { + if (versions == null || appPrefs == null || packageInfo == null) { null } else { updateChecker.getUpdate( versions = versions, - allowedSignersGetter = app.metadata.preferredSigner?.let { { setOf(it) } }, - allowedReleaseChannels = appPrefs.releaseChannels, + packageInfo = packageInfo, + releaseChannels = appPrefs.releaseChannels, // ignoring existing preferences to include ignored versions preferencesGetter = null, ) @@ -143,7 +143,22 @@ fun DetailsPresenter( getLongVersionCode(packageInfo) } val installedVersion = packageInfo?.let { - versions?.find { it.versionCode == installedVersionCode } + val installedVersions = versions?.filter { it.versionCode == installedVersionCode } + when (installedVersions?.size) { + null -> null + 0 -> null + 1 -> installedVersions.first() + // more than version with the same version code, find a matching signer + else -> installedVersions.find { + val versionSigners = it.signer?.sha256?.toSet() + // F-Droid allows versions without a signer entry, allow those + if (versionSigners != null && installedSigner != null) { + versionSigners.intersect(setOf(installedSigner)).isNotEmpty() + } else { + true + } + } + } } val authorName = app.authorName val authorHasMoreThanOneApp = if (authorName == null) false else {