Commit Graph

68 Commits

Author SHA1 Message Date
499889d373 Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-03 19:54:19 -06:00
8ad199893a Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-03 17:29:47 -06:00
4537a40cea Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-03 17:27:39 -06:00
ac35666208 Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-03 17:25:43 -06:00
c153b16593 using loal swift paywall
Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
2026-02-03 16:11:12 -06:00
d62cc6e88e Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-03 15:57:01 -06:00
7fff295913 Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-03 15:05:33 -06:00
a94404d93d Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-03 14:51:54 -06:00
3c7f8a39db Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-03 13:16:01 -06:00
658423ee16 Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-03 11:57:39 -06:00
fb9a810262 Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-03 09:12:23 -06:00
ab8ef49ddb Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-03 08:51:24 -06:00
052e4715dc Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-01 18:43:07 -06:00
4979bd629a Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-01 18:36:53 -06:00
dd84ffdfe6 Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-01-12 17:29:40 -06:00
ae7ba030a2 Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-01-12 17:23:11 -06:00
648ef44e4d Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-01-12 17:09:38 -06:00
609ed970c5 Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-01-12 14:51:37 -06:00
09e3e8abc5 k
Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
2026-01-10 15:48:53 -06:00
fa8ef4ca1a Remove unused camera components and refresh translations 2026-01-05 09:38:02 -06:00
1907ce773d Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-01-05 08:30:33 -06:00
d1814500a7 Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-01-04 19:16:33 -06:00
84b565cbb5 Reorganize folder structure with consistent Views/ViewModels/Components pattern
Camera:
- Views/: ContentView, CustomCameraScreen, PhotoReviewView
- Components/: All UI components (buttons, overlays, controls)

Settings:
- Views/: SettingsView, AppLicensesView
- ViewModels/: SettingsViewModel + extensions
- Components/: ColorPresetButton, CustomColorPickerButton

Paywall:
- Views/: ProPaywallView

Shared:
- Theme/: SelfieCamTheme, DesignConstants, BrandingConfig
- Extensions/: Color extensions (moved Color+Extensions here)
2026-01-04 18:39:59 -06:00
60ea419a5b Split SettingsViewModel into logical extensions
- TimerOption.swift - Timer enum moved to Models/
- SettingsViewModel+RingLight.swift - Ring light settings
- SettingsViewModel+Camera.swift - Camera, flash, HDR, timer, quality
- SettingsViewModel+Premium.swift - Debug toggle and premium reset
- SettingsViewModel+CloudSync.swift - iCloud sync conformance
- SettingsViewModel.swift - Core class with display/capture settings
2026-01-04 18:23:12 -06:00
a3d7370f32 Use premiumToggle helper for Center Stage, remove dead premiumSectionHeader code 2026-01-04 18:20:58 -06:00
5cab79f426 Rename LicensesView.swift to AppLicensesView.swift 2026-01-04 18:18:15 -06:00
5275289e67 Simplify AppLicensesView - remove extension pattern 2026-01-04 18:17:48 -06:00
d0e541910b Refactor to use Bedrock's LicensesView with License model 2026-01-04 18:15:20 -06:00
44512e923c Refactor LicensesView to use SettingsCard from Bedrock 2026-01-04 18:12:47 -06:00
845367fa87 Refactor to use Bedrock's iCloudSyncSettingsView and CloudSyncable protocol 2026-01-04 18:11:28 -06:00
db27e50b08 Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-01-04 18:09:10 -06:00
d3dac86de4 Refactor camera/flash/HDR pickers to use SettingsSegmentedPicker 2026-01-04 18:03:52 -06:00
83b03f269f Fix: Only reset timer when disabling debug premium if it was a premium option (5s/10s) 2026-01-04 17:55:19 -06:00
ac3b9459b4 Wrap About section in SettingsCard for consistency 2026-01-04 17:53:53 -06:00
1b92467ec3 Refactor SettingsView to use Bedrock components: SettingsCard, SettingsNavigationRow, SettingsSlider, and titleAccessory 2026-01-04 17:50:28 -06:00
003d933521 Add SelfieCamTheme with branded colors and settings card containers
- Create SelfieCamTheme.swift with rose/magenta-tinted surface colors
- Add AppSurface, AppAccent, AppStatus, AppBorder typealiases to avoid conflicts
- Wrap settings sections in SettingsCard containers for visual grouping
- Add accentColor parameter to all SegmentedPicker and SettingsToggle usages
- Update all color references to use App-prefixed typealiases
- Background uses AppSurface.primary, cards use AppSurface.card
2026-01-04 16:55:12 -06:00
255f3c2d68 Add branded SelfieCamTheme with visual improvements to settings
- Create SelfieCamTheme.swift with rose/magenta-tinted surface colors matching app branding
- Add App-prefixed typealiases (AppSurface, AppAccent, AppStatus, etc.) to avoid Bedrock conflicts
- Add SettingsCard container for visual grouping of related settings
- Update SettingsView with card containers and accent-colored section headers
- Update all settings-related files to use new theme colors
- Pro section uses warning color, Debug section uses error color for visual distinction
2026-01-04 16:54:23 -06:00
66736d39f9 Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-01-04 16:21:41 -06:00
f7c554d018 Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-01-04 16:04:18 -06:00
fe7ab135af Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-01-04 16:03:50 -06:00
5499b10b2a Remove dead code and add free UX features
REMOVED (dead code):
- CaptureMode enum (photo/video/boomerang) - never used
- selectedCaptureMode property
- CaptureControlling protocol file
- CenterStageControlling protocol
- SettingsViewModel CaptureControlling conformance

ADDED (free features):
- Double-tap to flip camera (front/back)
- Tap to focus (already built into MijickCamera)
- Volume button shutter (hardware shutter capture)
- Haptic feedback on capture, countdown ticks, and camera flip

NEW FILES:
- VolumeButtonObserver.swift - observes hardware volume buttons
- HiddenVolumeView - prevents system volume HUD
2026-01-04 15:39:44 -06:00
52eed458f4 Fix grid visibility crash - delay camera settings until initialized
MijickCamera's cameraGridView is nil in onAppear, causing a crash when
setGridVisibility() is called immediately. Added 100ms delay for grid,
HDR, and skin smoothing settings to let MijickCamera fully initialize.
2026-01-04 15:29:27 -06:00
564d2107ea Fix Center Stage crash - set control mode to .app before enabling
AVCaptureDevice.centerStageControlMode must be .app (not .user) before
we can programmatically set isCenterStageEnabled. When mode is .user,
only the user can toggle it via Control Center.
2026-01-04 15:27:11 -06:00
56890cb519 Implement orphaned settings and delete unused files
IMPLEMENTED:
- HDR Mode: Now calls setHDRMode() on camera in onAppear and onChange
- Skin Smoothing: Applies CIGaussianBlur filter when enabled (premium)
- Center Stage: Enables/disables AVCaptureDevice.isCenterStageEnabled
- Zoom Factor Persistence: Saves and restores zoom level across sessions

DELETED:
- GridOverlay.swift: MijickCamera's built-in grid is used
- PostCapturePreviewView.swift: PhotoReviewView is used instead

Also:
- Added CoreImage import for CIFilter usage
- Clamp zoom to saved value on restore
2026-01-04 15:24:13 -06:00
77d9cf9584 Remove unused 'Front Flash' setting from UI
- Setting was defined but never used in camera logic
- Flash Mode and Flash Sync settings handle all flash functionality
- Keep property in SyncedSettings for backwards compatibility with saved data
- Remove from SettingsView, SettingsViewModel, and RingLightConfigurable protocol
2026-01-04 15:16:08 -06:00
b96fc63b7b Fix grid overlay toggle - sync with MijickCamera's built-in grid
- MijickCamera's grid defaults to ON (true)
- Add setGridVisibility() call in onAppear to sync initial state
- Add onChange handler to update grid visibility when setting changes
2026-01-04 15:12:31 -06:00
fee15463d6 Fix: Use MCameraScreen.setCameraPosition() instead of internal cameraManager method
- setCameraPosition is public on MCameraScreen protocol, internal on CameraManager
- Call self.setCameraPosition() instead of cameraManager.setCameraPosition()
2026-01-04 15:10:27 -06:00
1c07009e06 Fix camera position switch using runtime CameraManager.setCameraPosition()
- Add onChange handler in CustomCameraScreen to watch cameraPositionRaw
- Call cameraManager.setCameraPosition() at runtime when setting changes
- Camera now switches without needing to recreate the entire MCamera view
- Keep onDismiss fallback in ContentView as safety net
2026-01-04 15:08:33 -06:00
9c88590926 Add debug logging for camera position switch troubleshooting
- Use raw string comparison instead of CameraPosition enum
- Add debug logs to trace setting changes and sheet dismiss
- Add cameraPositionRaw accessor to SettingsViewModel
2026-01-04 15:05:40 -06:00
55c4d7e05a Fix camera position switch - detect change on settings sheet dismiss
- Track lastCameraPosition to detect changes
- Use sheet onDismiss callback to check if position changed
- Force camera recreation only when position actually changes
- Works around @Observable tracking issues with nested cloudSync data
2026-01-04 15:02:29 -06:00