* Ensure that we have only one single instance of SeenInviteStore per session. Fixes#4558
Fix crash:
java.lang.IllegalStateException: There are multiple DataStores active for the same file: /data/user/0/io.element.android.x/files/datastore/session_0ebb139587b6d940_seen-invites.preferences_pb. You should either maintain your DataStore as a singleton or confirm that there is no two DataStore's active on the same file (by confirming that the scope is cancelled).
* Inject the SeenInvitesStore to reduce boilerplate code.
* Introduce PushHistoryService to store data about the received push
Add a push database.
* Update screenshots
* Improve preview.
* Update screenshots
* Add missing test.
* Add test for PushHistoryView
* Fix configuration issue.
Was: w: /libraries/troubleshoot/impl/src/test/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryPresenterTest.kt:35:27 Cannot access class 'PushProvider' in the expression type. While it may work, this case indicates a configuration mistake and can lead to avoidable compilation errors, so it may be forbidden soon. Check your module classpath for missing or conflicting dependencies.
---------
Co-authored-by: ElementBot <android@element.io>
* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.4.8
* Fix API breaks:
- Add `ReplyParameters` class and parameters to send functions.
- Remove outdated OIDC related values.
- Stop pre-processing the timeline to add the timeline start item, this is already done by the SDK.
* Use the new function to reply to messages in a quick reply from a notification, however:
1. We don't have the thread id value at the moment since the SDK does not provide it yet.
2. The replied to event id wasn't being passed from the notification info.
* Remove also timeline start virtual item for DMs, since this wasn't present before either
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
* Fix the share location URI
Use `ENGLISH` locale to make sure the coordinates are formatted using the right decimal separator.
Also, when no label parameter was added, the URI just centered the map on some coordinates, instead of adding a marker.
* Allow using a hardware keyboard to unlock the app using a pin code
* Add UI tests to `PinKeypad`
* Also take into account the numpad keys.
Extract this to an extension property in `ui-utils`. Made `ui-utils` also a compose-compatible library (vs `android-utils`, which doesn't have compose dependencies).
* Fix bullet points not having leading margin on timeline items
* Remove other usages of `SpannableString` constructor, use either `valueOf` to reuse the existing value or `SpannedString` instead if the spans don't have to change
* Remove condition on displayType as I believe, that it has no effect.
* Remove the green badge on a pending invite after a first preview
* Update screenshots
* Fix test
* Improve DefaultSeenInvitesStore, clear it on logout, and on clear cache. Also create a store per session.
* Remember the returned flow.
---------
Co-authored-by: ElementBot <android@element.io>
* Add Konsist test to ensure that the result of a function returning a flow is remembered.
* Remember flows before they are collected by state.
* Fix compilation issue
* Make isOnline a val.
* Make selectedUsers() a val.
* Make flow() a val.
* Make getUserConsent(), didAskUserConsent() and getAnalyticsId() some val.
* Remove Timeline.paginationStatus() and replace by direct access to the underlined flow.
* Simplify test
* userConsentFlow must be initialized before because it's used in observeUserConsent
* Fix test compilation
* Let TextFieldListItem take the entire width.
* Add unit test to detect usage of OutlinedTextField.
* Use TextField instead of OutlinedTextField
* Remove unnecessary opt in to ExperimentalFoundationApi
* Use TextField instead of OutlinedTextField
* Fix compilation issue.
* Update screenshots
* ListDialog: add space between items.
* Update screenshots
* Set applyPaddingToContents to true by default.
* Update screenshots
---------
Co-authored-by: ElementBot <android@element.io>
* Make sure the live timeline is destroyed before clearing a room's cache
According to the SDK team, having a live timeline could lead to DB issues.
* Try to destroy all room and list item references when the `RustRoomFactory` is destroyed
It may also have some effect on DB corruption issues we've seen
* Add `WakeLock` to dismiss ringing call screen when call is cancelled
We had already some checks in place to automatically cancel a ringing call notification/screen when the call was no longer active, but the `RoomInfo` updates weren't being processed because the app was 'paused'.
The partial wakelock should ensure these room info updates are handled.
* Add mutual exclusion to `ActiveCallManager` methods to improve thread safety
* Extract TextFieldDialog to its own file (no other change).
* Add TextFieldDialogPreview
Enhance TextFieldDialog
* Let RoomMembersModerationView use TextFieldDialog
* Update screenshots
* Konsist.
* Add modifier parameter.
---------
Co-authored-by: ElementBot <android@element.io>
* Add confirmation dialog when kicking someone, ith ability to provide a reason.
Also add the reason for banning people.
* Fix padding issue in dialogs.
* Improve TextField in dialog.
* Update screenshots
* Fix tests
* Format and import
* Add missing UI tests.
* Use `needsConfirmation` as it's already used in the code base.
---------
Co-authored-by: ElementBot <android@element.io>
* Timeline header: ensure that the decoration is clickable, and properly fix the icon rendering.
* Update screenshots
---------
Co-authored-by: ElementBot <android@element.io>
* For the user info in the timeline items, display the ripple effects according to the bounds and shape of the user avatar and display name
* Fix ripple in other screens too
* Add handy extension "VariantDimension.buildConfigFieldStr"
* Update configuration for MapTiler.
* Update configuration for Sentry.
* Build AnalyticsConfig depending on analytics configuration.
* Configure analytics policy url.
* Add handy extension "VariantDimension.buildConfigFieldBoolean"
* Configure legal urls.
* Add a way to disable rageshake / reporting bugs.
* Update screenshots
* Quality
* Fix test
* Use `ifBlank` extension
* Add missing configuration for PostHog
* Update configuration for Rageshake.
* Add build log.
* Disable crash detection if rageshake feature is not available.
Disabled twice.
* Hide link to analytics policy if the link is missing.
* Fix test when run in enterprise context.
* Use RageshakeFeatureAvailability where appropriate.
* Rename file.
* Move some classes to their correct module.
* Update screenshots
---------
Co-authored-by: ElementBot <android@element.io>
* Use embedded version of Element Call: for in-app room calls, the app will use an embedded version of Element Call shipped with the app instead of using an external service.
* Remove `ElementCallBaseUrlProvider` so we don't use the Element well known file to get the base URL anymore
* Remove `ElementCallConfig.DEFAULT_BASE_URL` since it's not used anymore
* Restore the usage of the custom EC base URL in developer settings as the actual base URL, it present
* Add a way to customise the embedded EC analytic credentials
* Update CI to use the EC analytic credentials as secrets
* Improve the custom URL placeholder to include the `/room` suffix
* Warn when opening a suspicious link.
Upgrade RTE to 2.38.3
* Update screenshots
* Add tests on LinkPresenter and LinkView.
* Format file
---------
Co-authored-by: ElementBot <android@element.io>
* Fix 'unverified session' after creating an account: when creating an account, wait until the session is verified before marking the authentication flow as completed.
* Let element enterprise configure the ids for maptiler service.
* Disable location sharing and location viewer is the service is not available.
* Fix compilation issue on connected test
* Do not allow to reload the map if the mapId is not available.
* Update screenshots
* Rename file.
* Better to inject a string provider here, so we can unit test DefaultLocationService.
---------
Co-authored-by: ElementBot <android@element.io>
* Make self verification screens scrollable
* Remove unused fields from `VerificationEmoji`
* Make only the header and content scroll in `HeaderFooterPage`.
* Use the right 'emoji' icon in both flows (`ReactionSolid`)
---------
Co-authored-by: ElementBot <android@element.io>
Breaking changes addressed:
* Make `MatrixClient.getNotificationSettings()` async, cache its result.
* Use `RoomInfo` for accessing the updated room's info.
* Refactor `MatrixRoom` so it always receives an initial `MatrixRoomInfo` value: this value will be used to make `MatrixRoom.roomInfoFlow` a `StateFlow` so we can assume the initial updated Room data will be present.
* Fetch encryption state when loading a room if it's unknown