@@ -157,7 +157,7 @@ class MdocEngagementPresenterImpl(
157157 presenterScope.launch {
158158 val engagementResult = engagementManager.createEngagement {
159159 engagement { qr {} }
160- retrieval { ble { centralClientMode = false ; peripheralServerMode = true } }
160+ retrieval { ble { centralClientMode = true ; peripheralServerMode = true } }
161161 }
162162 engagementResult.onSuccess { engagement ->
163163 engagement.start()
@@ -343,19 +343,23 @@ class MdocEngagementPresenterImpl(
343343 // this is stale state from a previous session - treat as INITIAL with toggle UI
344344 val model = when {
345345 sessionState.phase == UiPhase .TERMINAL && activeEngagement == null && ! hasHadEngagement.value -> {
346- log.debug(" >>> Stale TERMINAL state detected (never had engagement in this session) - returning Initial with toggle" )
347- MdocEngagementPresenter .Model .Initial (
346+ log.debug(" >>> Stale TERMINAL state detected (never had engagement in this session) - returning Engagement with toggle" )
347+ MdocEngagementPresenter .Model .Engagement (
348+ qrImage = null ,
349+ engagementEvent = null ,
348350 showQr = false ,
349351 showQrScanner = showQrScanner,
350352 onQrScanned = onQrScanned,
351353 onStateEvent = onEvent
352354 )
353355 }
354356
355- // If phase is ENGAGEMENT but there's no active engagement, it's stale state - treat as INITIAL
357+ // If phase is ENGAGEMENT but there's no active engagement, it's stale state - treat as ready for engagement
356358 sessionState.phase == UiPhase .ENGAGEMENT && activeEngagement == null -> {
357- log.debug(" >>> Stale ENGAGEMENT state detected (no active engagement) - returning Initial with toggle" )
358- MdocEngagementPresenter .Model .Initial (
359+ log.debug(" >>> Stale ENGAGEMENT state detected (no active engagement) - returning Engagement with toggle" )
360+ MdocEngagementPresenter .Model .Engagement (
361+ qrImage = null ,
362+ engagementEvent = null ,
359363 showQr = false ,
360364 showQrScanner = showQrScanner,
361365 onQrScanned = onQrScanned,
@@ -364,28 +368,17 @@ class MdocEngagementPresenterImpl(
364368 }
365369
366370 sessionState.phase == UiPhase .ENGAGEMENT -> {
367- // If user wants to scan QR (showQrScanner=true), treat as INITIAL state to show scanner UI
368- // This allows switching from Display QR to Scan QR without waiting for engagement to close
369- if (showQrScanner) {
370- log.debug(" >>> Returning Model: INITIAL (in ENGAGEMENT but showQrScanner=true)" )
371- MdocEngagementPresenter .Model .Initial (
372- showQr = false ,
373- showQrScanner = true ,
374- onQrScanned = onQrScanned,
375- onStateEvent = onEvent
376- )
377- } else {
378- log.debug(" >>> Returning Model: ENGAGEMENT (showQr=${sessionState.qrMode == QrMode .DISPLAY } , showQrScanner=$showQrScanner )" )
379- // Show QR or NFC prompt based on SessionUiState
380- MdocEngagementPresenter .Model .Engagement (
381- qrImage = if (sessionState.qrMode == QrMode .DISPLAY ) qrImage else null ,
382- engagementEvent = null ,
383- showQr = sessionState.qrMode == QrMode .DISPLAY ,
384- showQrScanner = showQrScanner,
385- onQrScanned = onQrScanned,
386- onStateEvent = onEvent
387- )
388- }
371+ log.debug(" >>> Returning Model: ENGAGEMENT (showQr=${sessionState.qrMode == QrMode .DISPLAY && ! showQrScanner} , showQrScanner=$showQrScanner )" )
372+ // Always return Engagement model to avoid slide animations
373+ // When showQrScanner=true, prioritize scanner UI over Display QR
374+ MdocEngagementPresenter .Model .Engagement (
375+ qrImage = if (sessionState.qrMode == QrMode .DISPLAY && ! showQrScanner) qrImage else null ,
376+ engagementEvent = null ,
377+ showQr = sessionState.qrMode == QrMode .DISPLAY && ! showQrScanner,
378+ showQrScanner = showQrScanner,
379+ onQrScanned = onQrScanned,
380+ onStateEvent = onEvent
381+ )
389382 }
390383
391384 sessionState.phase == UiPhase .TRANSFER -> {
@@ -449,8 +442,10 @@ class MdocEngagementPresenterImpl(
449442 }
450443
451444 null -> {
452- log.debug(" >>> Returning Model: INITIAL (phase=TERMINAL, terminalOutcome=null)" )
453- MdocEngagementPresenter .Model .Initial (
445+ log.debug(" >>> Returning Model: ENGAGEMENT (phase=TERMINAL, terminalOutcome=null)" )
446+ MdocEngagementPresenter .Model .Engagement (
447+ qrImage = null ,
448+ engagementEvent = null ,
454449 showQr = false ,
455450 showQrScanner = showQrScanner,
456451 onQrScanned = onQrScanned,
@@ -461,8 +456,10 @@ class MdocEngagementPresenterImpl(
461456 }
462457
463458 else -> {
464- log.debug(" >>> Returning Model: INITIAL (phase=${sessionState.phase} )" )
465- MdocEngagementPresenter .Model .Initial (
459+ log.debug(" >>> Returning Model: ENGAGEMENT (phase=${sessionState.phase} )" )
460+ MdocEngagementPresenter .Model .Engagement (
461+ qrImage = null ,
462+ engagementEvent = null ,
466463 showQr = false ,
467464 showQrScanner = showQrScanner,
468465 onQrScanned = onQrScanned,
0 commit comments