Skip to content

Feature/wal 750#1874

Open
SuperBatata wants to merge 43 commits into
mainfrom
feature/wal-750
Open

Feature/wal 750#1874
SuperBatata wants to merge 43 commits into
mainfrom
feature/wal-750

Conversation

@SuperBatata

Copy link
Copy Markdown
Contributor

This pull request introduces QR code scanning functionality to the Android app, improves credential data handling, and enhances the UI to support navigation and display of credential details. It also adds necessary dependencies and permissions for camera and barcode scanning support.

QR Code Scanning and Camera Support:

  • Added a new QrScanner.android.kt composable that implements QR code scanning using CameraX and ML Kit, handling camera permissions and scan results.
  • Updated the Android manifest to request camera permissions and declare camera hardware as an optional feature.
  • Enabled Android builds by default in gradle.properties.
  • Added CameraX and ML Kit dependencies in the project configuration files and build scripts. [1] [2] [3]

Credential Data Model and Serialization:

  • Updated WalletDemoCredential to include a subject field and a credentialData field of type JsonObject, and annotated it with @Serializable for JSON serialization support.
  • Updated logic to populate the new fields when constructing credentials on mobile.
  • Added kotlinx-serialization-json as a dependency in both shared logic and UI modules. [1] [2]

UI Enhancements and Navigation:

  • Refactored the main app composable to support navigation between the main wallet screen, receiving credentials, and viewing credential details. [1] [2]
  • Enhanced CredentialCard to be clickable and to display additional credential details, including subject and added date, using a new CredentialDetail composable. [1] [2] [3]

- Implement `ReceiveCredential` screen with QR scan and manual entry modes
- Add Android-specific `QrScanner` implementation using CameraX and ML Kit
- Implement navigation between `WalletScreen` and `ReceiveCredential`
- Enable Android builds in `gradle.properties`
- Implement `CredentialDetailScreen` to display credential metadata and flattened data
- Update `WalletDemoCredential` and related metadata models to include `credentialData` and `subject`
- Add navigation to credential details from the `WalletScreen`
- Enhance `ReceiveCredentials` screen with success callbacks and test tags
- Remove unused Lock button from the receive screen
@linear-code

linear-code Bot commented Jul 8, 2026

Copy link
Copy Markdown

WAL-750

@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 71bdfd3f-050b-452c-9ba5-99dd0eb830ca

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@SuperBatata SuperBatata requested a review from szijpeter July 8, 2026 08:49
@SuperBatata SuperBatata self-assigned this Jul 8, 2026
- Update mock and test credentials to include `subject` and structured `credentialData`.
- Enhance UI tests with assertions for the credential detail screen.
- Update UI test scenarios to reflect the revised receive flow navigation.
- Add `credentialData` property documentation to `MobileWalletCredential`.
- Implement `ReceiveCredential` screen with QR scan and manual entry modes
- Add Android-specific `QrScanner` implementation using CameraX and ML Kit
- Implement navigation between `WalletScreen` and `ReceiveCredential`
- Enable Android builds in `gradle.properties`
- Implement `CredentialDetailScreen` to display credential metadata and flattened data
- Update `WalletDemoCredential` and related metadata models to include `credentialData` and `subject`
- Add navigation to credential details from the `WalletScreen`
- Enhance `ReceiveCredentials` screen with success callbacks and test tags
- Remove unused Lock button from the receive screen
- Update mock and test credentials to include `subject` and structured `credentialData`.
- Enhance UI tests with assertions for the credential detail screen.
- Update UI test scenarios to reflect the revised receive flow navigation.
- Add `credentialData` property documentation to `MobileWalletCredential`.
@szijpeter szijpeter changed the base branch from main to feature/wal-1065-api-contract-gates July 8, 2026 10:39
Base automatically changed from feature/wal-1065-api-contract-gates to main July 10, 2026 08:05
- Update `MobileWalletCredential` to remove raw payload data, optimizing the credential list for mobile UI.
- Add `MobileWalletCredentialDetails` and `credentialDetails` method to fetch full credential data as a JSON string.
- Introduce `resolveOffer` to check for transaction code requirements before starting the issuance flow.
- Update `CredentialDetailScreen` to parse and display credential data from the new JSON format.
* Add transaction code (PIN) handling to manual and scanned offer flows.
* Introduce `ResolvingOffer` state for asynchronous offer resolution.
* Refactor credential models to separate summary list data from full JSON details.
* Implement deep link navigation to automatically route to the Receive screen.
* Extend iOS `WalletSdkBridge` to support fetching specific credential details.
* Updated `DemoWallet` interface to include `resolveOffer` and `credentialDetails`.
* Added `txCode` support to the credential `receive` flow.
* Improved deep link handling to support automated issuance and presentation flows.
* Added comprehensive unit and UI tests for `txCode` prompts and offer resolution logic.
…wal-750

# Conflicts:
#	waltid-applications/waltid-wallet-demo-compose/androidApp/src/androidTest/java/id/walt/walletdemo/compose/android/PublicDemoBackendE2ETest.kt
#	waltid-libraries/protocols/waltid-openid4vc-wallet-mobile/src/iosMain/kotlin/id/walt/wallet2/mobile/swiftinterop/WalletSdkBridge.kt
#	waltid-libraries/protocols/waltid-openid4vc-wallet-mobile/src/iosTest/kotlin/id/walt/wallet2/mobile/swiftinterop/WalletSdkBridgeTest.kt
- Add camera permission handling to UI tests
- Improve deep link navigation reliability in `PublicDemoBackendE2ETest`
- Switch to `DemoTestBackend` for test sessions
- Remove commented-out `UrlActionSection` in `WalletScreen.kt`
@SuperBatata SuperBatata marked this pull request as ready for review July 13, 2026 08:18
@SuperBatata SuperBatata requested review from Copilot and removed request for Copilot July 13, 2026 08:18
Copilot AI review requested due to automatic review settings July 13, 2026 10:42

This comment was marked as outdated.

@szijpeter

szijpeter commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

hey @SuperBatata, I've prepared #1898 in the meanwhile to extract the credential data exposure and display into its own PR. may I suggest to review it and rebase this branch/PR on top of it to avoid further conflicts down the line? thanks

…wal-750

# Conflicts:
#	gradle/libs.versions.toml
#	waltid-applications/waltid-wallet-demo-compose/sharedLogic/src/commonMain/kotlin/id/walt/walletdemo/compose/logic/WalletDemoController.kt
#	waltid-applications/waltid-wallet-demo-compose/sharedLogic/src/commonMain/kotlin/id/walt/walletdemo/compose/logic/WalletDemoCredential.kt
#	waltid-applications/waltid-wallet-demo-compose/sharedLogic/src/commonMain/kotlin/id/walt/walletdemo/compose/logic/WalletDemoUiState.kt
#	waltid-applications/waltid-wallet-demo-compose/sharedLogic/src/commonTest/kotlin/id/walt/walletdemo/compose/logic/WalletDemoControllerTest.kt
#	waltid-applications/waltid-wallet-demo-compose/sharedLogic/src/mobileMain/kotlin/id/walt/walletdemo/compose/logic/MobileDemoWallet.kt
#	waltid-applications/waltid-wallet-demo-compose/sharedLogic/src/wasmJsMain/kotlin/id/walt/walletdemo/compose/logic/MockDemoWallet.kt
#	waltid-applications/waltid-wallet-demo-compose/sharedUI/build.gradle.kts
#	waltid-applications/waltid-wallet-demo-compose/sharedUI/src/commonMain/kotlin/id/walt/walletdemo/compose/ui/components/CredentialCard.kt
#	waltid-applications/waltid-wallet-demo-compose/sharedUI/src/commonMain/kotlin/id/walt/walletdemo/compose/ui/screens/WalletScreen.kt
#	waltid-applications/waltid-wallet-demo-compose/sharedUI/src/mobileUiTest/kotlin/id/walt/walletdemo/compose/ui/WalletDemoAppTestScenarios.kt
#	waltid-libraries/protocols/waltid-openid4vc-wallet-mobile/src/commonMain/kotlin/id/walt/wallet2/mobile/MobileWallet.kt
- Implement `resolveOffer` in the Wallet SDK and KMP bridge to determine if a transaction code (PIN) is required before receipt.
- Add a UIKit-based `QRScannerView` using `AVFoundation` to the iOS demo app.
- Update `ReceiveView` with segmented "Scan QR" and "Enter link" modes.
- Add support for conditional PIN input in `WalletViewModel` based on the offer resolution result.
- Update `Info.plist` with `NSCameraUsageDescription` for QR code scanning.
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants