* Simplify how event content with captions are displayed
The caption component will now be added in `TimelineItemEventContentView` instead of separately in each `TimelineItem__View` component
* Make sure `CoilMediaFetcher` methods to fetch media throw errors
We need to catch them later to check if the content scanner marked some thumbnails or medias as invalid/unsafe in `AsyncImage` instances
* Add a `ContentScannerService` that allows us to manually scan a list of medias in an event and then update and store the results
The results take the form of `ContentValidationValue`, stored in a `ContentValidationState` instance tied to the event
* Create `EventContentValidationCache` to keep the `ContentValidationStates` for events in a room
* Expose `EventContentValidationCache` to Compose using `LocalEventContentValidationState`
Also add a couple of helper functions to avoid having to manually remember the states
* Use the new components to display invalid content in the timeline items
* Add `blurhash` to most media items so we can use it while validating the thumbnails/medias
* Fix custom layout issues with screenshot and UI tests
* Also check the validation state for replied-to events in the composer
* Fix and add tests
* Handle unrecoverable content validation errors too: display a 'not found' UI
* Improve the performance of `EqualWidthColumn` for the single item case
* Update screenshots
---------
Co-authored-by: ElementBot <android@element.io>
- libraries.sessionStorage.api
- projects.libraries.architecture
from `api` to `implementation`.
Modules who need `:libraries:matrix.api` do not necessarily need to use the session storage api.
- Added `MediaSource.safeUrl` property replacing `withCleanUrl` method.
- Made `url` private so it can't be used externally.
- Reverted code in `CoilMediaFetcher`
- Also add tests
We've seen some MXC urls in the wild having some `mxc://foo/bar#auto` fragment suffix, which is invalid, but the URL before that fragment part is valid and can be displayed
* Allow creating a space with `CreateRoomParameters`
* Add 'Create space' menu item in the spaces home screen. Also, imports new strings related to spaces.
* Link the 'Create space' button with the screen to create the space
* Unify room access and visibility for `ConfigureRoom`, use the updated design
* Fix `EditRoomDetails` avatar size (68dp)
* Replace `EditableAvatarView` and `UnsavedAvatar` copmonents with `AvatarPickerView`
* `AvatarDataFetcherFactory`: Make sure we use a fallback image fetcher when the URL is not an MXC one (a local one, i.e.). This removes the previous need for a separate `UnsavedAvatarView`
* Use `AvatarPickerView` in all the screens where `EditableAvatarView` was used
* Improve naming and previews
* Update strings, remove unused ones for `RoomAccessItem`
* Make `isSpace` part of the `CreateRoomConfig`
* Ensure the content fits in the screenshots for `AvatarPickerSizesPreview`
* Add `AvatarDataFetcherFactoryTest`
* Add new feature flag for creating spaces
* Fix ripple being too large for the `Pick` state
* Tweak margins and section titles a bit
* Add preview for `HomeTopBar` with the spaces case
* Update screenshots
---------
Co-authored-by: ElementBot <android@element.io>