Skip to content

Conversation

@sosweetham
Copy link
Member

@sosweetham sosweetham commented Jan 19, 2026

Description of change

adds a go back button and a open settings button to open the page to allow camera permissions on scan page fallback which is used when the perm is not given

Issue Number

Closes #637
Closes #669

Type of change

  • Fix (a change which fixes an issue)

How the change has been tested

Manual

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features

    • Unified camera permission flow with a reusable permission dialog and manager for consistent behavior in Scan QR, selfie, and passport flows.
    • New actions to open app settings and retry permission checks from relevant screens.
  • Chores

    • Added mobile permission to allow opening app settings from the scanner.
    • App identifier updated.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 19, 2026

📝 Walkthrough

Walkthrough

Adds a camera-permission manager, a permission dialog UI, and permission-aware flows across scan, passport, and selfie features; updates Tauri mobile capabilities and the app identifier.

Changes

Cohort / File(s) Summary
Tauri config & capabilities
infrastructure/eid-wallet/src-tauri/capabilities/mobile.json, infrastructure/eid-wallet/src-tauri/tauri.conf.json
Added permission barcode-scanner:allow-open-app-settings and changed app identifier from foundation.metastate.eid-walletcom.kodski.eid-wallet.
Scan QR page & logic
infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte, infrastructure/eid-wallet/src/routes/(app)/scan-qr/scanLogic.ts
Introduced cameraPermissionDenied store; added actions retryPermission and handleOpenSettings; startScan now checks native permission and surfaces a permission-denied dialog instead of proceeding when denied.
Camera permission manager
infrastructure/eid-wallet/src/lib/utils/cameraPermission.ts, infrastructure/eid-wallet/src/lib/utils/index.ts
New createCameraPermissionManager exposing permissionState and methods checkAndRequestPermission, retryPermission, openSettings; re-exported from utils index.
Permission dialog UI
infrastructure/eid-wallet/src/lib/ui/CameraPermissionDialog/CameraPermissionDialog.svelte, .../index.ts, src/lib/ui/index.ts
New Drawer-based CameraPermissionDialog component with Open Settings and optional Go Back actions; added re-exports to UI index.
Passport & Selfie flows
infrastructure/eid-wallet/src/routes/(auth)/verify/steps/passport.svelte, infrastructure/eid-wallet/src/routes/(auth)/verify/steps/selfie.svelte
Replaced inline permission checks with the permission manager; added dialog display logic and Open Settings wiring; request flows now consult manager before obtaining camera streams.

Sequence Diagram

sequenceDiagram
    participant User
    participant UI as App UI
    participant PM as CameraPermissionManager
    participant OS as Mobile OS
    participant Camera as Camera API

    User->>UI: Trigger camera flow (Scan / Passport / Selfie)
    UI->>PM: checkAndRequestPermission()
    PM->>OS: checkPermissions / requestPermissions
    alt granted
        OS-->>PM: granted
        PM-->>UI: true
        UI->>Camera: getMainCameraStream / getFrontCameraStream
        Camera-->>UI: stream
    else denied
        OS-->>PM: denied
        PM-->>UI: false
        UI->>UI: show CameraPermissionDialog
        opt User opens settings
            User->>UI: Open Settings
            UI->>PM: openSettings()
            PM->>OS: openAppSettings()
        end
        opt User retries
            User->>UI: Retry
            UI->>PM: retryPermission()
            PM->>OS: checkPermissions
        end
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • Fix/final UI fixes #301 — modifies scan-qr permission handling and startScan logic (closely related to the scan permission flow changes).

Suggested reviewers

  • coodos
  • ananyayaya129

Poem

🐰 I hopped where camera shadows play,
A gentle drawer shows the missing way.
“Open Settings” shines a guiding light,
Retry or go back — the scan takes flight. 📸✨

🚥 Pre-merge checks | ✅ 2 | ❌ 3
❌ Failed checks (2 warnings, 1 inconclusive)
Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning The PR includes an unrelated Tauri app identifier change from 'foundation.metastate.eid-wallet' to 'com.kodski.eid-wallet' and a barcode-scanner permission addition not directly tied to the camera permission UX fix. Separate the identifier and barcode-scanner permission changes into a distinct PR; keep this PR focused solely on camera permission UX improvements.
Docstring Coverage ⚠️ Warning Docstring coverage is 40.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'feat: add re request perm logic' is vague and uses abbreviated terminology that doesn't clearly describe the feature. Clarify the title with complete words and specific functionality, e.g., 'feat: add camera permission retry and settings access for QR scan'.
✅ Passed checks (2 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The implementation successfully addresses issue #637 by adding camera permission UI flow, retry logic, and settings access to inform users and enable permission granting.
Description check ✅ Passed The PR description covers all required template sections with appropriate detail for a fix addressing camera permission UX, though the description text is somewhat informal.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

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 and usage tips.

Copy link
Contributor

@coodos coodos left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sosweetham we need to address the same problem in the KYC Pages as well when a user is doing KYC they may reject the camera prompt

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Fix all issues with AI agents
In
`@infrastructure/eid-wallet/src/lib/ui/CameraPermissionDialog/CameraPermissionDialog.svelte`:
- Around line 22-34: The handleSwipe function is currently always passed to
<Drawer> allowing local isOpen toggles even when dismissible is false or
onOpenChange is absent; either remove handleSwipe entirely or guard wiring so
swipe only changes state when dismissible is true and onOpenChange exists.
Update the component to conditionally pass handleSwipe (or make handleSwipe
no-op) based on the dismissible prop and presence of onOpenChange, ensuring you
reference the handleSwipe function, the isOpen variable, the onOpenChange
callback, and the Drawer component when making the change.

In `@infrastructure/eid-wallet/src/lib/utils/cameraPermission.ts`:
- Around line 66-74: The computed isDenied boolean is currently set to
!isGranted which incorrectly treats non-granted states like "prompt" as denied;
change the calculation to isDenied = permissions === "denied" and update the
permissionState.set call to use that value (keeping status, isGranted, isDenied,
isChecking fields) so the stored state accurately represents the denied state;
also update any type/signature for the permission state if necessary and
run/adjust any code or tests that reference permissionState.isDenied (e.g.,
retryPermission) to ensure behavior remains correct.

In `@infrastructure/eid-wallet/src/routes/`(auth)/verify/steps/selfie.svelte:
- Around line 49-51: Make handleOpenSettings() async and after awaiting
openSettings(), re-invoke requestCameraPermission() to re-check and update the
camera permission state when the user returns from system settings; update the
handleOpenSettings() functions in both selfie.svelte (handleOpenSettings) and
passport.svelte (handleOpenSettings) so they await openSettings() and then call
requestCameraPermission() to refresh the UI/permission dialog accordingly.
♻️ Duplicate comments (2)
infrastructure/eid-wallet/src/routes/(auth)/verify/steps/passport.svelte (2)

87-107: Same guard needed for permission-check errors as in the selfie flow.


111-113: Same missing retry/re-check after opening settings as in the selfie flow.

Also applies to: 448-453

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@infrastructure/eid-wallet/src/routes/`(auth)/verify/steps/passport.svelte:
- Around line 88-105: The call to checkAndRequestPermission() in
requestCameraPermission can throw and currently isn't caught; wrap the call in a
try/catch inside requestCameraPermission (before attempting getMainCameraStream)
so any thrown error will set permissionGranted.set(false), set
showPermissionDialog = true (and optionally log the error) and return,
preventing the function from rejecting and leaving the UI broken; keep the
existing try/catch around getMainCameraStream unchanged and ensure
requestCameraPermission handles both permission rejections and thrown errors
from checkAndRequestPermission().

…thub.com:MetaState-Prototype-Project/prototype into fix(eid-w)/reprompt-for-missing-camera-perms
@sosweetham
Copy link
Member Author

@coodos

@coodos coodos merged commit cefb6ed into main Jan 20, 2026
4 checks passed
@coodos coodos deleted the fix(eid-w)/reprompt-for-missing-camera-perms branch January 20, 2026 09:28
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.

[Bug] Permissions issue in eid wallet [Bug] [in-app] User unaware that camera permission is missing for QR scan

3 participants