* create DependenciesProtocol and replace ServiceLocator registration with it
replace mocking calls for ServiceLocator to Dependencies
replace ServiceLocator with instance level calls
replace ServiceLocator configs with TestDependencies config in Tests
replace servicelocator usage in analytics service
replace remaining ServiceLocator calls in unit tests
that depended on the UnitTestAppCoordinator configuration with per suite dependencies instances
fix swiftlint warning
remove remaining references to ServiceLocator
make dependencies properties consistent in tests
delete Dependencies and DependenciesProtocol
fix whitespace modifications
updates from PR feedback
a pass over converting AppSettings and AnalyticsService test instance properties to per test instantiation
fix a missed PR feedback
Sync up after rebase
create DependenciesProtocol and replace ServiceLocator registration with it
replace mocking calls for ServiceLocator to Dependencies
replace ServiceLocator with instance level calls
replace ServiceLocator configs with TestDependencies config in Tests
replace servicelocator usage in analytics service
replace remaining ServiceLocator calls in unit tests
that depended on the UnitTestAppCoordinator configuration with per suite dependencies instances
fix swiftlint warning
remove remaining references to ServiceLocator
make dependencies properties consistent in tests
delete Dependencies and DependenciesProtocol
* AppSettings is instance level mockable now
* replace mocked and preview usages of reset + AppSettings global init with
AppSettings(store: UserDefaultsMock())
* AppSettings.UserDefaultsKeys is now a RawRep struct, making it extensible
* update tests with new AppSettings so it builds
* update remaining AppSettings test/mock inits
* AppSettings.UserDefaultsKey conformed to ExpressibleByStringLiteral
* addressed issues found in first pass ai review
* update AppSettings instantiations after rebase
* fix accessibility tests coordinator after rebase
* Rename to VolatileUserDefaults
* AppSettings init uses mandatory parameter
* Revert UserDefaultsKey to enum
* Add TrackedUserDefaults to be able to reset the defaults object
* Added volatile static func to AppSettings
* Use .volatile() static func instead of full init
* review fixups
* Resolve build issues after rebase
* updated enterprise module
* remove the static reset settings call from the preview tests
---------
Co-authored-by: Mauro Romito <mauro.romito@element.io>
* swift 6 support for NSE and concurrency safe implementations for it
* enforcing required Sendable conformance for swift 6 migration in NSE
* use Mutex to access the string builder cache
* use an async stream to update timeline items diffs
* fix for Sendable appHooks
* added foundation for custom notifications
* feat: add localizations for tone names
also, if available, include the pro sound in the element x sound list
* use a static file location to store the notification tone
and update the file at that location when selected
* if there's a problem previewing or setting the alert tone, toast the user with the error
* rename tone directory
* create NotificationToneManager to handle tone business logic
* conform to project formatting
* assign custom sound to actual notifications
* dry up notification generation in the nse
* add compilation condition for including notification alert tone and remove from share extension
* swift format had some opinions
* flatten the notification tone ui, removing system/elementx designations
* fix stored file url breaking due to sandbox path changes
* tone manager can import custom tones and provide a list of imported tones
* ui support for custom tones
* can delete custom imported tones
* sort the custom tones
* add additional preset sounds
* can choose caf files for custom sounds and fix location persistence issues
* store sound locations with relative links
this is a better solution than storing bookmarks since bookmark resolution can be variable and differ from freshly derived urls
* add docs for new notification features
* run tone conversion in background
* resolved several ai found issues
* added protocol and mocks for notification tone manager
* added tests for notification settings screen vm interactions with the tone manager
* add tests for notification tone manager
* rename element tone names per feedback
* move custom tone option to the top of the notification tone list
* rename Tone to Sound for consistency with Android
* remove additional bundled tones
* restore accidentally deleted Element Default sound file
* system alert tones are filtered by what's available on the system prior to finalizing the collection
* Add a couple more caf file conversion log statements
* Simplify the notification sound conversion logic
* Update notification sound strings in sync with Android
* update xcodeproj after rebase
* remove conditional compilation and include NotificationAlertSound in share extension
* Use AudioPlayer instead of custom tone previewer and remove the previewer
* rename NotificationTone
* Consolidate and move errors to top of NotificationToneManager
* tone manager no longer depends on userinterfacecontroller
* Move static Tone properties to NotificationToneManager
* resolve view model initializer feedback
* update xcodeproj
* fatalerror when tone manager cannot init
* Remove banner icon on alert tone error
* fixup review feedback
* Moved URL handling to NotificationToneManager
* Enable key-share-on-invite irrespective of feature flag
* Remove feature-flag dep: warning on starting chat with new people
* Remove feature-flag dep: invite from room member details
* Remove feature-flag dep: warning on new users in invite screen
* Remove feature-flag dep: from room details screen
* Remove feature-flag dep: starting chat from user profile screen
* Remove feature-flag dep: timeline info on forwarded keys
* Remove feature-flag dep: RoomScreenModel
* Remove `enableKeyShareOnInvite` from AppSettings
* Remove `enableKeyShareOnInvite` feature flag
* Remove outdated comments
* Update preview test room snapshots as their header now includes the history sharing icon
* Add an initial implementation of the receivedWhileOfflineNotification.
* Only deliver a single receivedWhileOffline notification per boot and clarify the API.
* Add a 15-minute threshold for the receiveWhileOfflineNotification.
Bump the RustSDK to v26.02.03
Fix breaking changes and add support for the new background task error reporting delegate and the new room invite latest event.
* Debugging with Notifications.
* Don't run the NSE until the device is unlocked.
* Let the NSE run long enough to deliver the default notification content.
Turns out that exit(0) results in the notification be discarded when you have the notification filtering entitlement.
* Remove debugging notifications.
---------
Co-authored-by: Stefan Ceriu <stefanc@matrix.org>
* Listen to call decline to stop ringing when declined from other device
* MSC4075 Use expirationTS to define the call ringing window
* Implement ElementCallService tests.
* Update acknowledgements.
* implemented grouping
* implemented presenting the thread
* improved the implementation by reusing the presentation action
* add Thread group to DMs to differentiate from non threaded messages of the same DM
* name for a threaded notification in group room
* focus event when tapping on a notification
* pr suggestions
* document
* Use the SDK's offline state to drive the offline indicator.
* Only use network reachability for restarting the sync loop, use the homeserver reachability for requests.
* Add a separate indicator to distinguish when the server is unreachable but the device is online.
* Remove the huge conditional compilation block on AppSettings.
It is still required for the ElementCallBaseURL however.
* Add a feature flag for spaces.
* Move the rageshakeURL configuration from the BugReportService to AppSettings.
* Refactor Target to return a handle when configuring.
This helps with reconfiguration and removes the @MainActor constraint.