* Fixes#2808 - Switch the message sending failure options from a dialog to an alert
- this prevents it from showing up as a popup on the room list on an iPad
- it used to be set on the timeline and not on the timeline item because of our use of a UITableView
* Cleanup room screen action names
* Fix unbalanced padding.
* Animate the scroll to an event when it is already loaded.
* Perform the timeline clearance immediately before replacing the items.
Hides the empty timeline that was briefly shown.
* Make switching timeline more resilient.
* Revert back to creating a new flow when re-selecting the same room.
Fix the composer bug by adding IDs to the all of the module AnyViews.
* Don't show the live timeline when starting with a focussed event.
- stop using multiple background task, the appCoordinator sync one is enough for the whole app
- move the AppMeditor to the MainActor
- expose the WindowManager through the AppMediator
- hide sensitive WindowManager API behind a different protocol
- remove the now unnecessary `BackgroundTaskService`
* Remove the invites button when room list invites are enabled
* element-hq/element-x-ios/issues/2632 - Handle room permalinks based on their membership state and show the according room joining screens:
- modify the room flow coordinator to only take a roomID and be able to decide its own room flows (especially for unjoined rooms)
- add support for the new room preview API
- have RoomDirectorySearch go through the same paths
- combine multiple services to handle app wide requests
- remove direct UIApplication access from everywhere
- fix#2703 by combining UIApplication.applicationState with the WindowManager's main window appearance
- leave the door open for more app control in the future (especiall for the mac)
- with the advent of permalinks the same room can be now pushed multiple times onto the stack which means multiple calls to `subscribeForUpdates`
- the reverse doesn't hold and one call to `unsubscribeFromUpdates` will unsubscribe all the rooms at the same time
- we guard against that by tracking the number of subscriptions and calling the underlying `roomListItem.unsubscribe()` when the count goes back to zero