From fc566a4345cbe2e321603f54a2f4e9ba4ea42e77 Mon Sep 17 00:00:00 2001 From: franzap <_@franzap.com> Date: Thu, 25 Dec 2025 20:13:27 -0300 Subject: [PATCH] Fix alreadyInProgress issue --- .../plugins/AndroidPackageManagerPlugin.kt | 13 +++++---- .../android_package_manager.dart | 29 +++---------------- 2 files changed, 11 insertions(+), 31 deletions(-) diff --git a/android/app/src/main/kotlin/dev/zapstore/alpha/plugins/AndroidPackageManagerPlugin.kt b/android/app/src/main/kotlin/dev/zapstore/alpha/plugins/AndroidPackageManagerPlugin.kt index b8b146f..f99f89c 100644 --- a/android/app/src/main/kotlin/dev/zapstore/alpha/plugins/AndroidPackageManagerPlugin.kt +++ b/android/app/src/main/kotlin/dev/zapstore/alpha/plugins/AndroidPackageManagerPlugin.kt @@ -470,15 +470,16 @@ class AndroidPackageManagerPlugin : FlutterPlugin, MethodCallHandler, } if (hasActiveSession(packageName)) { - pendingUserActionIntents[packageName]?.let { launchConfirmDialog(packageName, it) } - // IMPORTANT: Emit an event so Dart can transition out of active states. if (pendingUserActionIntents.containsKey(packageName)) { + // Real pending dialog - re-launch it and let user complete + pendingUserActionIntents[packageName]?.let { launchConfirmDialog(packageName, it) } emitInstallStatus(packageName, InstallStatus.PENDING_USER_ACTION, "User confirmation pending") - } else { - emitInstallStatus(packageName, InstallStatus.ALREADY_IN_PROGRESS, "Installation already in progress", ErrorCode.ALREADY_IN_PROGRESS) + result.success(mapOf("started" to false, "alreadyInProgress" to true)) + return } - result.success(mapOf("started" to false, "alreadyInProgress" to true)) - return + // No pending dialog = stale session. Abandon and proceed with fresh install. + Log.d(TAG, "Abandoning stale session for $packageName") + abandonExistingSession(packageName) } if (expectedHash != null && expectedSize != null) { diff --git a/lib/services/package_manager/android_package_manager.dart b/lib/services/package_manager/android_package_manager.dart index 96db75a..ff76376 100644 --- a/lib/services/package_manager/android_package_manager.dart +++ b/lib/services/package_manager/android_package_manager.dart @@ -170,19 +170,8 @@ final class AndroidPackageManager extends PackageManager { break; case InstallStatus.alreadyInProgress: - // Native is stuck thinking an install is in progress. - // Treat as failure so user can see the issue and retry manually. - setOperation( - appId, - OperationFailed( - target: target, - type: FailureType.installFailed, - message: 'Android is busy. Please try again in a moment.', - filePath: filePath, - ), - ); - // Move on to next app in queue - _advanceAfterDelay(); + // Real pending dialog exists - Kotlin will also send pendingUserAction event + // which transitions to Installing. Nothing to do here. break; case InstallStatus.success: @@ -376,18 +365,8 @@ final class AndroidPackageManager extends PackageManager { final resultMap = Map.from(result ?? {}); if (resultMap['alreadyInProgress'] == true) { - // Native is stuck thinking an install is in progress. - // Treat as failure so user can see and retry manually. - setOperation( - appId, - OperationFailed( - target: target, - type: FailureType.installFailed, - message: 'Android is busy. Please try again in a moment.', - filePath: filePath, - ), - ); - _advanceAfterDelay(); + // Real pending dialog exists - Kotlin re-launched it and sent pendingUserAction + // event which transitions to Installing. Nothing to do here. return; }