Commit Graph

6491 Commits

Author SHA1 Message Date
Benoit Marty 0d3d8c8456 Fix lint issue, ensure that PiP methods are not called on old devices not supporting them. 2026-08-24 12:52:39 +02:00
Benoit Marty 4cde4b40c6 Merge pull request #6676 from bxdxnn/misc/reactions-pinned-messages
Show reactions in the pinned messages list
2026-08-24 09:37:51 +02:00
Benoit Marty 679c6e4786 Merge pull request #7410 from element-hq/feat/global-search-screen
Feature: global search
2026-08-24 09:34:35 +02:00
Benoit Marty a33a84a684 Merge pull request #7500 from element-hq/feature/account-provider-full-mxid
Let users enter their full Matrix user ID on the account provider screen
2026-08-24 08:24:50 +02:00
Benoit Marty 45d9339bfa Merge pull request #7495 from element-hq/refactor/add-client-enterprise-hooks
Add `ClientEnterpriseHook` and `ClientBuilderEnterpriseHook`
2026-08-22 08:10:50 +02:00
Benoit Marty b59afe7561 No need for @SingleIn 2026-08-21 18:11:26 +02:00
Jenna Vassar 2182840a71 Let users enter their full Matrix user ID on the account provider screen 2026-08-21 08:53:23 -07:00
Benoit Marty 27b58705f3 Fix compilation issue. 2026-08-21 17:51:18 +02:00
Jorge Martín c56bb66307 Fix ClientBuilderEnterpriseHook not returning an updated ClientBuilder 2026-08-21 17:32:45 +02:00
Benoit Marty 82d17b67e4 Merge pull request #7435 from hayaksi1/fix/5623-share-unlisted-mime-type
Share a file whose mime type is not one of the supported ones
2026-08-21 16:53:48 +02:00
Benoit Marty eeaf0166f5 Merge pull request #7443 from hayaksi1/fix/4519-hide-verification-fallback
Do not render in-chat key verification requests in the timeline
2026-08-21 16:52:58 +02:00
Jorge Martín b52ed580b1 Add more tests 2026-08-21 16:19:36 +02:00
Jorge Martín e3b72446cc Fix displaying the 'ready to search' state for message search after deleting the query 2026-08-21 16:10:44 +02:00
Benoit Marty 586805bcfb Merge pull request #7463 from hayaksi1/fix/4460-focused-timeline-pagination
Keep a focused timeline focused until the event has been rendered
2026-08-21 16:00:41 +02:00
Benoit Marty 441c88244f Merge pull request #7490 from element-hq/feature/bma/sendingMessageFailedReason
Show dialog with reason when user clicks on a message with a failure
2026-08-21 15:59:01 +02:00
Jorge Martín 0a624c1550 Fix empty state for room search 2026-08-21 15:51:39 +02:00
Benoit Marty 9935f91bc7 Fix wrong binding 2026-08-21 15:42:20 +02:00
Jorge Martín c392737765 Try fixing the empty state for the room list search in global search 2026-08-21 15:16:26 +02:00
Jorge Martín 679d97cf4f Fix konsist issue about presenters not depending in other concrete presenter implementations 2026-08-21 15:15:48 +02:00
Jorge Martín e4891abf45 GlobalSearchPresenter doesn't need @ContributesBinding 2026-08-21 14:36:10 +02:00
Jorge Martín 76b6e5857f Fix lint issues 2026-08-21 13:03:21 +02:00
Jorge Martín b29a4c06d7 Improve previews 2026-08-21 12:43:09 +02:00
Jorge Martín 3a946475f7 Fix search results never displaying an empty state
Use the pagination state to understand when a search finished with no results
2026-08-21 12:37:47 +02:00
Jorge Martín 9a2d23c8a1 Remove unnecessary GlobalSearchPresenter.Factory 2026-08-21 12:07:38 +02:00
Benoit Marty 1186ad6f6e Merge pull request #7497 from bxdxnn/misc/allow-empty-desc
Allow empty problem description if the GitHub issue number is present for rageshakes
2026-08-21 12:06:23 +02:00
Jorge Martin Espinosa 614619e306 Make PIP react to camera orientation changes in the other participant's device (#6951)
* Make PIP react to camera orientation changes in the other participant's device

Adds a `controls.onPipMediaOrientationUpdate` callback for the WebView that will trigger a new `pipParamsBuilder.setAspectRatioFromOrientation(orientation)` method

* Fix warning about `PictureInPictureParams.Builder.setAspectRatio` only being available on API 26+
2026-08-21 09:47:49 +00:00
bxdxnn 7a3074af20 Allow empty description if GitHub issue is not empty 2026-08-21 08:46:11 +00:00
Benoit Marty a59997336d Suppress Large Class warning on test. 2026-08-21 10:17:45 +02:00
Benoit Marty 2b3aeee1c6 Merge pull request #7494 from element-hq/feature/bma/loginWording
Move strings to the login module
2026-08-21 10:06:21 +02:00
Jorge Martín 4b32816b32 Add ClientEnterpriseHook and ClientBuilderEnterpriseHook
These allow us to not expose the enterprise internal when setting up custom configs for both `ClientBuilder` and `Client`
2026-08-21 10:05:00 +02:00
Benoit Marty eb37c7bd55 Update test with Claude 2026-08-21 09:54:48 +02:00
Benoit Marty 25989135a8 Add error content to Localazy 2026-08-21 09:54:47 +02:00
Benoit Marty 3f2a1d95fc Fix issues and add missing text. 2026-08-20 19:44:05 +02:00
Benoit Marty 27d3f3dabc Add preview for the new dialog 2026-08-20 19:06:07 +02:00
Benoit Marty c10e84923b Let user see an error dialog in the case a message fails to be sent.
Closes #7470
2026-08-20 19:02:02 +02:00
Benoit Marty be124610f0 Reuse the existing FakeOAuthActionFlow in RootFlowNodeTest
RootFlowNodeTest was declaring its own no-op fake, while the oauth test
module already provides one. Use it, and move it out of the customtab
package, since it is not specific to the custom tabs.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-20 15:28:22 +02:00
Benoit Marty 5bdaea3f6e Move FakeAccountProviderAccessControl to the login test module
The fake was declared in RootFlowNodeTest, so other tests could not use
it. Move it next to the API it fakes, in a package mirroring the one of
the API, and let the result be provided by the caller, so that the case
where the account provider is not allowed can be tested too.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-20 15:20:57 +02:00
Benoit Marty 67500edafa Move FakeCacheService to the preferences test module
The fake was declared in RootFlowNodeTest, so other tests could not use
it. Move it next to the API it fakes, and let the cleared cache event
flow be provided by the caller, so that a test can emit events.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-20 15:17:18 +02:00
Benoit Marty f0e575e25e Move the fake entry points of RootFlowNodeTest to the test modules
The fakes were declared in RootFlowNodeTest, so other tests could not use
them. Move each of them next to the API it fakes, following the existing
convention of a createNodeResult lambda defaulting to lambdaError():

- FakeLoginEntryPoint in features/login/test
- FakeBugReportEntryPoint in features/rageshake/test
- FakeSignedOutEntryPoint in features/signedout/test (new module)
- FakeAccountSelectEntryPoint in libraries/accountselect/test (new module)

The login and rageshake test modules did not have Appyx on their
classpath, so add the architecture module to their dependencies.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-20 15:11:00 +02:00
Jorge Martín 8bdce7cfd6 Add tests 2026-08-20 14:18:06 +02:00
Jorge Martín 3ca5081f33 Integrate the new screen with the existing home screen, display it only when the search feature flag is enabled 2026-08-20 13:56:29 +02:00
Jorge Martín be2909bca2 Add a global search screen, which reads from both the RoomListSearchDataSource for the rooms search and MessageSearchService for the message search
Note the designs and texts of this screen are temporary.
2026-08-20 13:55:45 +02:00
Jorge Martin Espinosa f2883ef9df Fix flaky test in DefaultVoiceMessageComposerPresenterTest (#7487) 2026-08-20 11:49:59 +02:00
hayyaksi 2525019ca1 Show the right image when opening one that has not finished sending (#7359)
* Show the right image when opening one that has not finished sending

* Reuse the timeline media gallery for events that have no event id
2026-08-20 11:16:13 +02:00
hayyaksi 918015b8bb Stop waiting for a room alias that the remote server never resolves (#7446)
Tapping a room alias whose server is down left the resolver screen on a
spinner for as long as the screen stayed open, with no way forward other
than going back.

Bound the resolution with the ten second timeout already used when
joining a room by address, so the retry dialog is shown instead. The fake
client's resolve lambda becomes suspending so a server that never answers
can be simulated.
2026-08-20 09:34:15 +02:00
Benoit Marty 42f9e15641 Move strings to the login module 2026-08-19 17:18:16 +02:00
Benoit Marty 1c94e89ee8 Merge pull request #7394 from element-hq/feature/account-provider-selection
Simplify choosing the account provider during sign in, with autocomplete of previously used ones
2026-08-19 17:06:47 +02:00
hayyaksi 7341feeed8 Model the fake voice recorder on a cancellable recording job (#7466)
* Model the fake voice recorder on a cancellable recording job

FakeVoiceRecorder pushed a whole recording synchronously from a single
suspending call, which made it both weaker and stricter than
DefaultVoiceRecorder.

Every level emission carried the same elapsed time and the emissions were
coalesced by Molecule, so no intermediate recording state was observable and
the level-limit test had to skip half the emissions to compensate. Each level
now advances the test time source and suspends for its share of the recording
duration, so the states arrive one at a time and that magic number is gone.

Call verification moved to the constructor lambdas the rest of the repo uses,
in place of hand-rolled counters and assertCalls. The counters discarded the
argument, so nothing pinned that cancelling a recording stops it with
cancelled = true; that is now asserted. Truth is no longer needed by the
fixture module.

A second startRecord() no longer raises an error where production only warns
and returns, and stopping or deleting terminates an in-flight emission loop
the way cancelling the real recording job does, so a stale recording state can
no longer arrive after the recording has finished.

* Keep each recording's level loop to its own recording

The level loop checked a single isRecording flag, which cannot tell "this
recording was cancelled" from "a later recording has started". After a cancel
followed by a new start, the first loop resumed, saw the flag set again, and
advanced the shared test time source, so the new recording reported the elapsed
time of both. Each recording now carries an id and its loop stops as soon as
that id is no longer the active one.
2026-08-19 13:44:11 +02:00
hayyaksi 6bd841d838 Close the invite screen once the invite has been declined (#7440)
Declining an invite from the full screen invite left the user on that
same screen, so they had to press back themselves to get to the room
list. Both decline paths are affected: the plain decline handled by
AcceptDeclineInviteView, and the decline and block sub screen, which
navigated up into the join room flow instead of out of it.

Navigate up from the join room flow on a successful decline, and give
DeclineInviteAndBlockEntryPoint a callback so the sub screen can report
a successful decline separately from a back press. The room list flow
supplies the same callback, popping the sub screen once the invite has
been declined.
2026-08-19 12:52:11 +02:00
hayyaksi ee1348e19e Give the room name in the timeline top bar a 48dp tap target (#7450)
* Give the room name in the timeline top bar a 48dp tap target

The row carrying the room avatar and name is the control that opens the
room details, but it is only as tall as its content, which is under the
48dp minimum recommended for a touch target. Constrain it to a minimum
height of 48dp. The children stay centred inside the app bar, so nothing
moves visually.

* Update screenshots

The accessibility snapshot of the timeline is the only one the change
affects: the node which opens the room details now reports a 48dp tall
bounding box. The room name, the avatar and the icons stay where they
were.
2026-08-19 12:29:24 +02:00