Remove dependencies flagged as unused by the Dependency Analysis Gradle Plugin
(`./gradlew buildHealth`) and explicitly declared in module build files.
Removals were skipped when the dependency provides transitively something the
module (or a consumer of an `api` dependency) uses directly, as well as for
runtime-only dependencies (element-call-embedded, sentry-android,
rustls-platform-verifier). Dependencies added by the convention plugin helpers
(composeDependencies, testCommonDependencies) are left untouched.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
supportsPictureInPicture and smallestScreenSize have to be declared here, because a library cannot change a host Activity's manifest entry.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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>
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>
At cold start two writers set the root nav target of RootFlowNode: the
intent path (handleIntent -> onLoginLink -> NotLoggedInFlow(params)) and
the first nav state emission (NotLoggedIn -> NotLoggedInFlow(null)).
safeRoot() only dedupes on strict equality, so the two targets do not
cancel each other out and the last writer wins, silently dropping the
login params.
Keep the params coming from the intent as pending state on the node, and
let the nav state observer take them into account, so that the root is
derived from both the logged in state and the pending login params, and
both orderings converge on the same target. The pending params are
cleared when leaving the not logged in flow, so that a later sign out
does not resurrect a stale provisioning link.
Also log when switching to the not logged in flow, since the drop was
silent. The login hint can contain an email address, so only its
presence is logged.
Closes#7482
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 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.
* Use `ShareIntentHandler` early to avoid distributing the whole intent
This would make the intent be serialized as part of `NavTarget` and could potentially lead to `TransactionTooLargeException`s.
We now pass a new `ShareIntentData` class around, containing the minimum amount of data needed. We also have a new `OnSharedData` post-processor to revoke uri access after they've been shared.
* Move `UriToShare` next to `ShareIntentData` and add docs
* Add `AnalyticsTransactions` with a set of `TransactionDefinition` items matching those in the user story
* Use that for `AnalyticsLongRunningTransactions`, make sure we send the right fields (name, operation, description)
* Add `AnalyticsSendMessageWatcher` to track how long it takes for an event to be sent and for us to get a call back for that from sync
* Add `Noop` implementation for enterprise
* Multi account - Do not reset analytics store on sign out.
Else when 1 of many accounts is removed, the analytics opt in screen is displayed again.
* Multi accounts - first implementation.
* Multi accounts - Prevent user from logging twice with the same account
* Multi accounts - ignore automatic GoBack in case of error.
* Multi accounts - update first view when adding an account.
* Rename method storeData to addSession.
* Multi accounts - handle account switch when coming from a notification
* Multi accounts - handle login link when there is already an account.
* Multi accounts - handle click on push history for not current account.
* Multi accounts - improve layout and add preview.
* Add accountselect modules
* Multi accounts - incoming share with account selection
* Multi accounts - check the feature flag before allowing login using login link.
* Multi accounts - swipe on account icon
* Cleanup
* Multi accounts - fix other implementation of SessionStore
* Multi accounts - fix PreferencesRootPresenterTest
* Multi accounts - Add test on AccountSelectPresenter
* Multi accounts - Fix test on HomePresenter - WIP
* Update database to be able to sort accounts by creation date.
* Add unit test on takeCurrentUserWithNeighbors
* Fix test and improve code.
* Add exception
* Multi accounts - handle permalink
* Code quality
* Multi accounts - localization
* Fix issue after rebase on develop
* Fix issue after rebase on develop
* Fix tests
* Fix tests
* Fix tests
* Fix tests
* Update Multi accounts flag details.
* Add missing test on DatabaseSessionStore
* Add missing preview on LoginModeView
* Remove dead code.
* Add missing preview on PushHistoryView
* Document API.
* Rename API and update test.
* Remove MatrixAuthenticationService.loggedInStateFlow()
* Update screenshots
* Remove unused import
* Add exception
* Fix compilation issue after rebase on develop.
* Update screenshots
* Fix test
* Avoid calling getLatestSession() twice
* Rename `matrixUserAndNeighbors` to `currentUserAndNeighbors`
* Extract code to its own class.
* Add comment to clarify the code.
* Init current user profile with what we now have in the database.
It allows having the cached data (user display name and avatar) when starting the application when no network is available.
* Let the RustMatrixClient update the profile in the session database
* Fix test.
* When logging out from Pin code screen, logout from all the sessions.
tom
* Make PushData.clientSecret mandatory.
Also do not restore the last session as a fallback, it can lead to error in a multi account context, or even when a ghost pusher send a Push.
* Change test in RustMatrixAuthenticationServiceTest
* Do not use MatrixAuthenticationService in RootFlowNode, only use SessionStore
* Remove MatrixAuthenticationService.getLatestSessionId()
* Fix compilation issue after merging develop
* Add test on DefaultAccountSelectEntryPoint
* Fix compilation issue after merging develop
* Introduce LoggedInAccountSwitcherNode, to improve animation when switching between accounts.
* Rename Node to follow naming convention.
* Fix navigation issue after login.
* Remove unused import
* Revert "Fix navigation issue after login."
This reverts commit e409630856d7a7e741548016d7afe174ff1b40f7.
* Revert "Rename Node to follow naming convention."
This reverts commit 883b1f37c7207512d9f6605749977ad9045846a1.
* Revert "Introduce LoggedInAccountSwitcherNode, to improve animation when switching between accounts."
This reverts commit 9c698ff8152aceb5fd2b8b5ab5f609d28de64d24.
* Metro now have `@AssistedInject`.
* Update screenshots
* Introduce DelegateTransitionHandler and use it in RootFlowNode
---------
Co-authored-by: ElementBot <android@element.io>
Co-authored-by: ganfra <francoisg@element.io>
* Add support for login link
https://mobile.element.io/element?account_provider=example.org&login_hint=mxid:@alice:example.org
* Update screenshots
* Reduce code duplication
* Add test on OnBoardingPresenter
* Fix tool
* Ignore login parameter if user is not allowed to connect to the provided server.
* Improve tests.
* Cleanup
* Revert change on Project.xml.
* Add documentation
* Improve LoginHelper
* Rename LoginFlow to LoginMode
Move LoginFlow to package io.element.android.features.login.impl.login
Rename some implementation of LoginMode
Rename LoginFlowView to LoginModeView
* Change launchMode of MainActivity from `singleTop` to `singleTask`
Using launchMode singleTask to avoid multiple instances of the Activity when the app is already open. This is important for incoming share and for opening the application from a mobile.element.io link.
Closes#4074
---------
Co-authored-by: ElementBot <android@element.io>
2 replace all actions have been performed:
- "SPDX-License-Identifier: AGPL-3.0-only" to "SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial"
- "Please see LICENSE in the repository root for full details." to "Please see LICENSE files in the repository root for full details."
* Use Anvil KSP instead of the Square KAPT one
* Fix several configuration cache, lint and test issues
* Allow incremental kotlin compilation in the CI
* Workaround Robolectric + Compose issue that caused `AppNotIdleException`
* Update the `enterprise` commit hash
* Update screenshots
---------
Co-authored-by: ElementBot <android@element.io>
* Add `MatrixClient.isSlidingSyncProxySupported` function
* Update localazy strings
* Modify `ErrorDialog` to have an `onSubmit` call, which will be used for the submit action.
Also make the title text optional and dismissing the dialog by tapping outside/going back configurable.
* Check if a forced migration to SSS is needed because the proxy is no longer available.
In that case, display the non-dismissable dialog and force the user to log out after enabling SSS.
* Enable native/simplified sliding sync by default.
* Refactor the login to make sure we:
1. Always try native/simplified sliding sync login first, if available.
2. Then, if it wasn't available or failed with an sliding sync not supported error, try with the proxy instead (either discovered proxy or forced custom one).
* Move logic to `LoggedInPresenter` and the UI to `LoggedInView`
* Update screenshots
---------
Co-authored-by: ElementBot <benoitm+elementbot@element.io>
* Use ComposablePreviewScanner to rework how screenshot testing works
* Add test sharding
* Update screenshots
* Fixes for Element Gallery
---------
Co-authored-by: ElementBot <benoitm+elementbot@element.io>
Co-authored-by: Benoit Marty <benoit@matrix.org>