490 Commits

Author SHA1 Message Date
Stefan Ceriu 677ed367e1 Switch all state machine route mappints from matching (event, fromState) to (fromState, event) 2023-11-29 18:31:29 +02:00
Stefan Ceriu e4788e615f Fixes #2179 - Open direct chat directly from the room member details screen 2023-11-29 18:31:29 +02:00
Stefan Ceriu 742a924037 Move presentation and coordination logic from the RoomDetailsScreenCoordinator and into the RoomFlowCoordinator 2023-11-29 18:31:29 +02:00
Alfonso Grillo e7494164b2 Add TimelineProxy (update sdk to 0.0.7-november23) (#2178)
* Refactor RoomProxy

* Refactor paginateBackwards

* Refactor sendReadReceipt

* Refactor messageEventContent APIs

* Refactor sendMessage

* Refactor toggleReaction

* Refactor send attachments

* Refactor sendLocation

* Refactor cancel/retry send

* ⚠️ Fix encryption build errors

* Refactor editMessage

* Refactor retryDecryption

* Refactor fetchDetails

* Refactor polls APIs

* Refactor fetchMembers

* Refactor RoomTimelineProviderProtocol

* Update sdk to 0.0.7-november23

* Fix UTs

* Fix comment

* Delete old workaround

* Move TimelineProxyError

* Delete queue warnings

* Fix key listener

* Add pollHistory timeline property

* Refactor room/timeline subscriptions

* Delete unused code
2023-11-28 19:01:35 +00:00
Doug 45e4cbccee App Lock: Don't rely on the app becoming active at startup. (#2175) 2023-11-27 16:52:33 +00:00
Stefan Ceriu 4447829618 vector-im/element-meta/issues/2206 - Fix room avatars not showing up on the message forwarding screen 2023-11-24 18:13:36 +02:00
Doug 9a52dcf9ac Add a state machine to AppLockFlowCoordinator. (#2166)
Fixes a bug when cancelling Face ID would loop back round to presenting Face ID.
2023-11-24 16:03:38 +00:00
Stefan Ceriu 59eb253980 vector-im/element-meta/issues/2213 - Automatically pop the invites list when acting on the last one. Coming back from the room will go directly back to the room list 2023-11-24 15:56:53 +02:00
Mauro 33d36826a2 Fixing a crash that happened when leaving the room through the details screen (#2160) 2023-11-23 17:24:37 +00:00
Alfonso Grillo e583f52c65 Edit poll UX (#2151)
* Add edit poll on room proxy

* Add CreatePollMode

* Add “edit poll” presentation flow

* Add delete poll section

* Inject editing poll

* Add submit action

* Refactor validation logic

* Add edit/delete actions

* Fix bubble timestamp for polls

* Update localisations

* Refactor CreatePoll -> PollForm

* Refactor tests

* Update rust sdk to 0.0.5-november23

* Update confirmation alerts

* Add edit support in TimelineItem menu

* Refactor a11y id

* Cleanup

* Fix failing tests

* Add tests

* Refine isEditable workaround

* Refactor timestamp in TimelineItemBubbledStylerView
2023-11-23 11:19:15 +00:00
Doug 4d011b9116 Fix a bug where the Screen lock placeholder could be slow. (#2155)
* Only use the Task for the delayed window changes.
The timing was off with the Task when locking the device with the app open.

* Check the application state before unlocking the app.
On top of a), the app will reveal itself if you background during the success animation, b) the flow is run farrrr too many times, so the app is revealing itself way before the Face ID scan UI is complete - definitely need a state machine here.
2023-11-22 18:58:14 +00:00
Mauro a21bc2cdd3 Handle Room Routing using the membership state (#2154) 2023-11-22 17:37:26 +00:00
Doug 0b9da83470 Show the lock screen placeholder on willResignActive. (#2086) 2023-11-15 15:31:35 +00:00
Doug b5cc2cbf61 Fix a regression where the forced logout indicator was presented on the hidden overlay window. (#2063) 2023-11-10 17:21:02 +00:00
Doug 37d88e622c Add UI tests for AppLockFlowCoordinator. (#2055)
* Add UITests for the App Lock flow.

* Add Notification Signal

Fix unwanted imports in UITests.
2023-11-10 15:38:54 +00:00
Stefan Ceriu 4b26a798dc Have the UserIndicatorController use a separate window, switch to using one single instance throughout the application 2023-11-09 16:18:11 +02:00
Stefan Ceriu abe2080ee2 Extract room screen action handling into separate component (#2045)
* Extract room screen action handling into separate component

* Fix tracing configuration unit tests

* Move the custom reactionsCollapsedBinding to the TimelineReactionsView

* Move voice message playback handling from the timelineController to the room view model

* Reorder methods

* Remove the need for a media player provider in the timeline controller

* Move room attachments opening to the view model, remove the need for a media provider in the timeline controller

* Rename RoomScreenActionsHandler -> RoomScreenInteractionHandler

* Move message sending retry and cancellation to the timeline controller.

* Move audio playback, attachment loading and  user tapping handling into the InteractionHandler

* Fix unit tests

* Switch back swiftlint file_length rule error to 1000 lines
2023-11-08 18:31:39 +02:00
Stefan Ceriu 5dcb24add7 Expose Element Call settings in the developer options. Start using th… (#2039)
* Expose Element Call settings in the developer options. Start using the encryption widget parameter.

* Remove the Element Call feature flag
2023-11-07 16:12:03 +02:00
Stefan Ceriu 5823af6a91 Secure backup fixes (#2037)
* Fix logout alert title and message

* Disable auto correction and capitalization on the recovery confirmation screen

* Allow scrolling in the key verification screen for when the key needs to be confirmed and the keyboard is up.

* Address PR comments
2023-11-07 09:23:15 +02:00
Doug b2f30974e3 Add missing gradient to lock screen placeholder. (#1991) 2023-10-31 13:25:18 +00:00
Doug e9cdc7649d Enforce mandatory app lock outside of the authentication flow. (#1982) 2023-10-30 15:52:25 +00:00
Doug 8f010538ed Fix presentation when not enrolled in Touch/Face ID. (#1981) 2023-10-30 15:02:48 +00:00
Stefan Ceriu a837ce5cff Key backup Rust API adoption (#1952)
* Adopt Rust side secure backup APIs (incomplete, based on poljar/backup-pr)

* Implement the home screen recovery key confirmation banner.

* Update with the latest Rust changes.

The loading button for .unknown was incorrect. It should be treated as disabled.

---------

Co-authored-by: Doug <douglase@element.io>
2023-10-27 20:16:51 +01:00
Mauro 0b31446817 Resizable Composer With Completion Suggestion View (#1971)
* resizable composer with suggestions view

* FF cleanup

* removing the view when the vertical size is compact

* merge conflict fix

* done

* solving a conflict

* Update ElementX/Sources/Screens/ComposerToolbar/View/CompletionSuggestionView.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* pr suggestion

---------

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>
2023-10-27 13:54:30 +00:00
Doug 84a16091b2 Handle invalid PIN input in the settings flow. (#1972) 2023-10-27 14:08:06 +01:00
Doug 11563c6297 Add support for Face ID/Touch ID to app lock. (#1966)
* Fix biometrics with low grace period and backgrounding before unlocked.

* Trigger permissions alert when enabling Face ID.
2023-10-27 09:09:12 +00:00
Doug c6e4dc2a37 Initial implementation for AppLockSetupFlowCoordinator. (#1949)
Rename AppLockSettingsScreen to AppLockSetupSettingsScreen.
Implement forced logout and persist PIN entry attempts.
2023-10-25 11:03:37 +00:00
Stefan Ceriu 37f1a79a11 Key backup returns (#1951)
* Converge on UserSessionFlowCoordinator logout confirmation

* Add logout confirmation screen strings to untranslated.

* Fix chat backup learn more URl fragment.

* Implement logout flows that check recovery and key backup for the last session

* Move logout confirmation screen strings to localazy

* Change encrypted timeline item copy to "Waiting for decryption key"

* Use different encrypted history banner based on key backup states

* Introduce a SettingsFlowCoordinator and implement navigation directly to the secure backup screen from the logout flows.

* Fix **mocked** secure backup controller flows

* Simplify encrypted history banner logic

* Address PR comments
2023-10-24 18:38:41 +03:00
Nicolas Mauri 2f57fbc77d Allow to record a voice message (#1926) 2023-10-23 15:47:36 +00:00
Doug ceee6b1853 Implement AppLockScreen as per the designs. (#1925)
Fix a bug in the unlock flow
2023-10-20 17:35:57 +01:00
Stefan Ceriu c8b9d95122 #1899, #1900, #1901 - Implement chat backup setting screens 2023-10-19 15:34:10 +03:00
Doug ebd9f4c916 Add App Lock settings screen (#1917) 2023-10-19 12:26:34 +01:00
Doug 99c28784a9 Initial service implementation for using a PIN code. (#1912)
* Initial service implementation for using a PIN code.

* Tweak Danger for commit size

600-800 lines is perfectly normal for our PRs, up it to 1000.
2023-10-19 10:42:12 +01:00
Stefan Ceriu 6e8dff2ef6 Implement support for ElementCall through Rust side widgets (#1906)
* Implement support for ElementCall through Rust side widgets

* Add Element Call feature flag

* Fix the unit tests

* Address PR comments
2023-10-17 12:41:56 +03:00
Nicolas Mauri 2f0b5a42f5 Prevent multiple conversion of the same voice message audio file. (#1887) 2023-10-13 09:48:11 +00:00
Doug b6470c9651 Initial setup ready for PIN/Biometric app lock. (#1876)
* Add AppLockCoordinator and WindowManager.
2023-10-11 12:59:47 +00:00
Mauro f7bf4b6e20 Mention in RTE (but without the pill yet) (#1863)
* suggestions in RTE, but they do not render as pills yet.

* remove unused code

* Update ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* PR suggestions

---------

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>
2023-10-09 12:26:53 +00:00
Stefan Ceriu 1f12a7cb2f Fixes 1864 - Message forwarding room list filtering and pagination problems (#1867)
* Fixes 1864 - Message forwarding room list filtering and pagination problems

* Fix SwiftFormat redundant closures body error

* Prevent crashes when writing to the localization bundle cache from different threads

* Fix unit tests

* Fix unit tests

* Address PR comments
2023-10-09 14:59:31 +03:00
Mauro 8270a868a7 Completion Suggestion view for user mentions (#1859)
* created the list but I need to find a way to overlay it

* make the list able to have an intrinsic height

* best solution so far but does not work with expansion

* needs testing

* more scalable solution

* tests completed

* changelog

* injecting the media provider

* fix tests

* pr suggestions

* better testing
2023-10-06 15:47:31 +02:00
Nicolas Mauri 82abd0aaf3 Add voice message playback from the timeline (#1844) 2023-10-04 16:32:45 +00:00
Mauro 355535cd75 Handle tap on user mentions (#1850)
* user mention routing implemented

* more tests

* better naming

* fixed a test
2023-10-03 10:11:05 +02:00
Mauro 7bde419e85 Pill View (#1797)
* provider can now check the current session

* More testable code

* created the test condition

* it works but not always not sure why, need to dig deeper

* sadly we need to use textkit 1 to solve this issue

* removed developer option screen test

* this experimental solution kinda works but I need a way to pill recomputation is weird

* format

* display improvement

* better and faster solution

* pilished the code

* better coloring

* swift format

* just need to solve the caching issue

* fix caching issue

* tests done!

* changelog

* pr comments addressed

* all pr comments addressed

* docs

* line lenght

* updated tests and fixed a parsing permalink issue

* MentionBuilder

* pr comments

* swiftformat

* code blocks should not have links

* Update ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* Update ElementX/Sources/Services/Client/ClientProxy.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* Update UnitTests/Sources/AttributedStringBuilderTests.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* Update ElementX/Sources/UITests/UITestsAppCoordinator.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* Update ElementX/Sources/Other/Pills/PillAttachmentViewProvider.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* Update ElementX/Sources/Other/Pills/MentionBuilder.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* pr comments

* swiftformat

---------

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>
2023-09-27 17:27:07 +00:00
Nicolas Mauri b8e5611c00 Add voice message rendering to the timeline (#1776) 2023-09-21 14:36:21 +00:00
Stefan Ceriu a4e5e4f0ed Switch callbacks to combine (#1710)
* #750 - Convert the SoftLogoutScreen to combine

* #750 - Convert the UserSessionFlowCoordinator to Combine

* #750 - Convert the AnalyticsPromptScreen to Combine

* #750 - Convert the LoginScreen to Combine

* #750 - Convert the ServerSelectionScreen to Combine

* #750 - Convert the EmojiPickerScreen to Combine

* #750 - Convert the HomeScreen to Combine

* #750 - Convert the MediaUploadPreviewScreen to Combine

* #750 - Convert the OnboardingScreen to Combine

* Rename `Onboarding` to `OnboardingScreen`

* #750 - Convert the ReportContentScreen to Combine

* #750 - Convert the RoomDetailsSscreen to Combine

* #750 - Convert the RoomMemberDetailsScreen to Combine

* #750 - Convert the RoomMembersListScreen to Combine

* #750 - Convert the SessionVerificationScreen to Combine

* #750 - Convert the SettingsScreen to Combine

* #750 - Convert the AdvancedSettingsScreen to Combine

* #750 - Convert the DeveloperOptionsScreen to Combine

* Fix the unit tests

* Use .sink action and the same cancellables constructor everywhere

* Cleanup cancellables when setting up tests
2023-09-14 12:53:33 +03:00
Alfonso Grillo f3618cda9d Add polls analytics (#1691)
* Refactor location events

* Add poll analytics
2023-09-13 09:28:44 +02:00
Stefan Ceriu ee4040141d Top level deeplink handling (#1660)
* Handle link opening on the top most levels and prepare for percolating them throughout the app
* Add support for a custom app scheme
* Add specific AppRoute parsers.
* Integrate custom scheme in the AppRouteURLParser
* Switch to `element://call` and cleanup route parsing
2023-09-11 12:31:31 +03:00
Doug 1eac02f7b0 Stop the sync service constantly attempting to restart on auth error. (#1654)
Additionally removes a retain cycle that was preventing the client from being released.

Remove restartSync - the SDK has changed a lot, we no longer need to stop and start the sync loop.
2023-09-08 11:00:12 +01:00
Stefan Ceriu 62b6cd598f Generic element call link support (#1643)
* Remove swift-url-routing and replace it with a custom implementation. It fails parsing the fragments in app.element.io links and it doesn't bring any value
* Add handling for opening generic element call links
* Add applinks support for call.element.io
* Enable VoIP and Audio playback background modes
2023-09-07 12:06:18 +03:00
Stefan Ceriu 61326ed63a Be more lenient with fatalErrors coming out of equal transitions, caused by asynchronicity on the UI layer 2023-09-01 14:59:16 +03:00
Nicolas Mauri 3ab7b1b1c7 Display the notification mode for each room in the the room list (#1595)
Co-authored-by: Stefan Ceriu <stefan.ceriu@gmail.com>
2023-08-31 11:15:38 +00:00