You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

12 KiB

Camera Implementation Documentation

Overview

This document describes how camera functionality is implemented across the TimeSafari application. The application uses cameras for several purposes:

  1. QR Code scanning for contact sharing and verification
  2. Photo capture for gift records
  3. Profile photo management
  4. Shared photo handling
  5. Image upload and processing

Components

QRScannerDialog.vue

Primary component for QR code scanning in web browsers.

Key Features:

  • Uses qrcode-stream for web-based QR scanning
  • Supports both front and back cameras
  • Provides real-time camera status feedback
  • Implements error handling with user-friendly messages
  • Includes camera switching functionality

Camera Access Flow:

  1. Checks for camera API availability
  2. Enumerates available video devices
  3. Requests camera permissions
  4. Initializes camera stream with preferred settings
  5. Handles various error conditions with specific messages

PhotoDialog.vue

Component for photo capture and selection.

Key Features:

  • Cross-platform photo capture interface
  • Image cropping capabilities
  • File selection fallback
  • Unified interface for different platforms
  • Progress feedback during upload
  • Comprehensive error handling

Camera Access Flow:

  1. User initiates photo capture
  2. Platform-specific camera access is requested
  3. Image is captured or selected
  4. Optional cropping is performed
  5. Image is processed and uploaded
  6. URL is returned to caller

ImageMethodDialog.vue

Component for selecting image input method.

Key Features:

  • Multiple input methods (camera, file upload, URL)
  • Unified interface for image selection
  • Integration with PhotoDialog for processing
  • Support for image cropping
  • URL-based image handling

Camera Access Flow:

  1. User selects camera option
  2. PhotoDialog is opened for capture
  3. Captured image is processed
  4. Image is returned to parent component

SharedPhotoView.vue

Component for handling shared photos.

Key Features:

  • Processes incoming shared photos
  • Options to use photo for gifts or profile
  • Image preview and confirmation
  • Server upload integration
  • Temporary storage management

Photo Processing Flow:

  1. Photo is shared to application
  2. Stored temporarily in IndexedDB
  3. User chooses usage (gift/profile)
  4. Image is processed accordingly
  5. Server upload is performed

ContactQRScanShowView.vue

Component for QR code scanning in contact sharing.

Key Features:

  • QR code scanning interface
  • Camera controls (start/stop)
  • Platform-specific implementations
  • Error handling and status feedback

Camera Access Flow:

  1. User initiates scanning
  2. Camera permissions are checked
  3. Camera stream is initialized
  4. QR codes are detected in real-time
  5. Results are processed

Services

QRScanner Services

WebDialogQRScanner

Web-based implementation of QR scanning.

Key Methods:

  • checkPermissions(): Verifies camera permission status
  • requestPermissions(): Requests camera access
  • isSupported(): Checks for camera API support
  • Handles various error conditions with specific messages

CapacitorQRScanner

Native implementation using Capacitor's MLKit.

Key Features:

  • Uses @capacitor-mlkit/barcode-scanning
  • Supports both front and back cameras
  • Implements permission management
  • Provides continuous scanning capability

Platform Services

WebPlatformService

Web-specific implementation of platform features.

Camera Capabilities:

  • Uses HTML5 file input with capture attribute for mobile
  • Uses getUserMedia API for desktop webcam access
  • Falls back to file selection if camera unavailable
  • Processes captured images for consistent format
  • Handles both mobile and desktop browser environments

CapacitorPlatformService

Native implementation using Capacitor.

Camera Features:

  • Uses Camera.getPhoto() for native camera access
  • Supports image editing
  • Configures high-quality image capture
  • Handles base64 image processing
  • Provides native camera UI

ElectronPlatformService

Desktop implementation (currently unimplemented).

Status:

  • Camera functionality not yet implemented
  • Planned to use Electron's media APIs
  • Will support desktop camera access

Camera Usage Scenarios

Gift Photo Capture

Implementation:

  • Uses PhotoDialog for capture/selection
  • Supports multiple input methods
  • Optional image cropping
  • Server upload with authentication
  • Integration with gift records

Flow:

  1. User initiates photo capture from gift details
  2. ImageMethodDialog presents input options
  3. PhotoDialog handles capture/selection
  4. Image is processed and uploaded
  5. URL is attached to gift record

Profile Photo Management

Implementation:

  • Uses same PhotoDialog component
  • Enforces square aspect ratio
  • Requires image cropping
  • Updates user profile settings
  • Handles profile image updates

Flow:

  1. User initiates profile photo update
  2. PhotoDialog opens with cropping enabled
  3. Image is captured/selected
  4. User crops to square aspect ratio
  5. Image is uploaded and profile updated

Shared Photo Processing

Implementation:

  • Handles incoming shared photos
  • Temporary storage in IndexedDB
  • Options for photo usage
  • Server upload integration
  • Cleanup after processing

Flow:

  1. Photo is shared to application
  2. Stored temporarily in IndexedDB
  3. SharedPhotoView presents options
  4. User chooses usage (gift/profile)
  5. Image is processed accordingly

QR Code Scanning

Implementation:

  • Platform-specific scanning components
  • Real-time camera feed processing
  • QR code detection and validation
  • Contact information processing
  • Error handling and retry

Flow:

  1. User initiates QR scanning
  2. Camera permissions are checked
  3. Camera stream is initialized
  4. QR codes are detected
  5. Contact information is processed

QR Code Workflow

Implementation Details:

The QR code scanning workflow is implemented across multiple components and services to provide a seamless experience for contact sharing and verification. The system supports both web-based and native implementations through platform-specific services.

QR Code Generation

Contact QR Codes:

  • Generated using qrcode.vue component
  • Contains encrypted contact information
  • Includes user ID and verification data
  • Supports offline sharing
  • Implements error correction

QR Code Format:

{
  "type": "contact",
  "userId": "encrypted_user_id",
  "timestamp": "creation_time",
  "version": "qr_code_version",
  "data": "encrypted_contact_data"
}

QR Code Scanning Workflow

1. Initiation:

  • User selects "Scan QR Code" option
  • Platform-specific scanner is initialized
  • Camera permissions are verified
  • Appropriate scanner component is loaded

2. Platform-Specific Implementation:

Web Implementation:

  • Uses qrcode-stream for real-time scanning
  • Supports both front and back cameras
  • Implements continuous scanning
  • Provides visual feedback for scanning status
  • Handles browser compatibility issues

Native Implementation (Capacitor):

  • Uses @capacitor-mlkit/barcode-scanning
  • Leverages native camera capabilities
  • Provides optimized scanning performance
  • Supports multiple barcode formats
  • Implements native permission handling

3. Scanning Process:

  • Camera stream is initialized
  • Real-time frame analysis begins
  • QR codes are detected and decoded
  • Validation of QR code format
  • Processing of contact information

4. Contact Processing:

  • Decryption of contact data
  • Validation of user information
  • Verification of timestamp
  • Check for duplicate contacts
  • Processing of shared data

5. Error Handling:

  • Invalid QR code format
  • Expired QR codes
  • Duplicate contact attempts
  • Network connectivity issues
  • Permission denials
  • Camera access problems

6. Success Flow:

  • Contact information is extracted
  • User is prompted for confirmation
  • Contact is added to user's list
  • Success notification is displayed
  • Camera resources are cleaned up

Security Measures

QR Code Security:

  • Encryption of contact data
  • Timestamp validation
  • Version checking
  • User verification
  • Rate limiting for scans

Data Protection:

  • Secure transmission of contact data
  • Validation of QR code authenticity
  • Prevention of duplicate scans
  • Protection against malicious codes
  • Secure storage of contact information

User Experience

Scanning Interface:

  • Clear visual feedback
  • Camera preview
  • Scanning status indicators
  • Error messages
  • Success confirmations

Accessibility:

  • Support for different screen sizes
  • Clear instructions
  • Error recovery options
  • Alternative input methods
  • Offline capability

Performance Considerations

Optimization:

  • Efficient camera resource usage
  • Quick QR code detection
  • Minimal processing overhead
  • Battery usage optimization
  • Memory management

Platform-Specific Optimizations:

  • Web: Optimized for browser performance
  • Native: Leverages device capabilities
  • Desktop: Efficient resource usage
  • Mobile: Battery and performance balance

Platform-Specific Considerations

iOS

  • Requires NSCameraUsageDescription in Info.plist
  • Supports both front and back cameras
  • Implements proper permission handling
  • Uses native camera UI through Capacitor
  • Handles photo library access

Android

  • Requires camera permissions in manifest
  • Supports both front and back cameras
  • Handles permission requests through Capacitor
  • Uses native camera UI
  • Manages photo library access

Web

  • Requires HTTPS for camera access
  • Implements fallback mechanisms
  • Handles browser compatibility issues
  • Uses getUserMedia API on desktop
  • Uses file input with capture on mobile
  • Supports multiple input methods

Error Handling

Common Error Scenarios

  1. No camera found
  2. Permission denied
  3. Camera in use by another application
  4. HTTPS required
  5. Browser compatibility issues
  6. Upload failures
  7. Image processing errors

Error Response

  • User-friendly error messages
  • Troubleshooting tips
  • Clear instructions for resolution
  • Platform-specific guidance
  • Graceful fallbacks

Security Considerations

Permission Management

  • Explicit permission requests
  • Permission state tracking
  • Graceful handling of denied permissions
  • Platform-specific permission handling
  • Secure permission storage

Data Handling

  • Secure image processing
  • Proper cleanup of camera resources
  • No persistent storage of camera data
  • Secure server upload
  • Temporary storage management

Best Practices

Camera Access

  1. Always check for camera availability
  2. Request permissions explicitly
  3. Handle all error conditions
  4. Provide clear user feedback
  5. Implement proper cleanup
  6. Use platform-specific optimizations

Performance

  1. Optimize camera resolution
  2. Implement proper resource cleanup
  3. Handle camera switching efficiently
  4. Manage memory usage
  5. Optimize image processing
  6. Handle upload efficiently

User Experience

  1. Clear status indicators
  2. Intuitive camera controls
  3. Helpful error messages
  4. Smooth camera switching
  5. Responsive UI feedback
  6. Platform-appropriate UI

Future Improvements

Planned Enhancements

  1. Implement Electron camera support
  2. Add advanced camera features
  3. Improve error handling
  4. Enhance user feedback
  5. Optimize performance
  6. Add image compression options

Known Issues

  1. Electron camera implementation pending
  2. Some browser compatibility limitations
  3. Platform-specific quirks to address
  4. Mobile browser camera access limitations
  5. Image upload performance on slow connections

Dependencies

Key Packages

  • @capacitor-mlkit/barcode-scanning
  • qrcode-stream
  • vue-picture-cropper
  • @capacitor/camera
  • Platform-specific camera APIs

Testing

Test Scenarios

  1. Permission handling
  2. Camera switching
  3. Error conditions
  4. Platform compatibility
  5. Performance metrics
  6. Upload scenarios
  7. Image processing

Test Environment

  • Multiple browsers
  • iOS and Android devices
  • Desktop platforms
  • Various network conditions
  • Different camera configurations