* Fix unverified account after account creation:
When we create an account either using OIDC or by importing a login and password one, we need to wait until the verification state is known (either verified or unverified).
The problem is the verification service will return incorrect values until the E2EE tasks are initialized in the SDK, even if we add the state listeners after doing so.
So what we can do is initialize the E2EE setup, discard any invalid verification state received while it's not initialized, and take only those received after it's initialized.
* Actually restore the `Client` in `RustMatrixAuthenticationService.importCreatedSession` so we don't need to use `clear` and have the navigation restore the client later:
This standarizes the way the login/registration flow works, always restoring/reusing the existing client instance
* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.12.17
* Fix changes in the SDK:
`LatestEventValue.Local` doesn't have an `isSending` property anymore, now it has `state: LatestEventValueLocalState`. If this is `HAS_BEEN_SENT`, it's equivalent to a `LatestEventValue.Remote`, we just haven't received the updated value from the SDK yet.
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
* Fix crash when calling `Client.predecessorRoom` when the room is destroyed
* Handle the root cause of this crash: destroying the room on activity recreation
* Load `JoinedRoom` in `HomeFlowNode.navigateToRoom`, then pass it to the next navigation nodes
* Add delayed loading indicator for cases when loading the room takes too long
* Avoid an extra FFI call in `RustRoomFactory`.
Use `RoomInfo.membership` instead.
Also use `computation` dispatcher, since it should reduce the delay when switching contexts.
* Remove the dispatcher usage when loading the room in `HomeFlowNode`, we immediately call a method that changes the dispatcher used
* Make sure only a single room is opened at a time
- Add `AnalyticsService.startTransaction(...)` to start a logging transaction that can be uploaded to Sentry if the user enabled the analytics upload.
- Add `AnalyticsTransaction` wrapper to abstract the Sentry ones.
- Added several helper methods to improve the UX around these transactions.
- Then measure:
- Time until the first sync, and how it ended.
- Time until the first rooms are displayed.
- Time to load a room or a preview.
- Time to load a timeline.