From c39e4ba69379388d3ee6575a68b0b9e169ba5c34 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Mon, 27 Oct 2025 20:15:02 +0100 Subject: [PATCH] fix: Play service as privileged app for Passkey Cross Device Authentication #2244 --- CHANGELOG | 1 + .../com/kunzisoft/keepass/utils/AppUtil.kt | 44 +++++++++++++------ .../metadata/android/en-US/changelogs/147.txt | 3 +- .../metadata/android/fr-FR/changelogs/147.txt | 3 +- 4 files changed, 36 insertions(+), 15 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 9abad5cd6..41a6b2bbf 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ KeePassDX(4.2.2) * Fix database merge algorithm #2223 * Fix save search info #2243 + * Fix Play Service as privileged app for Passkey Cross Device Authentication #2244 KeePassDX(4.2.1) * Fix Magikeyboard autosearch #2233 diff --git a/app/src/main/java/com/kunzisoft/keepass/utils/AppUtil.kt b/app/src/main/java/com/kunzisoft/keepass/utils/AppUtil.kt index 88e3741ef..0e7c85dd3 100644 --- a/app/src/main/java/com/kunzisoft/keepass/utils/AppUtil.kt +++ b/app/src/main/java/com/kunzisoft/keepass/utils/AppUtil.kt @@ -98,25 +98,43 @@ object AppUtil { } val processedPackageNames = mutableSetOf() - for (resolveInfo in resolveInfoList) { val packageName = resolveInfo.activityInfo.packageName if (packageName != null && !processedPackageNames.contains(packageName)) { - try { - val packageInfo = packageManager.getPackageInfo( - packageName, - PackageManager.GET_SIGNING_CERTIFICATES - ) - val signatureFingerprints = packageInfo.signingInfo?.getAllFingerprints() - signatureFingerprints?.let { - browserList.add(AndroidPrivilegedApp(packageName, signatureFingerprints)) - processedPackageNames.add(packageName) - } - } catch (e: Exception) { - Log.e(AppUtil::class.simpleName, "Error processing package: $packageName", e) + buildAndroidPrivilegedApp(packageManager, packageName)?.let { privilegedApp -> + browserList.add(privilegedApp) + processedPackageNames.add(packageName) } } } + + // Add the Play Service + val gServices = "com.google.android.gms" + buildAndroidPrivilegedApp(packageManager, gServices)?.let { privilegedApp -> + browserList.add(privilegedApp) + processedPackageNames.add(gServices) + } + return browserList.distinctBy { it.packageName } // Ensure uniqueness just in case } + + @RequiresApi(Build.VERSION_CODES.P) + private fun buildAndroidPrivilegedApp( + packageManager: PackageManager, + packageName: String + ): AndroidPrivilegedApp? { + return try { + val packageInfo = packageManager.getPackageInfo( + packageName, + PackageManager.GET_SIGNING_CERTIFICATES + ) + val signatureFingerprints = packageInfo.signingInfo?.getAllFingerprints() + signatureFingerprints?.let { + AndroidPrivilegedApp(packageName, signatureFingerprints) + } + } catch (e: Exception) { + Log.e(AppUtil::class.simpleName, "Error processing package: $packageName", e) + null + } + } } \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/147.txt b/fastlane/metadata/android/en-US/changelogs/147.txt index 7c142c059..4237d6158 100644 --- a/fastlane/metadata/android/en-US/changelogs/147.txt +++ b/fastlane/metadata/android/en-US/changelogs/147.txt @@ -1,2 +1,3 @@ * Fix database merge algorithm #2223 - * Fix save search info #2243 \ No newline at end of file + * Fix save search info #2243 + * Fix Play Service as privileged app for Passkey Cross Device Authentication #2244 \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/changelogs/147.txt b/fastlane/metadata/android/fr-FR/changelogs/147.txt index 38d5eb173..34d700275 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/147.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/147.txt @@ -1,2 +1,3 @@ * Correction de l'algorithme de fusion des bases de données #2223 - * Correction de la sauvegarde des infos de recherche #2243 \ No newline at end of file + * Correction de la sauvegarde des infos de recherche #2243 + * Correction Play Service comme appli privilégiée pour l'authentification Passkey multi-appareils #2244 \ No newline at end of file