From bcda5e3acd5224820eade6b60bfc23e716b7b3b9 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 12 Jan 2023 17:25:54 +0100 Subject: [PATCH 01/25] Ignore tmp folder. --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index f6e1ef5b8b..01fece71fb 100644 --- a/.gitignore +++ b/.gitignore @@ -83,3 +83,5 @@ lint/outputs/ lint/tmp/ # lint/reports/ /.idea/deploymentTargetDropDown.xml + +/tmp From 1333ab6643d12768426ee4d071c7e851400675f3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 12 Jan 2023 17:36:42 +0100 Subject: [PATCH 02/25] Setup Maestro and add first tests. Also configure CI --- .github/workflows/maestro.yml | 35 ++++++++++++++ .maestro/README.md | 48 +++++++++++++++++++ .maestro/allTests.yaml | 7 +++ .maestro/tests/account/changeServer.yaml | 5 ++ .maestro/tests/account/login.yaml | 13 +++++ .maestro/tests/account/logout.yaml | 9 ++++ .../tests/assertions/assertHomeDisplayed.yaml | 5 ++ .../tests/assertions/assertInitDisplayed.yaml | 5 ++ .../assertions/assertLoginDisplayed.yaml | 5 ++ .maestro/tests/init.yaml | 7 +++ .maestro/tests/roomList/roomList.yaml | 6 +++ .maestro/tests/roomList/searchRoomList.yaml | 15 ++++++ .../tests/roomList/timeline/timeline.yaml | 14 ++++++ .maestro/tests/settings/settings.yaml | 12 +++++ .../android/x/component/ShowkaseButton.kt | 2 +- 15 files changed, 187 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/maestro.yml create mode 100644 .maestro/README.md create mode 100644 .maestro/allTests.yaml create mode 100644 .maestro/tests/account/changeServer.yaml create mode 100644 .maestro/tests/account/login.yaml create mode 100644 .maestro/tests/account/logout.yaml create mode 100644 .maestro/tests/assertions/assertHomeDisplayed.yaml create mode 100644 .maestro/tests/assertions/assertInitDisplayed.yaml create mode 100644 .maestro/tests/assertions/assertLoginDisplayed.yaml create mode 100644 .maestro/tests/init.yaml create mode 100644 .maestro/tests/roomList/roomList.yaml create mode 100644 .maestro/tests/roomList/searchRoomList.yaml create mode 100644 .maestro/tests/roomList/timeline/timeline.yaml create mode 100644 .maestro/tests/settings/settings.yaml diff --git a/.github/workflows/maestro.yml b/.github/workflows/maestro.yml new file mode 100644 index 0000000000..da7d35a080 --- /dev/null +++ b/.github/workflows/maestro.yml @@ -0,0 +1,35 @@ +name: Meastro + +on: + pull_request: { } + push: + branches: [ main, develop ] + +# Enrich gradle.properties for CI/CD +env: + GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false + CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon + +jobs: + maestro-cloud: + name: Build debug APKs + runs-on: ubuntu-latest + if: github.ref != 'refs/heads/main' + strategy: + fail-fast: false + # Allow all jobs on develop. Just one per PR. + concurrency: + group: ${{ github.ref == 'refs/heads/develop' && format('build-develop-{0}', github.sha) || format('build-debug-{0}', github.ref) }} + cancel-in-progress: true + steps: + - uses: actions/checkout@v3 + - name: Assemble debug APK + run: ./gradlew assembleDebug $CI_GRADLE_ARG_PROPERTIES + - uses: mobile-dev-inc/action-maestro-cloud@v1.1.1 + with: + api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }} + app-file: app/build/outputs/apk/debug/app-debug.apk + env: | + USERNAME=maestroelement + PASSWORD=${{ secrets.MATRIX_MAESTRO_ACCOUNT_PASSWORD }} + APP_ID=io.element.android.x.debug diff --git a/.maestro/README.md b/.maestro/README.md new file mode 100644 index 0000000000..119aad7ba3 --- /dev/null +++ b/.maestro/README.md @@ -0,0 +1,48 @@ +# Maestro + +Maestro is a framework that we are using to test navigation across the application. +To setup, please refer at [https://maestro.mobile.dev](https://maestro.mobile.dev) + + + +* [Run test](#run-test) + * [Output](#output) +* [Write test](#write-test) + + + +## Run test + +From root dir of the project + +*Note: Since ElementX does not allow account creation nor room creation, we have to use an existing account with an existing room to run maestro test suite. So to run locally, please replace `user` and `123` with your test matrix.org account credentials, and `my room` with one of a room this account has join. Note that the test will send messages to this room.* + +```shell +maestro test \ + -e APP_ID=io.element.android.x.debug \ + -e USERNAME=user \ + -e PASSWORD=123 \ + -e ROOM_NAME="my room" \ + .maestro/allTest.yaml +``` + +### Output + +Test result will be printed on the console, and screenshots will be generated at `./build/maestro` + +## Write test + +Tests are yaml file. Generally each yaml file should leave the app in the same screen than at the beginning. + +Start the app and run this command to help writing test. + +```shell +maestro studio +``` + +Note that sometimes, this prevent running the test. So kill the `meastro studio` process to be able to run the test again. + +## CI + +The CI is running maestro using the workflow `.github/worflow/maestro.yaml` and [maestro cloud](https://cloud.mobile.dev/). For now we are limited to 100 runs a month. +Some GitHub secret are used to be able to do that: `MAESTRO_CLOUD_API_KEY`, for now api key from `benoitm@element.io` maestro cloud account, and `MATRIX_MAESTRO_ACCOUNT_PASSWORD` which is the password of the account @maestroelement:matrix.org. This account contains a room `MyRoom` to ba able to run the maestro test suite. diff --git a/.maestro/allTests.yaml b/.maestro/allTests.yaml new file mode 100644 index 0000000000..8283e9fed5 --- /dev/null +++ b/.maestro/allTests.yaml @@ -0,0 +1,7 @@ +appId: ${APP_ID} +--- +- runFlow: tests/init.yaml +- runFlow: tests/account/login.yaml +- runFlow: tests/settings/settings.yaml +- runFlow: tests/roomList/roomList.yaml +- runFlow: tests/account/logout.yaml diff --git a/.maestro/tests/account/changeServer.yaml b/.maestro/tests/account/changeServer.yaml new file mode 100644 index 0000000000..3f360e70a1 --- /dev/null +++ b/.maestro/tests/account/changeServer.yaml @@ -0,0 +1,5 @@ +appId: ${APP_ID} +--- +- tapOn: "Change" +- takeScreenshot: build/maestro/200-ChangeServer +- tapOn: "Continue" diff --git a/.maestro/tests/account/login.yaml b/.maestro/tests/account/login.yaml new file mode 100644 index 0000000000..1541ee37d6 --- /dev/null +++ b/.maestro/tests/account/login.yaml @@ -0,0 +1,13 @@ +appId: ${APP_ID} +--- +- tapOn: "Sign in" +- runFlow: ../assertions/assertLoginDisplayed.yaml +- takeScreenshot: build/maestro/100-SignIn +- runFlow: changeServer.yaml +- runFlow: ../assertions/assertLoginDisplayed.yaml +- tapOn: "Email or username" +- inputText: ${USERNAME} +- tapOn: "Password" +- inputText: ${PASSWORD} +- tapOn: "Continue" +- runFlow: ../assertions/assertHomeDisplayed.yaml diff --git a/.maestro/tests/account/logout.yaml b/.maestro/tests/account/logout.yaml new file mode 100644 index 0000000000..894b5ec03c --- /dev/null +++ b/.maestro/tests/account/logout.yaml @@ -0,0 +1,9 @@ +appId: ${APP_ID} +--- +- tapOn: "Settings" +- tapOn: "Sign out" +- takeScreenshot: build/maestro/900-SignOutDialg +- tapOn: + text: "Sign out" + index: 1 +- runFlow: ../assertions/assertInitDisplayed.yaml diff --git a/.maestro/tests/assertions/assertHomeDisplayed.yaml b/.maestro/tests/assertions/assertHomeDisplayed.yaml new file mode 100644 index 0000000000..6e9eec50db --- /dev/null +++ b/.maestro/tests/assertions/assertHomeDisplayed.yaml @@ -0,0 +1,5 @@ +appId: ${APP_ID} +--- +- extendedWaitUntil: + visible: "All Chats" + timeout: 10_000 diff --git a/.maestro/tests/assertions/assertInitDisplayed.yaml b/.maestro/tests/assertions/assertInitDisplayed.yaml new file mode 100644 index 0000000000..0bcef846c6 --- /dev/null +++ b/.maestro/tests/assertions/assertInitDisplayed.yaml @@ -0,0 +1,5 @@ +appId: ${APP_ID} +--- +- extendedWaitUntil: + visible: "Own your conversations." + timeout: 10_000 diff --git a/.maestro/tests/assertions/assertLoginDisplayed.yaml b/.maestro/tests/assertions/assertLoginDisplayed.yaml new file mode 100644 index 0000000000..0d6461de86 --- /dev/null +++ b/.maestro/tests/assertions/assertLoginDisplayed.yaml @@ -0,0 +1,5 @@ +appId: ${APP_ID} +--- +- extendedWaitUntil: + visible: "Welcome back" + timeout: 10_000 diff --git a/.maestro/tests/init.yaml b/.maestro/tests/init.yaml new file mode 100644 index 0000000000..178cb85d34 --- /dev/null +++ b/.maestro/tests/init.yaml @@ -0,0 +1,7 @@ +appId: ${APP_ID} +--- +- clearState +- launchApp +- tapOn: "Close showkase button" +- runFlow: ./assertions/assertInitDisplayed.yaml +- takeScreenshot: build/maestro/000-FirstScreen diff --git a/.maestro/tests/roomList/roomList.yaml b/.maestro/tests/roomList/roomList.yaml new file mode 100644 index 0000000000..3a26048791 --- /dev/null +++ b/.maestro/tests/roomList/roomList.yaml @@ -0,0 +1,6 @@ +appId: ${APP_ID} +--- +- takeScreenshot: build/maestro/300-RoomList +- runFlow: searchRoomList.yaml +- runFlow: timeline/timeline.yaml + diff --git a/.maestro/tests/roomList/searchRoomList.yaml b/.maestro/tests/roomList/searchRoomList.yaml new file mode 100644 index 0000000000..fe859defbb --- /dev/null +++ b/.maestro/tests/roomList/searchRoomList.yaml @@ -0,0 +1,15 @@ +appId: ${APP_ID} +--- +- tapOn: "search" +- inputText: ${ROOM_NAME.substring(0, 3)} +- takeScreenshot: build/maestro/400-SearchRoom +- tapOn: ${ROOM_NAME} +# Close keyboard +- hideKeyboard +# Back from timeline +- back +# Close keyboard +- hideKeyboard +# Back from search +- back +- runFlow: ../assertions/assertHomeDisplayed.yaml diff --git a/.maestro/tests/roomList/timeline/timeline.yaml b/.maestro/tests/roomList/timeline/timeline.yaml new file mode 100644 index 0000000000..95d1c1ff57 --- /dev/null +++ b/.maestro/tests/roomList/timeline/timeline.yaml @@ -0,0 +1,14 @@ +appId: ${APP_ID} +--- +# This is the name of one room +# TODO Create a room on a new account +- tapOn: ${ROOM_NAME} +- takeScreenshot: build/maestro/500-Timeline +- tapOn: "Message…" +- inputText: "Hello world!" +- tapOn: "Toggle full screen mode" +- tapOn: "Toggle full screen mode" +- tapOn: "Send" +- hideKeyboard +- back +- runFlow: ../../assertions/assertHomeDisplayed.yaml diff --git a/.maestro/tests/settings/settings.yaml b/.maestro/tests/settings/settings.yaml new file mode 100644 index 0000000000..6d54953242 --- /dev/null +++ b/.maestro/tests/settings/settings.yaml @@ -0,0 +1,12 @@ +appId: ${APP_ID} +--- +- tapOn: "Settings" +- assertVisible: "Rage shake to report bug" +- takeScreenshot: build/maestro/600-Settings +- tapOn: + text: "Report bug" + index: 1 +- assertVisible: "Describe your problem here" +- back +- back +- runFlow: ../assertions/assertHomeDisplayed.yaml diff --git a/app/src/main/java/io/element/android/x/component/ShowkaseButton.kt b/app/src/main/java/io/element/android/x/component/ShowkaseButton.kt index bd8906c2a7..689b46dcdc 100644 --- a/app/src/main/java/io/element/android/x/component/ShowkaseButton.kt +++ b/app/src/main/java/io/element/android/x/component/ShowkaseButton.kt @@ -48,7 +48,7 @@ internal fun ShowkaseButton( .size(16.dp), onClick = onCloseClicked, ) { - Icon(imageVector = Icons.Filled.Close, contentDescription = "") + Icon(imageVector = Icons.Filled.Close, contentDescription = "Close showkase button") } } } From 369f520344e7d497084607c87b9364bb3a754eba Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 12 Jan 2023 17:47:41 +0100 Subject: [PATCH 03/25] Rename job, add missing parameter ROOM_NAME and update TOC --- .github/workflows/maestro.yml | 3 ++- .maestro/README.md | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/maestro.yml b/.github/workflows/maestro.yml index da7d35a080..91a73366a6 100644 --- a/.github/workflows/maestro.yml +++ b/.github/workflows/maestro.yml @@ -12,7 +12,7 @@ env: jobs: maestro-cloud: - name: Build debug APKs + name: Meastro test suite runs-on: ubuntu-latest if: github.ref != 'refs/heads/main' strategy: @@ -32,4 +32,5 @@ jobs: env: | USERNAME=maestroelement PASSWORD=${{ secrets.MATRIX_MAESTRO_ACCOUNT_PASSWORD }} + ROOM_NAME=MyRoom APP_ID=io.element.android.x.debug diff --git a/.maestro/README.md b/.maestro/README.md index 119aad7ba3..6a86ab5f14 100644 --- a/.maestro/README.md +++ b/.maestro/README.md @@ -8,6 +8,7 @@ To setup, please refer at [https://maestro.mobile.dev](https://maestro.mobile.de * [Run test](#run-test) * [Output](#output) * [Write test](#write-test) +* [CI](#ci) From b484c9e2e7347489114173c097e6234677d24762 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 12 Jan 2023 18:05:24 +0100 Subject: [PATCH 04/25] Typo in doc --- .maestro/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.maestro/README.md b/.maestro/README.md index 6a86ab5f14..966528f752 100644 --- a/.maestro/README.md +++ b/.maestro/README.md @@ -33,9 +33,9 @@ Test result will be printed on the console, and screenshots will be generated at ## Write test -Tests are yaml file. Generally each yaml file should leave the app in the same screen than at the beginning. +Tests are yaml files. Generally each yaml file should leave the app in the same screen than at the beginning. -Start the app and run this command to help writing test. +Start the ElementX app and run this command to help writing test. ```shell maestro studio @@ -46,4 +46,4 @@ Note that sometimes, this prevent running the test. So kill the `meastro studio` ## CI The CI is running maestro using the workflow `.github/worflow/maestro.yaml` and [maestro cloud](https://cloud.mobile.dev/). For now we are limited to 100 runs a month. -Some GitHub secret are used to be able to do that: `MAESTRO_CLOUD_API_KEY`, for now api key from `benoitm@element.io` maestro cloud account, and `MATRIX_MAESTRO_ACCOUNT_PASSWORD` which is the password of the account @maestroelement:matrix.org. This account contains a room `MyRoom` to ba able to run the maestro test suite. +Some GitHub secrets are used to be able to do that: `MAESTRO_CLOUD_API_KEY`, for now api key from `benoitm@element.io` maestro cloud account, and `MATRIX_MAESTRO_ACCOUNT_PASSWORD` which is the password of the account `@maestroelement:matrix.org`. This account contains a room `MyRoom` to be able to run the maestro test suite. From bba01ebaff900ab55f9743463877a7348fb0ac90 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 12 Jan 2023 18:13:15 +0100 Subject: [PATCH 05/25] Allow concurrency with the build job. --- .github/workflows/maestro.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maestro.yml b/.github/workflows/maestro.yml index 91a73366a6..d3d0962037 100644 --- a/.github/workflows/maestro.yml +++ b/.github/workflows/maestro.yml @@ -19,7 +19,7 @@ jobs: fail-fast: false # Allow all jobs on develop. Just one per PR. concurrency: - group: ${{ github.ref == 'refs/heads/develop' && format('build-develop-{0}', github.sha) || format('build-debug-{0}', github.ref) }} + group: ${{ github.ref == 'refs/heads/develop' && format('maestro-develop-{0}', github.sha) || format('maestro-debug-{0}', github.ref) }} cancel-in-progress: true steps: - uses: actions/checkout@v3 From ac976719502db7289dd2de7b43c4d2269ebe4605 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 13 Jan 2023 16:52:21 +0100 Subject: [PATCH 06/25] Add doc for future --- .maestro/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.maestro/README.md b/.maestro/README.md index 966528f752..b4f7ead266 100644 --- a/.maestro/README.md +++ b/.maestro/README.md @@ -9,6 +9,7 @@ To setup, please refer at [https://maestro.mobile.dev](https://maestro.mobile.de * [Output](#output) * [Write test](#write-test) * [CI](#ci) +* [Future](#future) @@ -47,3 +48,8 @@ Note that sometimes, this prevent running the test. So kill the `meastro studio` The CI is running maestro using the workflow `.github/worflow/maestro.yaml` and [maestro cloud](https://cloud.mobile.dev/). For now we are limited to 100 runs a month. Some GitHub secrets are used to be able to do that: `MAESTRO_CLOUD_API_KEY`, for now api key from `benoitm@element.io` maestro cloud account, and `MATRIX_MAESTRO_ACCOUNT_PASSWORD` which is the password of the account `@maestroelement:matrix.org`. This account contains a room `MyRoom` to be able to run the maestro test suite. + +## Future + +- run on Element X iOS. This is already working but it need some change on the test to make it works. Could pass a PLATFORM parameter to have unique test and use conditional test. +- run specific test on both iOS and Android devices to make them communicate together. Could be possible to test room invite and join, verification, call, etc. To be done when Element X will be able to create account and create room. A main script would be able to detect the Android device and the iOS device, and run several maestro tests sequentially, using `--device` parameter to perform a global test. From 3ea27c40d321f8f5c65442bd7afae414e965372d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 13 Jan 2023 17:01:45 +0100 Subject: [PATCH 07/25] Fix wording issue --- .maestro/tests/assertions/assertLoginDisplayed.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.maestro/tests/assertions/assertLoginDisplayed.yaml b/.maestro/tests/assertions/assertLoginDisplayed.yaml index 0d6461de86..41f1ff3306 100644 --- a/.maestro/tests/assertions/assertLoginDisplayed.yaml +++ b/.maestro/tests/assertions/assertLoginDisplayed.yaml @@ -1,5 +1,5 @@ appId: ${APP_ID} --- - extendedWaitUntil: - visible: "Welcome back" + visible: "Welcome back!" timeout: 10_000 From 2e42234971539cb2e56a113ba9d7c5c568cec8c0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 13 Jan 2023 17:07:56 +0100 Subject: [PATCH 08/25] Fix wording issue --- .maestro/tests/account/login.yaml | 2 +- .../element/android/x/features/onboarding/OnBoardingScreen.kt | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.maestro/tests/account/login.yaml b/.maestro/tests/account/login.yaml index 1541ee37d6..ceeff061a7 100644 --- a/.maestro/tests/account/login.yaml +++ b/.maestro/tests/account/login.yaml @@ -1,6 +1,6 @@ appId: ${APP_ID} --- -- tapOn: "Sign in" +- tapOn: "Get started" - runFlow: ../assertions/assertLoginDisplayed.yaml - takeScreenshot: build/maestro/100-SignIn - runFlow: changeServer.yaml diff --git a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt index 77f798fb4e..f6e0ed0db4 100644 --- a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt +++ b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt @@ -52,6 +52,7 @@ import com.google.accompanist.pager.rememberPagerState import io.element.android.x.designsystem.components.VectorButton import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import io.element.android.x.element.resources.R as ElementR @OptIn(ExperimentalPagerApi::class) @Composable @@ -119,7 +120,7 @@ fun OnBoardingScreen( ) */ VectorButton( - text = "Sign in", + text = stringResource(id = ElementR.string.login_splash_submit), onClick = { onSignIn() }, From e6da460619a6a8ca8f550a0e21200df86dc07829 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 13 Jan 2023 17:09:12 +0100 Subject: [PATCH 09/25] clearKeychain (iOS) --- .maestro/tests/init.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.maestro/tests/init.yaml b/.maestro/tests/init.yaml index 178cb85d34..656c654fcb 100644 --- a/.maestro/tests/init.yaml +++ b/.maestro/tests/init.yaml @@ -1,7 +1,8 @@ appId: ${APP_ID} --- - clearState -- launchApp +- launchApp: + clearKeychain: true - tapOn: "Close showkase button" - runFlow: ./assertions/assertInitDisplayed.yaml - takeScreenshot: build/maestro/000-FirstScreen From 5f5ec78e78ef48415a3d80fa1fc5170a673aa528 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 13 Jan 2023 17:11:08 +0100 Subject: [PATCH 10/25] Add comments for iOS --- .maestro/README.md | 14 ++++++++++++++ .maestro/tests/account/login.yaml | 8 ++++++++ 2 files changed, 22 insertions(+) diff --git a/.maestro/README.md b/.maestro/README.md index b4f7ead266..15915cbf1c 100644 --- a/.maestro/README.md +++ b/.maestro/README.md @@ -9,6 +9,7 @@ To setup, please refer at [https://maestro.mobile.dev](https://maestro.mobile.de * [Output](#output) * [Write test](#write-test) * [CI](#ci) +* [iOS](#ios) * [Future](#future) @@ -49,6 +50,19 @@ Note that sometimes, this prevent running the test. So kill the `meastro studio` The CI is running maestro using the workflow `.github/worflow/maestro.yaml` and [maestro cloud](https://cloud.mobile.dev/). For now we are limited to 100 runs a month. Some GitHub secrets are used to be able to do that: `MAESTRO_CLOUD_API_KEY`, for now api key from `benoitm@element.io` maestro cloud account, and `MATRIX_MAESTRO_ACCOUNT_PASSWORD` which is the password of the account `@maestroelement:matrix.org`. This account contains a room `MyRoom` to be able to run the maestro test suite. +## iOS + +Need to install `idb-companion` first + +```shell +brew install idb-companion +``` + +Also: +https://github.com/mobile-dev-inc/maestro/issues/146 +https://github.com/mobile-dev-inc/maestro/issues/107 +So you have to change your input keyboard to QWERTY for it to work properly. + ## Future - run on Element X iOS. This is already working but it need some change on the test to make it works. Could pass a PLATFORM parameter to have unique test and use conditional test. diff --git a/.maestro/tests/account/login.yaml b/.maestro/tests/account/login.yaml index ceeff061a7..e3b07bc8ae 100644 --- a/.maestro/tests/account/login.yaml +++ b/.maestro/tests/account/login.yaml @@ -6,8 +6,16 @@ appId: ${APP_ID} - runFlow: changeServer.yaml - runFlow: ../assertions/assertLoginDisplayed.yaml - tapOn: "Email or username" +# ios +# - tapOn: +# id: "usernameTextField" +# index: 0 - inputText: ${USERNAME} - tapOn: "Password" +# iOS +#- tapOn: +# id: "passwordTextField" +# index: 0 - inputText: ${PASSWORD} - tapOn: "Continue" - runFlow: ../assertions/assertHomeDisplayed.yaml From 2b64285edf85450448fce9bd09b7bfd4e2e0142f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 13 Jan 2023 17:29:39 +0100 Subject: [PATCH 11/25] Fix wording issue --- .maestro/tests/account/login.yaml | 2 +- .../io/element/android/x/features/login/root/LoginRootScreen.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.maestro/tests/account/login.yaml b/.maestro/tests/account/login.yaml index e3b07bc8ae..1baf07be5b 100644 --- a/.maestro/tests/account/login.yaml +++ b/.maestro/tests/account/login.yaml @@ -5,7 +5,7 @@ appId: ${APP_ID} - takeScreenshot: build/maestro/100-SignIn - runFlow: changeServer.yaml - runFlow: ../assertions/assertLoginDisplayed.yaml -- tapOn: "Email or username" +- tapOn: "Username or email" # ios # - tapOn: # id: "usernameTextField" diff --git a/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt b/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt index d71cb909c3..247f25fddf 100644 --- a/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt +++ b/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt @@ -138,7 +138,7 @@ fun LoginRootScreen( .fillMaxWidth() .padding(top = 60.dp), label = { - Text(text = "Email or username") + Text(text = stringResource(id = ElementR.string.login_signin_username_hint)) }, onValueChange = { loginFieldState = it From 02417a4f72406fbf8b2de66e45895051d06d6879 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 13 Jan 2023 17:40:05 +0100 Subject: [PATCH 12/25] Update doc. --- .maestro/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.maestro/README.md b/.maestro/README.md index 15915cbf1c..fc2a71d90e 100644 --- a/.maestro/README.md +++ b/.maestro/README.md @@ -45,6 +45,8 @@ maestro studio Note that sometimes, this prevent running the test. So kill the `meastro studio` process to be able to run the test again. +Also, if updating the application code, do not forget to deploy again the application before running the maestro tests. + ## CI The CI is running maestro using the workflow `.github/worflow/maestro.yaml` and [maestro cloud](https://cloud.mobile.dev/). For now we are limited to 100 runs a month. From f65ac02f50fa931c843515a1923994820decbd74 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 13 Jan 2023 17:54:18 +0100 Subject: [PATCH 13/25] Add another test: cancel sign out. --- .maestro/tests/account/logout.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.maestro/tests/account/logout.yaml b/.maestro/tests/account/logout.yaml index 894b5ec03c..3c9dd07972 100644 --- a/.maestro/tests/account/logout.yaml +++ b/.maestro/tests/account/logout.yaml @@ -3,6 +3,9 @@ appId: ${APP_ID} - tapOn: "Settings" - tapOn: "Sign out" - takeScreenshot: build/maestro/900-SignOutDialg +# Ensure cancel cancels +- tapOn: "Cancel" +- tapOn: "Sign out" - tapOn: text: "Sign out" index: 1 From 496bbdc2ad670ae7c210a26366036b0d649367e5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 17 Jan 2023 18:14:12 +0100 Subject: [PATCH 14/25] Fix compilation issue after rebase. --- .../io/element/android/x/features/login/root/LoginRootScreen.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt b/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt index 247f25fddf..76b523ee70 100644 --- a/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt +++ b/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt @@ -48,6 +48,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType @@ -61,6 +62,7 @@ import io.element.android.x.core.compose.textFieldState import io.element.android.x.designsystem.ElementXTheme import io.element.android.x.features.login.error.loginError import io.element.android.x.matrix.core.SessionId +import io.element.android.x.element.resources.R as ElementR @OptIn(ExperimentalMaterial3Api::class) @Composable From 5f43c203995bb3cfd07c6e05df90ae8bb8dd0f16 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 17 Jan 2023 18:18:39 +0100 Subject: [PATCH 15/25] Update string. --- .../io/element/android/x/features/login/root/LoginRootScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt b/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt index 76b523ee70..aa7814ccf2 100644 --- a/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt +++ b/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt @@ -97,7 +97,7 @@ fun LoginRootScreen( val isError = state.loggedInState is LoggedInState.ErrorLoggingIn // Title Text( - text = "Welcome back", + text = stringResource(id = ElementR.string.ftue_auth_welcome_back_title), modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp, vertical = 48.dp), From 5ffac581f40096bbcfae3a291cb0ea8e5770c434 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 18 Jan 2023 09:37:07 +0100 Subject: [PATCH 16/25] Add GitHub actions to update and validate the Gradle Wrapper. --- .github/workflows/gradle-wrapper-update.yml | 18 ++++++++++++++++++ .../workflows/gradle-wrapper-validation.yml | 14 ++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 .github/workflows/gradle-wrapper-update.yml create mode 100644 .github/workflows/gradle-wrapper-validation.yml diff --git a/.github/workflows/gradle-wrapper-update.yml b/.github/workflows/gradle-wrapper-update.yml new file mode 100644 index 0000000000..33a12d3c54 --- /dev/null +++ b/.github/workflows/gradle-wrapper-update.yml @@ -0,0 +1,18 @@ +name: Update Gradle Wrapper + +on: + schedule: + - cron: "0 0 * * *" + +jobs: + update-gradle-wrapper: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Update Gradle Wrapper + uses: gradle-update/update-gradle-wrapper-action@v1 + # Skip in forks + if: github.repository == 'vector-im/element-x-android' + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + target-branch: develop diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml new file mode 100644 index 0000000000..7b68c0077d --- /dev/null +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -0,0 +1,14 @@ +name: "Validate Gradle Wrapper" +on: + pull_request: { } + push: + branches: [ main, develop ] + +jobs: + validation: + name: "Validation" + runs-on: ubuntu-latest + # No concurrency required, this is a prerequisite to other actions and should run every time. + steps: + - uses: actions/checkout@v3 + - uses: gradle/wrapper-validation-action@v1 From a98c6165dd7a23585d8ef7bd17c276a4e15694cb Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 18 Jan 2023 11:21:48 +0100 Subject: [PATCH 17/25] Add steps to check that release and nightly build can compile. --- .github/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 372c275efc..0a9c1de893 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,3 +31,7 @@ jobs: name: elementx-debug path: | app/build/outputs/apk/debug/app-debug.apk + - name: Compile release sources + run: ./gradlew compileReleaseSources $CI_GRADLE_ARG_PROPERTIES + - name: Compile nighlty sources + run: ./gradlew compileNightlySources $CI_GRADLE_ARG_PROPERTIES From da59e812a7f9f0a5c5405a3da4aeba35fa993730 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 5 Jan 2023 14:39:41 +0100 Subject: [PATCH 18/25] Cleanup strings.xml --- app/src/main/res/values/strings.xml | 19 ------------------- .../src/main/res/values/strings.xml | 2 +- 2 files changed, 1 insertion(+), 20 deletions(-) delete mode 100644 app/src/main/res/values/strings.xml diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml deleted file mode 100644 index 120af4c3da..0000000000 --- a/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - diff --git a/features/onboarding/src/main/res/values/strings.xml b/features/onboarding/src/main/res/values/strings.xml index 43ee27cb35..41a17b9693 100644 --- a/features/onboarding/src/main/res/values/strings.xml +++ b/features/onboarding/src/main/res/values/strings.xml @@ -16,5 +16,5 @@ --> - Cut the slack from teams. + Cut the slack from teams. From 8c93aedbc19d3d3701bf937fdd9aa186fc1604c6 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 5 Jan 2023 17:00:58 +0100 Subject: [PATCH 19/25] Create dedicated modules for Strings and apply the plugin `com.likethesalad.stem` Remove translations --- app/build.gradle.kts | 1 + app/src/main/res/values/strings.xml | 20 ++ features/login/build.gradle.kts | 1 + .../x/features/login/error/ErrorFormatter.kt | 6 +- .../x/features/login/root/LoginRootScreen.kt | 6 +- features/logout/build.gradle.kts | 1 + .../features/logout/LogoutPreferenceScreen.kt | 12 +- features/onboarding/build.gradle.kts | 1 + .../x/features/onboarding/OnBoardingScreen.kt | 4 +- .../onboarding/SplashCarouselStateFactory.kt | 18 +- features/preferences/build.gradle.kts | 1 + .../preferences/root/PreferencesRootView.kt | 4 +- features/rageshake/build.gradle.kts | 1 + .../rageshake/bugreport/BugReportView.kt | 20 +- .../crash/ui/CrashDetectionScreen.kt | 10 +- .../detection/RageshakeDetectionView.kt | 12 +- .../preferences/RageshakePreferencesView.kt | 15 +- features/roomlist/build.gradle.kts | 1 + .../roomlist/components/RoomListTopBar.kt | 4 +- gradle/libs.versions.toml | 3 + libraries/designsystem/build.gradle.kts | 1 + .../components/dialogs/ConfirmationDialog.kt | 6 +- .../components/dialogs/ErrorDialog.kt | 6 +- libraries/textcomposer/build.gradle.kts | 1 + .../x/textcomposer/RichTextComposerLayout.kt | 17 +- .../android/x/textcomposer/TextComposer.kt | 4 +- libraries/ui-strings/build.gradle.kts | 32 +++ .../ui-strings/src/main/AndroidManifest.xml | 2 + .../ui-strings/src/main/res/values/array.xml | 61 +++++ .../src/main/res/values/donottranslate.xml | 15 + .../src/main/res/values/strings.xml | 256 ++++++++++-------- .../main/res/values/strings_no_weblate.xml | 23 ++ settings.gradle.kts | 1 + 33 files changed, 384 insertions(+), 182 deletions(-) create mode 100644 app/src/main/res/values/strings.xml create mode 100644 libraries/ui-strings/build.gradle.kts create mode 100644 libraries/ui-strings/src/main/AndroidManifest.xml create mode 100644 libraries/ui-strings/src/main/res/values/array.xml create mode 100755 libraries/ui-strings/src/main/res/values/donottranslate.xml rename libraries/{elementresources => ui-strings}/src/main/res/values/strings.xml (94%) create mode 100644 libraries/ui-strings/src/main/res/values/strings_no_weblate.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 220835ffa4..33827f673b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -20,6 +20,7 @@ @Suppress("DSL_SCOPE_VIOLATION") plugins { id("io.element.android-compose-application") + alias(libs.plugins.stem) alias(libs.plugins.kotlin.android) alias(libs.plugins.ksp) alias(libs.plugins.anvil) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000000..fee1385c85 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,20 @@ + + + + + ignored + diff --git a/features/login/build.gradle.kts b/features/login/build.gradle.kts index 29987189e9..623477f727 100644 --- a/features/login/build.gradle.kts +++ b/features/login/build.gradle.kts @@ -41,6 +41,7 @@ dependencies { implementation(project(":libraries:designsystem")) implementation(project(":libraries:elementresources")) implementation(libs.appyx.core) + implementation(project(":libraries:ui-strings")) ksp(libs.showkase.processor) testImplementation(libs.test.junit) androidTestImplementation(libs.test.junitext) diff --git a/features/login/src/main/java/io/element/android/x/features/login/error/ErrorFormatter.kt b/features/login/src/main/java/io/element/android/x/features/login/error/ErrorFormatter.kt index 3afc697572..3700575b96 100644 --- a/features/login/src/main/java/io/element/android/x/features/login/error/ErrorFormatter.kt +++ b/features/login/src/main/java/io/element/android/x/features/login/error/ErrorFormatter.kt @@ -20,7 +20,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import io.element.android.x.core.uri.isValidUrl import io.element.android.x.features.login.root.LoginFormState -import io.element.android.x.element.resources.R as ElementR +import io.element.android.x.ui.strings.R as StringR @Composable fun loginError( @@ -30,7 +30,7 @@ fun loginError( return when { data.login.isEmpty() -> "Please enter a login" data.password.isEmpty() -> "Please enter a password" - throwable != null -> stringResource(id = ElementR.string.auth_invalid_login_param) + throwable != null -> stringResource(id = StringR.string.auth_invalid_login_param) else -> "No error provided" } } @@ -42,7 +42,7 @@ fun changeServerError( ): String { return when { data.isEmpty() -> "Please enter a server URL" - !data.isValidUrl() -> stringResource(id = ElementR.string.login_error_invalid_home_server) + !data.isValidUrl() -> stringResource(id = StringR.string.login_error_invalid_home_server) throwable != null -> "That server doesn’t seem right. Please check the address." else -> "No error provided" } diff --git a/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt b/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt index aa7814ccf2..6e0f38886a 100644 --- a/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt +++ b/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt @@ -62,7 +62,7 @@ import io.element.android.x.core.compose.textFieldState import io.element.android.x.designsystem.ElementXTheme import io.element.android.x.features.login.error.loginError import io.element.android.x.matrix.core.SessionId -import io.element.android.x.element.resources.R as ElementR +import io.element.android.x.ui.strings.R as StringR @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -97,7 +97,7 @@ fun LoginRootScreen( val isError = state.loggedInState is LoggedInState.ErrorLoggingIn // Title Text( - text = stringResource(id = ElementR.string.ftue_auth_welcome_back_title), + text = stringResource(id = StringR.string.ftue_auth_welcome_back_title), modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp, vertical = 48.dp), @@ -140,7 +140,7 @@ fun LoginRootScreen( .fillMaxWidth() .padding(top = 60.dp), label = { - Text(text = stringResource(id = ElementR.string.login_signin_username_hint)) + Text(text = stringResource(id = StringR.string.login_signin_username_hint)) }, onValueChange = { loginFieldState = it diff --git a/features/logout/build.gradle.kts b/features/logout/build.gradle.kts index c7a28ef2d7..93f9c4f6f2 100644 --- a/features/logout/build.gradle.kts +++ b/features/logout/build.gradle.kts @@ -39,6 +39,7 @@ dependencies { implementation(project(":libraries:matrix")) implementation(project(":libraries:designsystem")) implementation(project(":libraries:elementresources")) + implementation(project(":libraries:ui-strings")) ksp(libs.showkase.processor) testImplementation(libs.test.junit) androidTestImplementation(libs.test.junitext) diff --git a/features/logout/src/main/java/io/element/android/x/features/logout/LogoutPreferenceScreen.kt b/features/logout/src/main/java/io/element/android/x/features/logout/LogoutPreferenceScreen.kt index 75f29319dd..18c4e73b1e 100644 --- a/features/logout/src/main/java/io/element/android/x/features/logout/LogoutPreferenceScreen.kt +++ b/features/logout/src/main/java/io/element/android/x/features/logout/LogoutPreferenceScreen.kt @@ -30,7 +30,7 @@ import io.element.android.x.designsystem.components.ProgressDialog import io.element.android.x.designsystem.components.dialogs.ConfirmationDialog import io.element.android.x.designsystem.components.preferences.PreferenceCategory import io.element.android.x.designsystem.components.preferences.PreferenceText -import io.element.android.x.element.resources.R as ElementR +import io.element.android.x.ui.strings.R as StringR @Composable fun LogoutPreferenceView( @@ -55,9 +55,9 @@ fun LogoutPreferenceView( // Log out confirmation dialog if (openDialog.value) { ConfirmationDialog( - title = stringResource(id = ElementR.string.action_sign_out), - content = stringResource(id = ElementR.string.action_sign_out_confirmation_simple), - submitText = stringResource(id = ElementR.string.action_sign_out), + title = stringResource(id = StringR.string.action_sign_out), + content = stringResource(id = StringR.string.action_sign_out_confirmation_simple), + submitText = stringResource(id = StringR.string.action_sign_out), onCancelClicked = { openDialog.value = false }, @@ -80,9 +80,9 @@ fun LogoutPreferenceView( fun LogoutPreferenceContent( onClick: () -> Unit = {}, ) { - PreferenceCategory(title = stringResource(id = ElementR.string.settings_general_title)) { + PreferenceCategory(title = stringResource(id = StringR.string.settings_general_title)) { PreferenceText( - title = stringResource(id = ElementR.string.action_sign_out), + title = stringResource(id = StringR.string.action_sign_out), icon = Icons.Default.Logout, onClick = onClick ) diff --git a/features/onboarding/build.gradle.kts b/features/onboarding/build.gradle.kts index 4c25a25ea3..cdb646417a 100644 --- a/features/onboarding/build.gradle.kts +++ b/features/onboarding/build.gradle.kts @@ -28,6 +28,7 @@ android { dependencies { implementation(project(":libraries:core")) implementation(project(":libraries:elementresources")) + implementation(project(":libraries:ui-strings")) implementation(project(":libraries:designsystem")) implementation(project(":libraries:architecture")) implementation(libs.accompanist.pager) diff --git a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt index f6e0ed0db4..fb88a76db0 100644 --- a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt +++ b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt @@ -52,7 +52,7 @@ import com.google.accompanist.pager.rememberPagerState import io.element.android.x.designsystem.components.VectorButton import kotlinx.coroutines.delay import kotlinx.coroutines.launch -import io.element.android.x.element.resources.R as ElementR +import io.element.android.x.ui.strings.R as StringR @OptIn(ExperimentalPagerApi::class) @Composable @@ -120,7 +120,7 @@ fun OnBoardingScreen( ) */ VectorButton( - text = stringResource(id = ElementR.string.login_splash_submit), + text = stringResource(id = StringR.string.login_splash_submit), onClick = { onSignIn() }, diff --git a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/SplashCarouselStateFactory.kt b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/SplashCarouselStateFactory.kt index d12f83cfbe..c25fb89815 100644 --- a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/SplashCarouselStateFactory.kt +++ b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/SplashCarouselStateFactory.kt @@ -17,7 +17,7 @@ package io.element.android.x.features.onboarding import androidx.annotation.DrawableRes -import io.element.android.x.element.resources.R as ElementR +import io.element.android.x.ui.strings.R as StringR class SplashCarouselStateFactory { fun create(): SplashCarouselState { @@ -32,8 +32,8 @@ class SplashCarouselStateFactory { return SplashCarouselState( listOf( SplashCarouselState.Item( - ElementR.string.ftue_auth_carousel_secure_title, - ElementR.string.ftue_auth_carousel_secure_body, + StringR.string.ftue_auth_carousel_secure_title, + StringR.string.ftue_auth_carousel_secure_body, hero( R.drawable.ic_splash_conversations, R.drawable.ic_splash_conversations_dark @@ -41,20 +41,20 @@ class SplashCarouselStateFactory { background(R.drawable.bg_carousel_page_1) ), SplashCarouselState.Item( - ElementR.string.ftue_auth_carousel_control_title, - ElementR.string.ftue_auth_carousel_control_body, + StringR.string.ftue_auth_carousel_control_title, + StringR.string.ftue_auth_carousel_control_body, hero(R.drawable.ic_splash_control, R.drawable.ic_splash_control_dark), background(R.drawable.bg_carousel_page_2) ), SplashCarouselState.Item( - ElementR.string.ftue_auth_carousel_encrypted_title, - ElementR.string.ftue_auth_carousel_encrypted_body, + StringR.string.ftue_auth_carousel_encrypted_title, + StringR.string.ftue_auth_carousel_encrypted_body, hero(R.drawable.ic_splash_secure, R.drawable.ic_splash_secure_dark), background(R.drawable.bg_carousel_page_3) ), SplashCarouselState.Item( collaborationTitle(), - ElementR.string.ftue_auth_carousel_workplace_body, + StringR.string.ftue_auth_carousel_workplace_body, hero( R.drawable.ic_splash_collaboration, R.drawable.ic_splash_collaboration_dark @@ -68,7 +68,7 @@ class SplashCarouselStateFactory { private fun collaborationTitle(): Int { return when { true -> R.string.cut_the_slack_from_teams - else -> ElementR.string.ftue_auth_carousel_workplace_title + else -> StringR.string.ftue_auth_carousel_workplace_title } } } diff --git a/features/preferences/build.gradle.kts b/features/preferences/build.gradle.kts index 32ad183d13..e8f5147642 100644 --- a/features/preferences/build.gradle.kts +++ b/features/preferences/build.gradle.kts @@ -42,6 +42,7 @@ dependencies { implementation(project(":features:logout")) implementation(project(":libraries:designsystem")) implementation(project(":libraries:elementresources")) + implementation(project(":libraries:ui-strings")) implementation(libs.datetime) implementation(libs.accompanist.placeholder) testImplementation(libs.test.junit) diff --git a/features/preferences/src/main/java/io/element/android/x/features/preferences/root/PreferencesRootView.kt b/features/preferences/src/main/java/io/element/android/x/features/preferences/root/PreferencesRootView.kt index 95049803a3..5d3e1dab7b 100644 --- a/features/preferences/src/main/java/io/element/android/x/features/preferences/root/PreferencesRootView.kt +++ b/features/preferences/src/main/java/io/element/android/x/features/preferences/root/PreferencesRootView.kt @@ -22,12 +22,12 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import io.element.android.x.architecture.Async import io.element.android.x.designsystem.components.preferences.PreferenceView -import io.element.android.x.element.resources.R import io.element.android.x.features.logout.LogoutPreferenceState import io.element.android.x.features.logout.LogoutPreferenceView import io.element.android.x.features.preferences.user.UserPreferences import io.element.android.x.features.rageshake.preferences.RageshakePreferencesState import io.element.android.x.features.rageshake.preferences.RageshakePreferencesView +import io.element.android.x.ui.strings.R as StringR @Composable fun PreferencesRootView( @@ -41,7 +41,7 @@ fun PreferencesRootView( PreferenceView( modifier = modifier, onBackPressed = onBackPressed, - title = stringResource(id = R.string.settings) + title = stringResource(id = StringR.string.settings) ) { UserPreferences(state.myUser) RageshakePreferencesView( diff --git a/features/rageshake/build.gradle.kts b/features/rageshake/build.gradle.kts index 92f9b75aaa..b3f8b14ded 100644 --- a/features/rageshake/build.gradle.kts +++ b/features/rageshake/build.gradle.kts @@ -39,6 +39,7 @@ dependencies { implementation(project(":anvilannotations")) implementation(project(":libraries:designsystem")) implementation(project(":libraries:elementresources")) + implementation(project(":libraries:ui-strings")) implementation(libs.squareup.seismic) implementation(libs.androidx.datastore.preferences) implementation(libs.coil) diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/bugreport/BugReportView.kt b/features/rageshake/src/main/java/io/element/android/x/features/rageshake/bugreport/BugReportView.kt index 394cf69a5b..b22cc7c48c 100644 --- a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/bugreport/BugReportView.kt +++ b/features/rageshake/src/main/java/io/element/android/x/features/rageshake/bugreport/BugReportView.kt @@ -56,7 +56,7 @@ import io.element.android.x.core.compose.textFieldState import io.element.android.x.designsystem.ElementXTheme import io.element.android.x.designsystem.components.LabelledCheckbox import io.element.android.x.designsystem.components.dialogs.ErrorDialog -import io.element.android.x.element.resources.R as ElementR +import io.element.android.x.ui.strings.R as StringR @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -96,7 +96,7 @@ fun BugReportView( val isFormEnabled = state.sending !is Async.Loading // Title Text( - text = stringResource(id = ElementR.string.send_bug_report), + text = stringResource(id = StringR.string.send_bug_report), modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp, vertical = 16.dp), @@ -106,7 +106,7 @@ fun BugReportView( ) // Form Text( - text = stringResource(id = ElementR.string.send_bug_report_description), + text = stringResource(id = StringR.string.send_bug_report_description), modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp, vertical = 16.dp), @@ -123,10 +123,10 @@ fun BugReportView( .padding(top = 16.dp), enabled = isFormEnabled, label = { - Text(text = stringResource(id = ElementR.string.send_bug_report_placeholder)) + Text(text = stringResource(id = StringR.string.send_bug_report_placeholder)) }, supportingText = { - Text(text = stringResource(id = ElementR.string.send_bug_report_description_in_english)) + Text(text = stringResource(id = StringR.string.send_bug_report_description_in_english)) }, onValueChange = { descriptionFieldState = it @@ -143,28 +143,28 @@ fun BugReportView( checked = state.formState.sendLogs, onCheckedChange = { eventSink(BugReportEvents.SetSendLog(it)) }, enabled = isFormEnabled, - text = stringResource(id = ElementR.string.send_bug_report_include_logs) + text = stringResource(id = StringR.string.send_bug_report_include_logs) ) if (state.hasCrashLogs) { LabelledCheckbox( checked = state.formState.sendCrashLogs, onCheckedChange = { eventSink(BugReportEvents.SetSendCrashLog(it)) }, enabled = isFormEnabled, - text = stringResource(id = ElementR.string.send_bug_report_include_crash_logs) + text = stringResource(id = StringR.string.send_bug_report_include_crash_logs) ) } LabelledCheckbox( checked = state.formState.canContact, onCheckedChange = { eventSink(BugReportEvents.SetCanContact(it)) }, enabled = isFormEnabled, - text = stringResource(id = ElementR.string.you_may_contact_me) + text = stringResource(id = StringR.string.you_may_contact_me) ) if (state.screenshotUri != null) { LabelledCheckbox( checked = state.formState.sendScreenshot, onCheckedChange = { eventSink(BugReportEvents.SetSendScreenshot(it)) }, enabled = isFormEnabled, - text = stringResource(id = ElementR.string.send_bug_report_include_screenshot) + text = stringResource(id = StringR.string.send_bug_report_include_screenshot) ) if (state.formState.sendScreenshot) { Box( @@ -191,7 +191,7 @@ fun BugReportView( .fillMaxWidth() .padding(vertical = 32.dp) ) { - Text(text = stringResource(id = ElementR.string.action_send)) + Text(text = stringResource(id = StringR.string.action_send)) } } when (state.sending) { diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/ui/CrashDetectionScreen.kt b/features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/ui/CrashDetectionScreen.kt index 7c1e855455..13d174468b 100644 --- a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/ui/CrashDetectionScreen.kt +++ b/features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/ui/CrashDetectionScreen.kt @@ -22,7 +22,7 @@ import androidx.compose.ui.tooling.preview.Preview import io.element.android.x.core.compose.LogCompositions import io.element.android.x.designsystem.ElementXTheme import io.element.android.x.designsystem.components.dialogs.ConfirmationDialog -import io.element.android.x.element.resources.R as ElementR +import io.element.android.x.ui.strings.R as StringR @Composable fun CrashDetectionView( @@ -53,10 +53,10 @@ fun CrashDetectionContent( onDismiss: () -> Unit = { }, ) { ConfirmationDialog( - title = stringResource(id = ElementR.string.send_bug_report), - content = stringResource(id = ElementR.string.send_bug_report_app_crashed), - submitText = stringResource(id = ElementR.string.yes), - cancelText = stringResource(id = ElementR.string.no), + title = stringResource(id = StringR.string.send_bug_report), + content = stringResource(id = StringR.string.send_bug_report_app_crashed), + submitText = stringResource(id = StringR.string.yes), + cancelText = stringResource(id = StringR.string.no), onCancelClicked = onNoClicked, onSubmitClicked = onYesClicked, onDismiss = onDismiss, diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/detection/RageshakeDetectionView.kt b/features/rageshake/src/main/java/io/element/android/x/features/rageshake/detection/RageshakeDetectionView.kt index 61e9f32150..6f647758ce 100644 --- a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/detection/RageshakeDetectionView.kt +++ b/features/rageshake/src/main/java/io/element/android/x/features/rageshake/detection/RageshakeDetectionView.kt @@ -30,7 +30,7 @@ import io.element.android.x.core.screenshot.ImageResult import io.element.android.x.core.screenshot.screenshot import io.element.android.x.designsystem.ElementXTheme import io.element.android.x.designsystem.components.dialogs.ConfirmationDialog -import io.element.android.x.element.resources.R as ElementR +import io.element.android.x.ui.strings.R as StringR @Composable fun RageshakeDetectionView( @@ -83,11 +83,11 @@ fun RageshakeDialogContent( onYesClicked: () -> Unit = { }, ) { ConfirmationDialog( - title = stringResource(id = ElementR.string.send_bug_report), - content = stringResource(id = ElementR.string.send_bug_report_alert_message), - thirdButtonText = stringResource(id = ElementR.string.action_disable), - submitText = stringResource(id = ElementR.string.yes), - cancelText = stringResource(id = ElementR.string.no), + title = stringResource(id = StringR.string.send_bug_report), + content = stringResource(id = StringR.string.send_bug_report_alert_message), + thirdButtonText = stringResource(id = StringR.string.action_disable), + submitText = stringResource(id = StringR.string.yes), + cancelText = stringResource(id = StringR.string.no), onCancelClicked = onNoClicked, onThirdButtonClicked = onDisableClicked, onSubmitClicked = onYesClicked, diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/preferences/RageshakePreferencesView.kt b/features/rageshake/src/main/java/io/element/android/x/features/rageshake/preferences/RageshakePreferencesView.kt index e9142a2c2e..f5ce13440e 100644 --- a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/preferences/RageshakePreferencesView.kt +++ b/features/rageshake/src/main/java/io/element/android/x/features/rageshake/preferences/RageshakePreferencesView.kt @@ -27,7 +27,7 @@ import io.element.android.x.designsystem.components.preferences.PreferenceCatego import io.element.android.x.designsystem.components.preferences.PreferenceSlide import io.element.android.x.designsystem.components.preferences.PreferenceSwitch import io.element.android.x.designsystem.components.preferences.PreferenceText -import io.element.android.x.element.resources.R as ElementR +import io.element.android.x.ui.strings.R as StringR @Composable fun RageshakePreferencesView( @@ -44,24 +44,23 @@ fun RageshakePreferencesView( } Column(modifier = modifier) { - PreferenceCategory(title = stringResource(id = ElementR.string.send_bug_report)) { + PreferenceCategory(title = stringResource(id = StringR.string.send_bug_report)) { PreferenceText( - title = stringResource(id = ElementR.string.send_bug_report), + title = stringResource(id = StringR.string.send_bug_report), icon = Icons.Default.BugReport, onClick = onOpenRageshake ) } - - PreferenceCategory(title = stringResource(id = ElementR.string.settings_rageshake)) { + PreferenceCategory(title = stringResource(id = StringR.string.settings_rageshake)) { if (state.isSupported) { PreferenceSwitch( - title = stringResource(id = ElementR.string.send_bug_report_rage_shake), + title = stringResource(id = StringR.string.send_bug_report_rage_shake), isChecked = state.isEnabled, onCheckedChange = ::onEnabledChanged ) PreferenceSlide( - title = stringResource(id = ElementR.string.settings_rageshake_detection_threshold), - // summary = stringResource(id = ElementR.string.settings_rageshake_detection_threshold_summary), + title = stringResource(id = StringR.string.settings_rageshake_detection_threshold), + // summary = stringResource(id = StringR.string.settings_rageshake_detection_threshold_summary), value = state.sensitivity, enabled = state.isEnabled, steps = 3 /* 5 possible values - steps are in ]0, 1[ */, diff --git a/features/roomlist/build.gradle.kts b/features/roomlist/build.gradle.kts index 674ec25d88..646d2175c4 100644 --- a/features/roomlist/build.gradle.kts +++ b/features/roomlist/build.gradle.kts @@ -41,6 +41,7 @@ dependencies { implementation(project(":libraries:designsystem")) implementation(libs.appyx.core) implementation(project(":libraries:elementresources")) + implementation(project(":libraries:ui-strings")) implementation(libs.datetime) implementation(libs.accompanist.placeholder) testImplementation(libs.test.junit) diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomListTopBar.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomListTopBar.kt index a6db83f09d..d8fe56142b 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomListTopBar.kt +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomListTopBar.kt @@ -48,6 +48,7 @@ import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.sp @@ -55,6 +56,7 @@ import io.element.android.x.core.compose.LogCompositions import io.element.android.x.core.compose.textFieldState import io.element.android.x.designsystem.components.avatar.Avatar import io.element.android.x.matrix.ui.model.MatrixUser +import io.element.android.x.ui.strings.R as StringR @Composable fun RoomListTopBar( @@ -185,7 +187,7 @@ private fun DefaultRoomListTopBar( title = { Text( fontWeight = FontWeight.Bold, - text = "All Chats" + text = stringResource(id = StringR.string.all_chats) ) }, navigationIcon = { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0a936ed73c..44c3f89979 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -51,6 +51,7 @@ jsoup = "1.15.3" appyx = "1.0.1" seismic = "1.0.3" dependencycheck = "7.4.4" +stem = "2.2.3" # DI dagger = "2.43" @@ -150,3 +151,5 @@ ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" } molecule = {id = "app.cash.molecule", version.ref = "molecule"} dependencygraph = { id = "com.savvasdalkitsis.module-dependency-graph", version.ref = "dependencygraph" } dependencycheck = { id = "org.owasp.dependencycheck", version.ref = "dependencycheck" } +stem = { id = "com.likethesalad.stem", version.ref = "stem" } +stemlibrary = { id = "com.likethesalad.stem-library", version.ref = "stem" } diff --git a/libraries/designsystem/build.gradle.kts b/libraries/designsystem/build.gradle.kts index 9c70a68b4b..597d8a4514 100644 --- a/libraries/designsystem/build.gradle.kts +++ b/libraries/designsystem/build.gradle.kts @@ -29,6 +29,7 @@ android { implementation(libs.coil.compose) implementation(libs.accompanist.systemui) implementation(project(":libraries:elementresources")) + implementation(project(":libraries:ui-strings")) ksp(libs.showkase.processor) } } diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt index 349ec32f41..9d74a2da87 100644 --- a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt +++ b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt @@ -29,15 +29,15 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import io.element.android.x.element.resources.R as ElementR +import io.element.android.x.ui.strings.R as StringR @Composable fun ConfirmationDialog( title: String, content: String, modifier: Modifier = Modifier, - submitText: String = stringResource(id = ElementR.string.ok), - cancelText: String = stringResource(id = ElementR.string.action_cancel), + submitText: String = stringResource(id = StringR.string.ok), + cancelText: String = stringResource(id = StringR.string.action_cancel), thirdButtonText: String? = null, onSubmitClicked: () -> Unit = {}, onCancelClicked: () -> Unit = {}, diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ErrorDialog.kt b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ErrorDialog.kt index b46f3104a7..241d47fe9f 100644 --- a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ErrorDialog.kt +++ b/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ErrorDialog.kt @@ -28,14 +28,14 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import io.element.android.x.element.resources.R as ElementR +import io.element.android.x.ui.strings.R as StringR @Composable fun ErrorDialog( content: String, modifier: Modifier = Modifier, - title: String = stringResource(id = ElementR.string.dialog_title_error), - submitText: String = stringResource(id = ElementR.string.ok), + title: String = stringResource(id = StringR.string.dialog_title_error), + submitText: String = stringResource(id = StringR.string.ok), onDismiss: () -> Unit = {}, ) { AlertDialog( diff --git a/libraries/textcomposer/build.gradle.kts b/libraries/textcomposer/build.gradle.kts index cda96fb319..41cc543ba2 100644 --- a/libraries/textcomposer/build.gradle.kts +++ b/libraries/textcomposer/build.gradle.kts @@ -31,6 +31,7 @@ android { dependencies { implementation(project(":libraries:elementresources")) + implementation(project(":libraries:ui-strings")) implementation(project(":libraries:core")) implementation(project(":libraries:matrix")) implementation(libs.wysiwyg) diff --git a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/RichTextComposerLayout.kt b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/RichTextComposerLayout.kt index eb51388ca3..7eb8d5dcda 100644 --- a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/RichTextComposerLayout.kt +++ b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/RichTextComposerLayout.kt @@ -45,12 +45,13 @@ import io.element.android.wysiwyg.inputhandlers.models.InlineFormat import io.element.android.x.core.ui.DimensionConverter import io.element.android.x.core.ui.hideKeyboard import io.element.android.x.core.ui.showKeyboard -import io.element.android.x.element.resources.R as ElementR import io.element.android.x.textcomposer.databinding.ComposerRichTextLayoutBinding import io.element.android.x.textcomposer.databinding.ViewRichTextMenuButtonBinding import io.element.android.x.textcomposer.tools.setTextIfDifferent import uniffi.wysiwyg_composer.ActionState import uniffi.wysiwyg_composer.ComposerAction +import io.element.android.x.element.resources.R as ElementR +import io.element.android.x.ui.strings.R as StringR // Imported from Element Android class RichTextComposerLayout @JvmOverloads constructor( @@ -248,28 +249,28 @@ class RichTextComposerLayout @JvmOverloads constructor( private fun setupRichTextMenu() { addRichTextMenuItem( R.drawable.ic_composer_bold, - ElementR.string.rich_text_editor_format_bold, + StringR.string.rich_text_editor_format_bold, ComposerAction.BOLD ) { views.richTextComposerEditText.toggleInlineFormat(InlineFormat.Bold) } addRichTextMenuItem( R.drawable.ic_composer_italic, - ElementR.string.rich_text_editor_format_italic, + StringR.string.rich_text_editor_format_italic, ComposerAction.ITALIC ) { views.richTextComposerEditText.toggleInlineFormat(InlineFormat.Italic) } addRichTextMenuItem( R.drawable.ic_composer_underlined, - ElementR.string.rich_text_editor_format_underline, + StringR.string.rich_text_editor_format_underline, ComposerAction.UNDERLINE ) { views.richTextComposerEditText.toggleInlineFormat(InlineFormat.Underline) } addRichTextMenuItem( R.drawable.ic_composer_strikethrough, - ElementR.string.rich_text_editor_format_strikethrough, + StringR.string.rich_text_editor_format_strikethrough, ComposerAction.STRIKE_THROUGH ) { views.richTextComposerEditText.toggleInlineFormat(InlineFormat.StrikeThrough) @@ -495,16 +496,16 @@ class RichTextComposerLayout @JvmOverloads constructor( */ views.plainTextComposerEditText.setText(text) } - views.sendButton.contentDescription = resources.getString(ElementR.string.action_send) + views.sendButton.contentDescription = resources.getString(StringR.string.action_send) hasRelatedMessage = false } views.sendButton.apply { if (mode is MessageComposerMode.Edit) { - contentDescription = resources.getString(ElementR.string.action_save) + contentDescription = resources.getString(StringR.string.action_save) setImageResource(R.drawable.ic_composer_rich_text_save) } else { - contentDescription = resources.getString(ElementR.string.action_send) + contentDescription = resources.getString(StringR.string.action_send) setImageResource(R.drawable.ic_rich_composer_send) } } diff --git a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt index d7a5788c68..8bb7aea485 100644 --- a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt +++ b/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt @@ -34,7 +34,7 @@ import androidx.compose.ui.unit.sp import androidx.compose.ui.viewinterop.AndroidView import androidx.core.view.isInvisible import androidx.core.view.isVisible -import io.element.android.x.element.resources.R as ElementR +import io.element.android.x.ui.strings.R as StringR @Composable fun TextComposer( @@ -137,7 +137,7 @@ private fun MessageComposerView.setup(isDarkMode: Boolean, composerMode: Message } editText.setTextColor(editTextColor) editText.setHintTextColor(editTextColor) - editText.setHint(ElementR.string.room_message_placeholder) + editText.setHint(StringR.string.room_message_placeholder) emojiButton?.isVisible = true sendButton.isVisible = true editText.maxLines = MessageComposerView.MAX_LINES_WHEN_COLLAPSED diff --git a/libraries/ui-strings/build.gradle.kts b/libraries/ui-strings/build.gradle.kts new file mode 100644 index 0000000000..dc4693ad7f --- /dev/null +++ b/libraries/ui-strings/build.gradle.kts @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// TODO: Remove once https://youtrack.jetbrains.com/issue/KTIJ-19369 is fixed +@Suppress("DSL_SCOPE_VIOLATION") +plugins { + id("io.element.android-library") + alias(libs.plugins.stemlibrary) +} + +android { + namespace = "io.element.android.x.ui.strings" +} + +// forcing the stem string template generator to be cacheable, without this the templates +// are regenerated causing the app module to recompile its sources +tasks.withType(com.likethesalad.android.templates.common.tasks.BaseTask::class.java) { + outputs.cacheIf { true } +} diff --git a/libraries/ui-strings/src/main/AndroidManifest.xml b/libraries/ui-strings/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..8072ee00db --- /dev/null +++ b/libraries/ui-strings/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/libraries/ui-strings/src/main/res/values/array.xml b/libraries/ui-strings/src/main/res/values/array.xml new file mode 100644 index 0000000000..26f7a39bf1 --- /dev/null +++ b/libraries/ui-strings/src/main/res/values/array.xml @@ -0,0 +1,61 @@ + + + + + + @string/compression_opt_list_choose + @string/compression_opt_list_original + @string/compression_opt_list_large + @string/compression_opt_list_medium + @string/compression_opt_list_small + + + 0 + 1 + 2 + 3 + 4 + + + @string/media_source_choose + @string/option_send_files + @string/option_send_voice + @string/option_send_sticker + @string/option_take_photo + @string/option_take_video + + + 0 + 1 + 2 + 3 + 4 + 5 + + + + + + + @string/system_theme + @string/light_theme + @string/dark_theme + @string/black_theme + + + + system + light + dark + black + + + + + @string/media_saving_period_3_days + @string/media_saving_period_1_week + @string/media_saving_period_1_month + @string/media_saving_period_forever + + + \ No newline at end of file diff --git a/libraries/ui-strings/src/main/res/values/donottranslate.xml b/libraries/ui-strings/src/main/res/values/donottranslate.xml new file mode 100755 index 0000000000..bfe751ef5a --- /dev/null +++ b/libraries/ui-strings/src/main/res/values/donottranslate.xml @@ -0,0 +1,15 @@ + + + + + + + + Not implemented yet in ${app_name} + + + Cut the slack from teams. + + + © MapTiler © OpenStreetMap contributors + diff --git a/libraries/elementresources/src/main/res/values/strings.xml b/libraries/ui-strings/src/main/res/values/strings.xml similarity index 94% rename from libraries/elementresources/src/main/res/values/strings.xml rename to libraries/ui-strings/src/main/res/values/strings.xml index f257482aef..73cb60bb68 100644 --- a/libraries/elementresources/src/main/res/values/strings.xml +++ b/libraries/ui-strings/src/main/res/values/strings.xml @@ -1,20 +1,4 @@ - - @@ -150,6 +134,9 @@ ** Unable to decrypt: %s ** The sender\'s device has not sent us the keys for this message. + %1$s ended a voice broadcast. + You ended a voice broadcast. + @@ -209,7 +196,7 @@ Initial sync:\nImporting account data Initial sync request - ElementX needs to perform a clear cache to be up to date, for the following reason:\n%s\n\nNote that this action will restart the app and it may take some time. + ${app_name} needs to perform a clear cache to be up to date, for the following reason:\n%s\n\nNote that this action will restart the app and it may take some time. - Some users have been unignored Message sent @@ -432,6 +419,7 @@ Got it Select all Deselect all + Yes, Stop Copied to clipboard @@ -537,8 +525,8 @@ Are you sure that you want to start a voice call? Are you sure that you want to start a video call? - - ElementX Call Failed + + ${app_name} Call Failed Failed to establish real time connection.\nPlease ask the administrator of your homeserver to configure a TURN server in order for calls to work reliably. Select Sound Device @@ -600,8 +588,8 @@ Re-request encryption keys from your other sessions. - - Please launch ElementX on another device that can decrypt the message so it can send the keys to this session. + + Please launch ${app_name} on another device that can decrypt the message so it can send the keys to this session. @@ -621,8 +609,8 @@ Calls Prevent accidental call Ask for confirmation before starting a call - - Use default ElementX ringtone for incoming calls + + Use default ${app_name} ringtone for incoming calls Incoming call ringtone Select ringtone for calls: @@ -659,12 +647,12 @@ Information - - ElementX needs permission to access your microphone to perform audio calls. - - ElementX needs permission to access your camera and your microphone to perform video calls.\n\nPlease allow access on the next pop-ups to be able to make the call. - - ElementX needs permission to display notifications. Notifications can display your messages, your invitations, etc.\n\nPlease allow access on the next pop-ups to be able to view notification. + + ${app_name} needs permission to access your microphone to perform audio calls. + + ${app_name} needs permission to access your camera and your microphone to perform video calls.\n\nPlease allow access on the next pop-ups to be able to make the call. + + ${app_name} needs permission to display notifications. Notifications can display your messages, your invitations, etc.\n\nPlease allow access on the next pop-ups to be able to view notification. To scan a QR code, you need to allow camera access. Allow permission to access your contacts. @@ -884,7 +872,7 @@ System Settings. Notifications are enabled in the system settings. Notifications are disabled in the system settings.\nPlease check system settings. - ElementX needs the permission to show notifications.\nPlease grant the permission. + ${app_name} needs the permission to show notifications.\nPlease grant the permission. Open Settings Grant Permission @@ -895,8 +883,8 @@ Session Settings. Notifications are enabled for this session. - - Notifications are not enabled for this session.\nPlease check the ElementX settings. + + Notifications are not enabled for this session.\nPlease check the ${app_name} settings. Enable Custom Settings. @@ -905,19 +893,19 @@ Play Services Check Google Play Services APK is available and up-to-date. - - ElementX uses Google Play Services to deliver push messages but it doesn’t seem to be configured correctly:\n%1$s + + ${app_name} uses Google Play Services to deliver push messages but it doesn’t seem to be configured correctly:\n%1$s Fix Play Services Firebase Token FCM token successfully retrieved:\n%1$s Failed to retrieved FCM token:\n%1$s - - [%1$s]\nThis error is out of control of ElementX and according to Google, this error indicates that the device has too many apps registered with FCM. The error only occurs in cases where there are extreme numbers of apps, so it should not affect the average user. - - [%1$s]\nThis error is out of control of ElementX. It can occur for several reasons. Maybe it will work if you retry later, you can also check that Google Play Service is not restricted in data usage in the system settings, or that your device clock is correct, or it can happen on custom ROM. - - [%1$s]\nThis error is out of control of ElementX. There is no Google account on the phone. Please open the account manager and add a Google account. + + [%1$s]\nThis error is out of control of ${app_name} and according to Google, this error indicates that the device has too many apps registered with FCM. The error only occurs in cases where there are extreme numbers of apps, so it should not affect the average user. + + [%1$s]\nThis error is out of control of ${app_name}. It can occur for several reasons. Maybe it will work if you retry later, you can also check that Google Play Service is not restricted in data usage in the system settings, or that your device clock is correct, or it can happen on custom ROM. + + [%1$s]\nThis error is out of control of ${app_name}. There is no Google account on the phone. Please open the account manager and add a Google account. Add Account Token Registration @@ -939,20 +927,20 @@ Start on boot Service will start when the device is restarted. - - The service will not start when the device is restarted, you will not receive notifications until ElementX has been opened once. + + The service will not start when the device is restarted, you will not receive notifications until ${app_name} has been opened once. Enable Start on boot Check background restrictions - - Background restrictions are disabled for ElementX. This test should be run using mobile data (no WIFI).\n%1$s - - Background restrictions are enabled for ElementX.\nWork that the app tries to do will be aggressively restricted while it is in the background, and this could affect notifications.\n%1$s + + Background restrictions are disabled for ${app_name}. This test should be run using mobile data (no WIFI).\n%1$s + + Background restrictions are enabled for ${app_name}.\nWork that the app tries to do will be aggressively restricted while it is in the background, and this could affect notifications.\n%1$s Disable restrictions Battery Optimization - - ElementX is not affected by Battery Optimization. + + ${app_name} is not affected by Battery Optimization. If a user leaves a device unplugged and stationary for a period of time, with the screen off, the device enters Doze mode. This prevents apps from accessing the network and defers their jobs, syncs, and standard alarms. Ignore Optimization @@ -992,11 +980,11 @@ Background synchronization Background Sync Mode Optimized for battery - - ElementX will sync in background in way that preserves the device’s limited resources (battery).\nDepending on your device resource state, the sync may be deferred by the operating system. + + ${app_name} will sync in background in way that preserves the device’s limited resources (battery).\nDepending on your device resource state, the sync may be deferred by the operating system. Optimized for real time - - ElementX will sync in background periodically at precise time (configurable).\nThis will impact radio and battery usage, there will be a permanent notification displayed stating that ElementX is listening for events. + + ${app_name} will sync in background periodically at precise time (configurable).\nThis will impact radio and battery usage, there will be a permanent notification displayed stating that ${app_name} is listening for events. No background sync You will not be notified of incoming messages when the app is in background. @@ -1048,6 +1036,8 @@ Use /confetti command or send a message containing ❄️ or 🎉 Autoplay animated images Play animated images in the timeline as soon as they are visible + Enable direct share + Show recent chats in the system share menu Show join and leave events Invites, removes, and bans are unaffected. Show account events @@ -1075,12 +1065,12 @@ Analytics Send analytics data - - ElementX collects anonymous analytics to allow us to improve the application. + + ${app_name} collects anonymous analytics to allow us to improve the application. - Help improve ElementX + Help improve ${app_name} - Help us identify issues and improve ElementX by sharing anonymous usage data. To understand how people use multiple devices, we’ll generate a random identifier, shared by your devices.\n\nYou can read all our terms %s. + Help us identify issues and improve ${app_name} by sharing anonymous usage data. To understand how people use multiple devices, we’ll generate a random identifier, shared by your devices.\n\nYou can read all our terms %s. here We don\'t record or profile any account data We don\'t share information with third parties @@ -1099,7 +1089,7 @@ Allow integrations Integration manager - ElementX policy + ${app_name} policy Your homeserver policy Your identity server policy Third party libraries @@ -1520,8 +1510,8 @@ - - Please delete the passphrase if you want ElementX to generate a recovery key. + + Please delete the passphrase if you want ${app_name} to generate a recovery key. Never lose encrypted messages Messages in encrypted rooms are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.\n\nSecurely back up your keys to avoid losing them. @@ -1658,7 +1648,10 @@ It looks like you’re trying to connect to another homeserver. Do you want to sign out? Edit + Editing Reply + Replying to %s + Quoting Reply in thread View In Room @@ -1695,7 +1688,8 @@ Create New Room Create New Space No network. Please check your Internet connection. - Something went wrong. Please check your network connection and try again. + + Something went wrong. Please check your network connection and try again. "Change network" "Please wait…" Updating your data… @@ -1751,7 +1745,7 @@ Help Help and support - Get help with using ElementX + Get help with using ${app_name} Versions System settings @@ -1980,8 +1974,8 @@ Secure and independent communication that gives you the same level of privacy as a face-to-face conversation in your own home. Choose where your conversations are kept, giving you control and independence. Connected via Matrix. End-to-end encrypted and no phone number required. No ads or datamining. - - ElementX is also great for the workplace. It’s trusted by the world’s most secure organisations. + + ${app_name} is also great for the workplace. It’s trusted by the world’s most secure organisations. Who will you chat to the most? We\'ll help you get connected @@ -2230,8 +2224,8 @@ Clear data Clear all data currently stored on this device?\nSign in again to access your account data and messages. You’ll lose access to secure messages unless you sign in to recover your encryption keys. - - The current session is for user %1$s and you provide credentials for user %2$s. This is not supported by ElementX.\nPlease first clear data, then sign in again on another account. + + The current session is for user %1$s and you provide credentials for user %2$s. This is not supported by ${app_name}.\nPlease first clear data, then sign in again on another account. Your matrix.to link was malformed Cannot open this link: communities have been replaced by spaces @@ -2253,8 +2247,8 @@ Showing only the first results, type more letters… Fail-fast - - ElementX may crash more often when an unexpected error occurs + + ${app_name} may crash more often when an unexpected error occurs Show debug info on screen Show some useful info to help debugging the application @@ -2362,10 +2356,10 @@ Direct message Jump to read receipt - - ElementX does not handle events of type \'%1$s\' - - ElementX encountered an issue when rendering content of event with id \'%1$s\' + + ${app_name} does not handle events of type \'%1$s\' + + ${app_name} encountered an issue when rendering content of event with id \'%1$s\' Unignore @@ -2491,12 +2485,15 @@ Keys are already up to date! - - ElementX Android + + ${app_name} Android Key Requests Export Audit + Nightly build + Get the latest build (note: you may have trouble to sign in) + Unlock encrypted messages history Refresh @@ -2623,15 +2620,15 @@ Could not save media file Set a new account password… - - Use the latest ElementX on your other devices, ElementX Web, ElementX Desktop, ElementX iOS, ElementX for Android, or another cross-signing capable Matrix client - - ElementX Web\nElementX Desktop - - ElementX iOS\nElementX Android + + Use the latest ${app_name} on your other devices, ${app_name} Web, ${app_name} Desktop, ${app_name} iOS, ${app_name} for Android, or another cross-signing capable Matrix client + + ${app_name} Web\n${app_name} Desktop + + ${app_name} iOS\n${app_name} Android or another cross-signing capable Matrix client - - Use the latest ElementX on your other devices: + + Use the latest ${app_name} on your other devices: Forces the current outbound group session in an encrypted room to be discarded Only supported in encrypted rooms @@ -2659,8 +2656,12 @@ Unencrypted Encrypted by an unverified device The authenticity of this encrypted message can\'t be guaranteed on this device. - Review where you’re logged in - Verify all your sessions to ensure your account & messages are safe + + Review where you’re logged in + + Verify all your sessions to ensure your account & messages are safe + You have unverified sessions + Review to ensure your account is safe Verify the new login accessing your account: %1$s @@ -2686,10 +2687,10 @@ Inviting users… Invite Users Invite friends - - Hey, talk to me on ElementX: %s - - 🔐️ Join me on ElementX + + Hey, talk to me on ${app_name}: %s + + 🔐️ Join me on ${app_name} Invitation sent to %1$s Invitations sent to %1$s and %2$s "It's not a valid matrix QR code" @@ -2710,13 +2711,13 @@ Open terms of %s Disconnect from the identity server %s? - - This identity server is outdated. ElementX support only API V2. + + This identity server is outdated. ${app_name} support only API V2. This operation is not possible. The homeserver is outdated. Please first configure an identity server. Please first accepts the terms of the identity server in the settings. - - For your privacy, ElementX only supports sending hashed user email addresses and phone numbers. + + For your privacy, ${app_name} only supports sending hashed user email addresses and phone numbers. The association has failed. There is no current association with this identifier. The user consent has not been provided. @@ -2810,17 +2811,17 @@ If you want to reset your PIN, tap Forgot PIN to logout and reset. Enable biometrics Enable device specific biometrics, like fingerprints and face recognition. - - PIN code is the only way to unlock ElementX. + + PIN code is the only way to unlock ${app_name}. Could not enable biometric authentication. Show content in notifications Show details like room names and message content. Only display number of unread messages in a simple notification. Require PIN after 2 minutes - - PIN code is required after 2 minutes of not using ElementX. - - PIN code is required every time you open ElementX. + + PIN code is required after 2 minutes of not using ${app_name}. + + PIN code is required every time you open ${app_name}. Change PIN Change your current PIN Can\'t open a room where you are banned from. @@ -2879,8 +2880,8 @@ Slide to end the call Re-Authentication Needed - - ElementX requires you to enter your credentials to perform this action. + + ${app_name} requires you to enter your credentials to perform this action. Failed to authenticate Screenshot @@ -3035,7 +3036,7 @@ Auto Report Decryption Errors. Your system will automatically send logs when an unable to decrypt error occurs - Enable Thread Messages + Enable threaded messages Note: app will be restarted Show latest user info Show the latest profile info (avatar and display name) for all the messages. @@ -3104,18 +3105,24 @@ (%1$s) Live + Live broadcast + + Buffering… Resume voice broadcast record Pause voice broadcast record Stop voice broadcast record Play or resume voice broadcast Pause voice broadcast - Buffering Fast backward 30 seconds Fast forward 30 seconds Can’t start a new voice broadcast You don’t have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions. Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one. You are already recording a voice broadcast. Please end your current voice broadcast to start a new one. + + %1$s left + Stop live broadcasting? + Are you sure you want to stop your live broadcast? This will end the broadcast and the full recording will be available in the room. Anyone in %s will be able to find and join this room - no need to manually invite everyone. You’ll be able to change this in room settings anytime. Anyone in a parent space will be able to find and join this room - no need to manually invite everyone. You’ll be able to change this in room settings anytime. @@ -3129,7 +3136,7 @@ Link this email address with your account - %s in Settings to receive invites directly in ElementX. + %s in Settings to receive invites directly in ${app_name}. Enable LaTeX mathematics Restart the application for the change to take effect. @@ -3200,8 +3207,8 @@ 15 minutes 1 hour 8 hours - ElementX could not access your location - ElementX could not access your location. Please try again later. + ${app_name} could not access your location + ${app_name} could not access your location. Please try again later. Open with Failed to load map Unable to load map\nThis home server may not be configured to display maps. @@ -3214,7 +3221,7 @@ Stop %1$s left - ElementX Live Location + ${app_name} Live Location Location sharing is in progress Enable Live Location Sharing Temporary implementation: locations persist in room history @@ -3257,7 +3264,7 @@ Room notification - ElementX Screen Sharing + ${app_name} Screen Sharing Screen sharing is in progress Choose how to receive notifications @@ -3308,6 +3315,7 @@ Verify your current session for enhanced secure messaging. Verify or sign out from this session for best security and reliability. Verify your current session to reveal this session\'s verification status. + This session doesn\'t support encryption and thus can\'t be verified. Verify Session View Details View All (%1$d) @@ -3330,7 +3338,7 @@ Consider signing out from old sessions (%1$d day or more) that you don’t use anymore. Consider signing out from old sessions (%1$d days or more) that you don’t use anymore. - Current Session + Current session Session Device @@ -3361,6 +3369,14 @@ No inactive sessions found. Clear Filter Select sessions + Sign out + + Sign out of %1$d session + Sign out of %1$d sessions + + Sign out of all other sessions + Show IP address + Hide IP address Sign out of this session Session details Application, device, and activity information. @@ -3389,7 +3405,10 @@ Unverified sessions Unverified sessions are sessions that have logged in with your credentials but not been cross-verified.\n\nYou should make especially certain that you recognise these sessions as they could represent an unauthorised use of your account. Verified sessions - Verified sessions have logged in with your credentials and then been verified, either using your secure passphrase or by cross-verifying.\n\nThis means they hold encryption keys for your previous messages, and confirm to other users you are communicating with that these sessions are really you. + + Verified sessions have logged in with your credentials and then been verified, either using your secure passphrase or by cross-verifying.\n\nThis means they hold encryption keys for your previous messages, and confirm to other users you are communicating with that these sessions are really you. + Verified sessions are anywhere you are using this account after entering your passphrase or confirming your identity with another verified session.\n\nThis means that you have all the keys needed to unlock your encrypted messages and confirm to other users that you trust this session. + This session doesn\'t support encryption, so it can\'t be verified.\n\nYou won\'t be able to participate in rooms where encryption is enabled when using this session.\n\nFor best security and privacy, it is recommended to use Matrix clients that support encryption. Renaming sessions Other users in direct messages and rooms that you join are able to view a full list of your sessions.\n\nThis provides them with confidence that they are really speaking to you, but it also means they can see the session name you enter here. Enable new session manager @@ -3404,14 +3423,14 @@ Spaces are a new way to group rooms and people. Add an existing room, or create a new one, using the bottom-right button. - Welcome to ElementX,\n%s. + Welcome to ${app_name},\n%s. The all-in-one secure chat app for teams, friends and organisations. Create a chat, or join an existing room, to get started. Nothing to report. This is where your unread messages will show up, when you have some. Welcome to a new view! - To simplify your ElementX, tabs are now optional. Manage them using the top-right menu. + To simplify your ${app_name}, tabs are now optional. Manage them using the top-right menu. Access Spaces Access your Spaces (bottom-right) faster and easier than ever before. @@ -3460,11 +3479,26 @@ Confirm Please ensure that you know the origin of this code. By linking devices, you will provide someone with full access to your account. - + Apply bold format Apply italic format Apply strikethrough format Apply underline format + Set link Toggle full screen mode + Text + Link + Create a link + Edit link + + + In reply to + sent a file. + sent an audio file. + sent a voice message. + sent an image. + sent a video. + sent a sticker. + created a poll. diff --git a/libraries/ui-strings/src/main/res/values/strings_no_weblate.xml b/libraries/ui-strings/src/main/res/values/strings_no_weblate.xml new file mode 100644 index 0000000000..d9650bc797 --- /dev/null +++ b/libraries/ui-strings/src/main/res/values/strings_no_weblate.xml @@ -0,0 +1,23 @@ + + + + + + + + en + US + + Latn + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + diff --git a/settings.gradle.kts b/settings.gradle.kts index 245c0b2402..2e1ed9af84 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -40,6 +40,7 @@ include(":libraries:matrix") include(":libraries:matrixui") include(":libraries:textcomposer") include(":libraries:elementresources") +include(":libraries:ui-strings") include(":features:onboarding") include(":features:login") include(":features:logout") From 2c1a2dc444980338c8ab1ec72bcf3aa0a0509e28 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 5 Jan 2023 16:57:53 +0100 Subject: [PATCH 20/25] Add script to import strings, and doc. Add GitHub action to sync strings. --- .../workflows/sync-from-external-sources.yml | 25 ++++++++ libraries/ui-strings/README.md | 15 +++++ tools/strings/importStringsFromElement.sh | 57 +++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 .github/workflows/sync-from-external-sources.yml create mode 100644 libraries/ui-strings/README.md create mode 100755 tools/strings/importStringsFromElement.sh diff --git a/.github/workflows/sync-from-external-sources.yml b/.github/workflows/sync-from-external-sources.yml new file mode 100644 index 0000000000..c9c8528904 --- /dev/null +++ b/.github/workflows/sync-from-external-sources.yml @@ -0,0 +1,25 @@ +name: Sync Data From External Sources +on: + schedule: + # Every nights at 6 + - cron: "0 6 * * *" + +jobs: + sync-strings: + runs-on: ubuntu-latest + # Skip in forks + if: github.repository == 'vector-im/element-x-android' + # No concurrency required, runs every time on a schedule. + steps: + - uses: actions/checkout@v3 + - name: Run local script + run: ./tools/strings/importStringsFromElement.sh + - name: Create Pull Request + uses: peter-evans/create-pull-request@v4 + with: + commit-message: Import strings from Element Android + title: Sync strings + body: | + - Update strings from Element Android + branch: sync-strings + base: develop diff --git a/libraries/ui-strings/README.md b/libraries/ui-strings/README.md new file mode 100644 index 0000000000..bb55709240 --- /dev/null +++ b/libraries/ui-strings/README.md @@ -0,0 +1,15 @@ +## Module ui-strings + +This module contains strings from Element Android. + +The content of this module will be keep synced by the script `rootDir/tools/strings/importStringsFromElement.sh`, which is run daily by a GitHub action. + +### Adding new strings + +Add new strings to the file `./src/main/res/values/new_strings.xml`, or your new strings will be erased on the next sync. + +Also, new strings must be added to Element Android to give a chance to get translation. + +### Long term + +In the future, Weblate will be synced directly with this project. diff --git a/tools/strings/importStringsFromElement.sh b/tools/strings/importStringsFromElement.sh new file mode 100755 index 0000000000..b17adf06a5 --- /dev/null +++ b/tools/strings/importStringsFromElement.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash + +# +# Copyright (c) 2023 New Vector Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +printf "\n" +printf "================================================================================\n" +printf "| Importing strings from Element |\n" +printf "================================================================================\n" + +basedir=`pwd` +tmpPath="${basedir}/tmpStrings" + +## Delete tmp dir +#rm -rf ${tmpPath} + +# Create tmp dir +mkdir ${tmpPath} + +printf "\n================================================================================\n" +printf "Downloading Element Android source from develop...\n" + +curl https://github.com/vector-im/element-android/archive/refs/heads/develop.zip -i -L -o ${tmpPath}/element.zip + +printf "\n================================================================================\n" +printf "Unzipping Element Android source...\n" + +unzip -q ${tmpPath}/element.zip -d ${tmpPath} + +printf "\n================================================================================\n" +printf "Importing the strings...\n" +elementAndroidPath="${tmpPath}/element-android-develop" + +cp -R ${elementAndroidPath}/library/ui-strings/src/main/res ${basedir}/libraries/ui-strings/src/main + +## Delete tmp dir +rm -rf ${tmpPath} + +# Commit all changes to git +# git commit -a -m "Import strings from Element Android" + +printf "\n================================================================================\n" +printf "Done\n" +printf "================================================================================\n" From 66a389c4c5832ef5b8bc433a2c326f70f0f51764 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 18 Jan 2023 11:31:33 +0100 Subject: [PATCH 21/25] Rename folders `java` to `kotlin` --- .../io/element/android/x/anvilannotations/ContributesNode.kt | 0 .../android/x/anvilcodegen/ContributesNodeCodeGenerator.kt | 0 .../{java => kotlin}/io/element/android/x/ElementRootModule.kt | 0 .../{java => kotlin}/io/element/android/x/ElementXApplication.kt | 0 .../main/{java => kotlin}/io/element/android/x/MainActivity.kt | 0 .../io/element/android/x/component/ShowkaseButton.kt | 0 .../main/{java => kotlin}/io/element/android/x/di/AppBindings.kt | 0 .../main/{java => kotlin}/io/element/android/x/di/AppComponent.kt | 0 .../main/{java => kotlin}/io/element/android/x/di/AppModule.kt | 0 .../{java => kotlin}/io/element/android/x/di/RoomComponent.kt | 0 .../{java => kotlin}/io/element/android/x/di/SessionComponent.kt | 0 .../io/element/android/x/initializer/CrashInitializer.kt | 0 .../io/element/android/x/initializer/MatrixInitializer.kt | 0 .../io/element/android/x/initializer/TimberInitializer.kt | 0 .../io/element/android/x/node/LoggedInFlowNode.kt | 0 .../io/element/android/x/node/NotLoggedInFlowNode.kt | 0 .../{java => kotlin}/io/element/android/x/node/RoomFlowNode.kt | 0 .../{java => kotlin}/io/element/android/x/node/RootFlowNode.kt | 0 .../main/{java => kotlin}/io/element/android/x/root/RootEvents.kt | 0 .../{java => kotlin}/io/element/android/x/root/RootPresenter.kt | 0 .../main/{java => kotlin}/io/element/android/x/root/RootState.kt | 0 .../main/{java => kotlin}/io/element/android/x/root/RootView.kt | 0 .../element/android/x/features/login/ExampleInstrumentedTest.kt | 0 .../io/element/android/x/features/login/LoginFlowNode.kt | 0 .../android/x/features/login/changeserver/ChangeServerEvents.kt | 0 .../android/x/features/login/changeserver/ChangeServerNode.kt | 0 .../x/features/login/changeserver/ChangeServerPresenter.kt | 0 .../android/x/features/login/changeserver/ChangeServerState.kt | 0 .../android/x/features/login/changeserver/ChangeServerView.kt | 0 .../io/element/android/x/features/login/error/ErrorFormatter.kt | 0 .../io/element/android/x/features/login/root/LoginRootEvents.kt | 0 .../io/element/android/x/features/login/root/LoginRootNode.kt | 0 .../element/android/x/features/login/root/LoginRootPresenter.kt | 0 .../io/element/android/x/features/login/root/LoginRootScreen.kt | 0 .../io/element/android/x/features/login/root/LoginRootState.kt | 0 .../io/element/android/x/features/login/ExampleUnitTest.kt | 0 .../element/android/x/features/logout/ExampleInstrumentedTest.kt | 0 .../element/android/x/features/logout/LogoutPreferenceEvents.kt | 0 .../android/x/features/logout/LogoutPreferencePresenter.kt | 0 .../element/android/x/features/logout/LogoutPreferenceScreen.kt | 0 .../io/element/android/x/features/logout/LogoutPreferenceState.kt | 0 .../io/element/android/x/features/logout/ExampleUnitTest.kt | 0 .../android/x/features/messages/ExampleInstrumentedTest.kt | 0 .../io/element/android/x/features/messages/MessagesEvents.kt | 0 .../io/element/android/x/features/messages/MessagesNode.kt | 0 .../io/element/android/x/features/messages/MessagesPresenter.kt | 0 .../io/element/android/x/features/messages/MessagesState.kt | 0 .../io/element/android/x/features/messages/MessagesView.kt | 0 .../android/x/features/messages/actionlist/ActionListEvents.kt | 0 .../android/x/features/messages/actionlist/ActionListPresenter.kt | 0 .../android/x/features/messages/actionlist/ActionListState.kt | 0 .../android/x/features/messages/actionlist/ActionListView.kt | 0 .../x/features/messages/actionlist/model/TimelineItemAction.kt | 0 .../x/features/messages/textcomposer/MessageComposerEvents.kt | 0 .../x/features/messages/textcomposer/MessageComposerPresenter.kt | 0 .../x/features/messages/textcomposer/MessageComposerState.kt | 0 .../x/features/messages/textcomposer/MessageComposerView.kt | 0 .../android/x/features/messages/timeline/TimelineEvents.kt | 0 .../android/x/features/messages/timeline/TimelineItemsFactory.kt | 0 .../android/x/features/messages/timeline/TimelinePresenter.kt | 0 .../element/android/x/features/messages/timeline/TimelineState.kt | 0 .../element/android/x/features/messages/timeline/TimelineView.kt | 0 .../x/features/messages/timeline/components/MessageEventBubble.kt | 0 .../messages/timeline/components/TimelineItemEncryptedView.kt | 0 .../messages/timeline/components/TimelineItemImageView.kt | 0 .../messages/timeline/components/TimelineItemInformativeView.kt | 0 .../messages/timeline/components/TimelineItemReactionsView.kt | 0 .../messages/timeline/components/TimelineItemRedactedView.kt | 0 .../features/messages/timeline/components/TimelineItemTextView.kt | 0 .../messages/timeline/components/TimelineItemUnknownView.kt | 0 .../x/features/messages/timeline/components/html/HtmlDocument.kt | 0 .../android/x/features/messages/timeline/diff/CacheInvalidator.kt | 0 .../messages/timeline/diff/MatrixTimelineItemsDiffCallback.kt | 0 .../android/x/features/messages/timeline/model/TimelineItem.kt | 0 .../features/messages/timeline/model/TimelineItemGroupPosition.kt | 0 .../x/features/messages/timeline/model/TimelineItemReactions.kt | 0 .../messages/timeline/model/content/TimelineItemContent.kt | 0 .../messages/timeline/model/content/TimelineItemEmoteContent.kt | 0 .../timeline/model/content/TimelineItemEncryptedContent.kt | 0 .../messages/timeline/model/content/TimelineItemImageContent.kt | 0 .../messages/timeline/model/content/TimelineItemNoticeContent.kt | 0 .../timeline/model/content/TimelineItemRedactedContent.kt | 0 .../timeline/model/content/TimelineItemTextBasedContent.kt | 0 .../messages/timeline/model/content/TimelineItemTextContent.kt | 0 .../messages/timeline/model/content/TimelineItemUnknownContent.kt | 0 .../android/x/features/messages/timeline/util/MutableListExt.kt | 0 .../io/element/android/x/features/messages/ExampleUnitTest.kt | 0 .../element/android/x/features/login/ExampleInstrumentedTest.kt | 0 .../io/element/android/x/features/onboarding/OnBoardingScreen.kt | 0 .../element/android/x/features/onboarding/SplashCarouselState.kt | 0 .../android/x/features/onboarding/SplashCarouselStateFactory.kt | 0 .../io/element/android/x/features/login/ExampleUnitTest.kt | 0 .../android/x/features/preferences/ExampleInstrumentedTest.kt | 0 .../element/android/x/features/preferences/PreferencesFlowNode.kt | 0 .../android/x/features/preferences/root/PreferencesRootNode.kt | 0 .../x/features/preferences/root/PreferencesRootPresenter.kt | 0 .../android/x/features/preferences/root/PreferencesRootState.kt | 0 .../android/x/features/preferences/root/PreferencesRootView.kt | 0 .../android/x/features/preferences/user/UserPreferences.kt | 0 .../io/element/android/x/features/preferences/ExampleUnitTest.kt | 0 .../android/x/features/rageshake/bugreport/BugReportEvents.kt | 0 .../android/x/features/rageshake/bugreport/BugReportNode.kt | 0 .../android/x/features/rageshake/bugreport/BugReportPresenter.kt | 0 .../android/x/features/rageshake/bugreport/BugReportState.kt | 0 .../android/x/features/rageshake/bugreport/BugReportView.kt | 0 .../element/android/x/features/rageshake/crash/CrashDataStore.kt | 0 .../x/features/rageshake/crash/VectorUncaughtExceptionHandler.kt | 0 .../android/x/features/rageshake/crash/ui/CrashDetectionEvents.kt | 0 .../x/features/rageshake/crash/ui/CrashDetectionPresenter.kt | 0 .../android/x/features/rageshake/crash/ui/CrashDetectionScreen.kt | 0 .../android/x/features/rageshake/crash/ui/CrashDetectionState.kt | 0 .../x/features/rageshake/detection/RageshakeDetectionEvents.kt | 0 .../x/features/rageshake/detection/RageshakeDetectionPresenter.kt | 0 .../x/features/rageshake/detection/RageshakeDetectionState.kt | 0 .../x/features/rageshake/detection/RageshakeDetectionView.kt | 0 .../io/element/android/x/features/rageshake/logs/LogFormatter.kt | 0 .../element/android/x/features/rageshake/logs/VectorFileLogger.kt | 0 .../features/rageshake/preferences/RageshakePreferencesEvents.kt | 0 .../rageshake/preferences/RageshakePreferencesPresenter.kt | 0 .../x/features/rageshake/preferences/RageshakePreferencesState.kt | 0 .../x/features/rageshake/preferences/RageshakePreferencesView.kt | 0 .../element/android/x/features/rageshake/rageshake/RageShake.kt | 0 .../android/x/features/rageshake/rageshake/RageshakeDataStore.kt | 0 .../element/android/x/features/rageshake/reporter/BugReporter.kt | 0 .../x/features/rageshake/reporter/BugReporterMultipartBody.java | 0 .../element/android/x/features/rageshake/reporter/ReportType.kt | 0 .../android/x/features/rageshake/screenshot/ScreenshotHolder.kt | 0 .../io/element/android/x/features/login/ExampleUnitTest.kt | 0 .../android/x/features/roomlist/ExampleInstrumentedTest.kt | 0 .../element/android/x/features/roomlist/LastMessageFormatter.kt | 0 .../io/element/android/x/features/roomlist/RoomListNode.kt | 0 .../io/element/android/x/features/roomlist/RoomListPresenter.kt | 0 .../io/element/android/x/features/roomlist/RoomListView.kt | 0 .../android/x/features/roomlist/components/RoomListTopBar.kt | 0 .../android/x/features/roomlist/components/RoomSummaryRow.kt | 0 .../element/android/x/features/roomlist/model/RoomListEvents.kt | 0 .../android/x/features/roomlist/model/RoomListRoomSummary.kt | 0 .../x/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt | 0 .../io/element/android/x/features/roomlist/model/RoomListState.kt | 0 .../io/element/android/x/features/roomlist/model/stubbed.kt | 0 .../io/element/android/x/features/roomlist/ExampleUnitTest.kt | 0 .../io/element/android/x/architecture/AssistedNodeFactory.kt | 0 .../{java => kotlin}/io/element/android/x/architecture/Async.kt | 0 .../io/element/android/x/architecture/Bindings.kt | 0 .../io/element/android/x/architecture/NodeFactories.kt | 0 .../{java => kotlin}/io/element/android/x/architecture/NodeKey.kt | 0 .../io/element/android/x/architecture/Presenter.kt | 0 .../io/element/android/x/architecture/PresenterConnector.kt | 0 .../{java => kotlin}/io/element/android/x/core/bitmap/Bitmap.kt | 0 .../{java => kotlin}/io/element/android/x/core/bool/Booleans.kt | 0 .../io/element/android/x/core/compose/Keyboard.kt | 0 .../io/element/android/x/core/compose/LogCompositions.kt | 0 .../io/element/android/x/core/compose/OnLifecycleEvent.kt | 0 .../android/x/core/compose/PairCombinedPreviewParameter.kt | 0 .../io/element/android/x/core/compose/TextFieldLocalState.kt | 0 .../io/element/android/x/core/coroutine/CoroutineDispatchers.kt | 0 .../io/element/android/x/core/coroutine/TimingOperators.kt | 0 .../{java => kotlin}/io/element/android/x/core/coroutine/pmap.kt | 0 .../io/element/android/x/core/data/StableCharSequence.kt | 0 .../main/{java => kotlin}/io/element/android/x/core/data/Try.kt | 0 .../io/element/android/x/core/di/DaggerComponentOwner.kt | 0 .../io/element/android/x/core/extensions/BasicExtensions.kt | 0 .../io/element/android/x/core/file/compressFile.kt | 0 .../io/element/android/x/core/hardware/vibrator.kt | 0 .../io/element/android/x/core/mimetype/MimeTypes.kt | 0 .../io/element/android/x/core/screenshot/Screenshot.kt | 0 .../io/element/android/x/core/ui/DimensionConverter.kt | 0 .../main/{java => kotlin}/io/element/android/x/core/ui/View.kt | 0 .../{java => kotlin}/io/element/android/x/core/uri/UrlUtils.kt | 0 .../{java => kotlin}/io/element/android/x/designsystem/Color.kt | 0 .../io/element/android/x/designsystem/ColorUtil.kt | 0 .../{java => kotlin}/io/element/android/x/designsystem/Theme.kt | 0 .../{java => kotlin}/io/element/android/x/designsystem/Type.kt | 0 .../io/element/android/x/designsystem/VectorIcons.kt | 0 .../android/x/designsystem/components/ClickableLinkText.kt | 0 .../element/android/x/designsystem/components/LabelledCheckbox.kt | 0 .../element/android/x/designsystem/components/ProgressDialog.kt | 0 .../io/element/android/x/designsystem/components/VectorButton.kt | 0 .../io/element/android/x/designsystem/components/VectorIcon.kt | 0 .../io/element/android/x/designsystem/components/avatar/Avatar.kt | 0 .../android/x/designsystem/components/avatar/AvatarData.kt | 0 .../android/x/designsystem/components/avatar/AvatarSize.kt | 0 .../x/designsystem/components/dialogs/ConfirmationDialog.kt | 0 .../android/x/designsystem/components/dialogs/ErrorDialog.kt | 0 .../android/x/designsystem/components/preferences/Config.kt | 0 .../x/designsystem/components/preferences/PreferenceCategory.kt | 0 .../x/designsystem/components/preferences/PreferenceScreen.kt | 0 .../x/designsystem/components/preferences/PreferenceSlide.kt | 0 .../x/designsystem/components/preferences/PreferenceSwitch.kt | 0 .../x/designsystem/components/preferences/PreferenceText.kt | 0 .../components/preferences/components/PreferenceIcon.kt | 0 .../src/main/{java => kotlin}/io/element/android/x/di/AppScope.kt | 0 .../io/element/android/x/di/ApplicationContext.kt | 0 .../main/{java => kotlin}/io/element/android/x/di/RoomScope.kt | 0 .../main/{java => kotlin}/io/element/android/x/di/SessionScope.kt | 0 .../src/main/{java => kotlin}/io/element/android/x/di/SingleIn.kt | 0 .../main/{java => kotlin}/io/element/android/x/matrix/LogTag.kt | 0 .../main/{java => kotlin}/io/element/android/x/matrix/Matrix.kt | 0 .../{java => kotlin}/io/element/android/x/matrix/MatrixClient.kt | 0 .../io/element/android/x/matrix/RustMatrixClient.kt | 0 .../{java => kotlin}/io/element/android/x/matrix/core/EventId.kt | 0 .../io/element/android/x/matrix/core/MatrixPatterns.kt | 0 .../{java => kotlin}/io/element/android/x/matrix/core/RoomId.kt | 0 .../io/element/android/x/matrix/core/SessionId.kt | 0 .../{java => kotlin}/io/element/android/x/matrix/core/UserId.kt | 0 .../io/element/android/x/matrix/media/MediaResolver.kt | 0 .../io/element/android/x/matrix/permalink/MatrixToConverter.kt | 0 .../io/element/android/x/matrix/permalink/PermalinkData.kt | 0 .../io/element/android/x/matrix/permalink/PermalinkParser.kt | 0 .../io/element/android/x/matrix/room/MatrixRoom.kt | 0 .../io/element/android/x/matrix/room/RoomListenerFlows.kt | 0 .../io/element/android/x/matrix/room/RoomSummary.kt | 0 .../io/element/android/x/matrix/room/RoomSummaryDataSource.kt | 0 .../io/element/android/x/matrix/room/RoomSummaryDetailsFactory.kt | 0 .../io/element/android/x/matrix/room/RustMatrixRoom.kt | 0 .../io/element/android/x/matrix/room/message/RoomMessage.kt | 0 .../element/android/x/matrix/room/message/RoomMessageFactory.kt | 0 .../io/element/android/x/matrix/session/Session.kt | 0 .../io/element/android/x/matrix/session/SessionStore.kt | 0 .../io/element/android/x/matrix/sync/SlidingSyncObserverProxy.kt | 0 .../io/element/android/x/matrix/sync/SlidingSyncViewFlows.kt | 0 .../io/element/android/x/matrix/timeline/MatrixTimeline.kt | 0 .../io/element/android/x/matrix/timeline/MatrixTimelineItem.kt | 0 .../io/element/android/x/matrix/timeline/RustMatrixTimeline.kt | 0 .../io/element/android/x/matrix/tracing/TracingConfiguration.kt | 0 .../io/element/android/x/matrix/util/CallbackFlow.kt | 0 .../{java => kotlin}/io/element/android/x/matrix/util/Error.kt | 0 .../io/element/android/x/matrix/ui/MatrixItemHelper.kt | 0 .../io/element/android/x/matrix/ui/components/MatrixUserHeader.kt | 0 .../io/element/android/x/matrix/ui/components/MatrixUserRow.kt | 0 .../io/element/android/x/matrix/ui/di/MatrixUIBindings.kt | 0 .../io/element/android/x/matrix/ui/media/ImageLoaderFactories.kt | 0 .../io/element/android/x/matrix/ui/media/MediaFetcher.kt | 0 .../io/element/android/x/matrix/ui/media/MediaKeyer.kt | 0 .../io/element/android/x/matrix/ui/model/MatrixUser.kt | 0 .../io/element/android/x/textcomposer/MessageComposerMode.kt | 0 .../io/element/android/x/textcomposer/MessageComposerView.kt | 0 .../io/element/android/x/textcomposer/RichTextComposerLayout.kt | 0 .../io/element/android/x/textcomposer/TextComposer.kt | 0 .../io/element/android/x/textcomposer/tools/EditTextExtensions.kt | 0 .../android/x/textcomposer/tools/SimpleTransitionListener.kt | 0 .../io/element/android/x/textcomposer/tools/ViewExtensions.kt | 0 plugins/src/main/{java => kotlin}/Versions.kt | 0 plugins/src/main/{java => kotlin}/extension/CommonExtension.kt | 0 .../src/main/{java => kotlin}/extension/DependencyHandleScope.kt | 0 plugins/src/main/{java => kotlin}/extension/VersionCatalog.kt | 0 .../io.element.android-compose-application.gradle.kts | 0 .../io.element.android-compose-library.gradle.kts | 0 .../main/{java => kotlin}/io.element.android-library.gradle.kts | 0 249 files changed, 0 insertions(+), 0 deletions(-) rename anvilannotations/src/main/{java => kotlin}/io/element/android/x/anvilannotations/ContributesNode.kt (100%) rename anvilcodegen/src/main/{java => kotlin}/io/element/android/x/anvilcodegen/ContributesNodeCodeGenerator.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/ElementRootModule.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/ElementXApplication.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/MainActivity.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/component/ShowkaseButton.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/di/AppBindings.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/di/AppComponent.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/di/AppModule.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/di/RoomComponent.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/di/SessionComponent.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/initializer/CrashInitializer.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/initializer/MatrixInitializer.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/initializer/TimberInitializer.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/node/LoggedInFlowNode.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/node/NotLoggedInFlowNode.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/node/RoomFlowNode.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/node/RootFlowNode.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/root/RootEvents.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/root/RootPresenter.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/root/RootState.kt (100%) rename app/src/main/{java => kotlin}/io/element/android/x/root/RootView.kt (100%) rename features/login/src/androidTest/{java => kotlin}/io/element/android/x/features/login/ExampleInstrumentedTest.kt (100%) rename features/login/src/main/{java => kotlin}/io/element/android/x/features/login/LoginFlowNode.kt (100%) rename features/login/src/main/{java => kotlin}/io/element/android/x/features/login/changeserver/ChangeServerEvents.kt (100%) rename features/login/src/main/{java => kotlin}/io/element/android/x/features/login/changeserver/ChangeServerNode.kt (100%) rename features/login/src/main/{java => kotlin}/io/element/android/x/features/login/changeserver/ChangeServerPresenter.kt (100%) rename features/login/src/main/{java => kotlin}/io/element/android/x/features/login/changeserver/ChangeServerState.kt (100%) rename features/login/src/main/{java => kotlin}/io/element/android/x/features/login/changeserver/ChangeServerView.kt (100%) rename features/login/src/main/{java => kotlin}/io/element/android/x/features/login/error/ErrorFormatter.kt (100%) rename features/login/src/main/{java => kotlin}/io/element/android/x/features/login/root/LoginRootEvents.kt (100%) rename features/login/src/main/{java => kotlin}/io/element/android/x/features/login/root/LoginRootNode.kt (100%) rename features/login/src/main/{java => kotlin}/io/element/android/x/features/login/root/LoginRootPresenter.kt (100%) rename features/login/src/main/{java => kotlin}/io/element/android/x/features/login/root/LoginRootScreen.kt (100%) rename features/login/src/main/{java => kotlin}/io/element/android/x/features/login/root/LoginRootState.kt (100%) rename features/login/src/test/{java => kotlin}/io/element/android/x/features/login/ExampleUnitTest.kt (100%) rename features/logout/src/androidTest/{java => kotlin}/io/element/android/x/features/logout/ExampleInstrumentedTest.kt (100%) rename features/logout/src/main/{java => kotlin}/io/element/android/x/features/logout/LogoutPreferenceEvents.kt (100%) rename features/logout/src/main/{java => kotlin}/io/element/android/x/features/logout/LogoutPreferencePresenter.kt (100%) rename features/logout/src/main/{java => kotlin}/io/element/android/x/features/logout/LogoutPreferenceScreen.kt (100%) rename features/logout/src/main/{java => kotlin}/io/element/android/x/features/logout/LogoutPreferenceState.kt (100%) rename features/logout/src/test/{java => kotlin}/io/element/android/x/features/logout/ExampleUnitTest.kt (100%) rename features/messages/src/androidTest/{java => kotlin}/io/element/android/x/features/messages/ExampleInstrumentedTest.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/MessagesEvents.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/MessagesNode.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/MessagesPresenter.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/MessagesState.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/MessagesView.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/actionlist/ActionListEvents.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/actionlist/ActionListPresenter.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/actionlist/ActionListState.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/actionlist/ActionListView.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/actionlist/model/TimelineItemAction.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/textcomposer/MessageComposerEvents.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/textcomposer/MessageComposerPresenter.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/textcomposer/MessageComposerState.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/textcomposer/MessageComposerView.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/TimelineEvents.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/TimelineItemsFactory.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/TimelinePresenter.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/TimelineState.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/TimelineView.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/components/MessageEventBubble.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/components/TimelineItemEncryptedView.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/components/TimelineItemImageView.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/components/TimelineItemInformativeView.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/components/TimelineItemReactionsView.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/components/TimelineItemRedactedView.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/components/TimelineItemTextView.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/components/TimelineItemUnknownView.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/components/html/HtmlDocument.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/diff/CacheInvalidator.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/diff/MatrixTimelineItemsDiffCallback.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/model/TimelineItem.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/model/TimelineItemGroupPosition.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/model/TimelineItemReactions.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/model/content/TimelineItemContent.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/model/content/TimelineItemEmoteContent.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/model/content/TimelineItemEncryptedContent.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/model/content/TimelineItemImageContent.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/model/content/TimelineItemNoticeContent.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/model/content/TimelineItemRedactedContent.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextBasedContent.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextContent.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/model/content/TimelineItemUnknownContent.kt (100%) rename features/messages/src/main/{java => kotlin}/io/element/android/x/features/messages/timeline/util/MutableListExt.kt (100%) rename features/messages/src/test/{java => kotlin}/io/element/android/x/features/messages/ExampleUnitTest.kt (100%) rename features/onboarding/src/androidTest/{java => kotlin}/io/element/android/x/features/login/ExampleInstrumentedTest.kt (100%) rename features/onboarding/src/main/{java => kotlin}/io/element/android/x/features/onboarding/OnBoardingScreen.kt (100%) rename features/onboarding/src/main/{java => kotlin}/io/element/android/x/features/onboarding/SplashCarouselState.kt (100%) rename features/onboarding/src/main/{java => kotlin}/io/element/android/x/features/onboarding/SplashCarouselStateFactory.kt (100%) rename features/onboarding/src/test/{java => kotlin}/io/element/android/x/features/login/ExampleUnitTest.kt (100%) rename features/preferences/src/androidTest/{java => kotlin}/io/element/android/x/features/preferences/ExampleInstrumentedTest.kt (100%) rename features/preferences/src/main/{java => kotlin}/io/element/android/x/features/preferences/PreferencesFlowNode.kt (100%) rename features/preferences/src/main/{java => kotlin}/io/element/android/x/features/preferences/root/PreferencesRootNode.kt (100%) rename features/preferences/src/main/{java => kotlin}/io/element/android/x/features/preferences/root/PreferencesRootPresenter.kt (100%) rename features/preferences/src/main/{java => kotlin}/io/element/android/x/features/preferences/root/PreferencesRootState.kt (100%) rename features/preferences/src/main/{java => kotlin}/io/element/android/x/features/preferences/root/PreferencesRootView.kt (100%) rename features/preferences/src/main/{java => kotlin}/io/element/android/x/features/preferences/user/UserPreferences.kt (100%) rename features/preferences/src/test/{java => kotlin}/io/element/android/x/features/preferences/ExampleUnitTest.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/bugreport/BugReportEvents.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/bugreport/BugReportNode.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/bugreport/BugReportPresenter.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/bugreport/BugReportState.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/bugreport/BugReportView.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/crash/CrashDataStore.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/crash/VectorUncaughtExceptionHandler.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/crash/ui/CrashDetectionEvents.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/crash/ui/CrashDetectionPresenter.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/crash/ui/CrashDetectionScreen.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/crash/ui/CrashDetectionState.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/detection/RageshakeDetectionEvents.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/detection/RageshakeDetectionPresenter.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/detection/RageshakeDetectionState.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/detection/RageshakeDetectionView.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/logs/LogFormatter.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/logs/VectorFileLogger.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/preferences/RageshakePreferencesEvents.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/preferences/RageshakePreferencesPresenter.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/preferences/RageshakePreferencesState.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/preferences/RageshakePreferencesView.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/rageshake/RageShake.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/rageshake/RageshakeDataStore.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/reporter/BugReporter.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/reporter/BugReporterMultipartBody.java (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/reporter/ReportType.kt (100%) rename features/rageshake/src/main/{java => kotlin}/io/element/android/x/features/rageshake/screenshot/ScreenshotHolder.kt (100%) rename features/rageshake/src/test/{java => kotlin}/io/element/android/x/features/login/ExampleUnitTest.kt (100%) rename features/roomlist/src/androidTest/{java => kotlin}/io/element/android/x/features/roomlist/ExampleInstrumentedTest.kt (100%) rename features/roomlist/src/main/{java => kotlin}/io/element/android/x/features/roomlist/LastMessageFormatter.kt (100%) rename features/roomlist/src/main/{java => kotlin}/io/element/android/x/features/roomlist/RoomListNode.kt (100%) rename features/roomlist/src/main/{java => kotlin}/io/element/android/x/features/roomlist/RoomListPresenter.kt (100%) rename features/roomlist/src/main/{java => kotlin}/io/element/android/x/features/roomlist/RoomListView.kt (100%) rename features/roomlist/src/main/{java => kotlin}/io/element/android/x/features/roomlist/components/RoomListTopBar.kt (100%) rename features/roomlist/src/main/{java => kotlin}/io/element/android/x/features/roomlist/components/RoomSummaryRow.kt (100%) rename features/roomlist/src/main/{java => kotlin}/io/element/android/x/features/roomlist/model/RoomListEvents.kt (100%) rename features/roomlist/src/main/{java => kotlin}/io/element/android/x/features/roomlist/model/RoomListRoomSummary.kt (100%) rename features/roomlist/src/main/{java => kotlin}/io/element/android/x/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt (100%) rename features/roomlist/src/main/{java => kotlin}/io/element/android/x/features/roomlist/model/RoomListState.kt (100%) rename features/roomlist/src/main/{java => kotlin}/io/element/android/x/features/roomlist/model/stubbed.kt (100%) rename features/roomlist/src/test/{java => kotlin}/io/element/android/x/features/roomlist/ExampleUnitTest.kt (100%) rename libraries/architecture/src/main/{java => kotlin}/io/element/android/x/architecture/AssistedNodeFactory.kt (100%) rename libraries/architecture/src/main/{java => kotlin}/io/element/android/x/architecture/Async.kt (100%) rename libraries/architecture/src/main/{java => kotlin}/io/element/android/x/architecture/Bindings.kt (100%) rename libraries/architecture/src/main/{java => kotlin}/io/element/android/x/architecture/NodeFactories.kt (100%) rename libraries/architecture/src/main/{java => kotlin}/io/element/android/x/architecture/NodeKey.kt (100%) rename libraries/architecture/src/main/{java => kotlin}/io/element/android/x/architecture/Presenter.kt (100%) rename libraries/architecture/src/main/{java => kotlin}/io/element/android/x/architecture/PresenterConnector.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/bitmap/Bitmap.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/bool/Booleans.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/compose/Keyboard.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/compose/LogCompositions.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/compose/OnLifecycleEvent.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/compose/PairCombinedPreviewParameter.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/compose/TextFieldLocalState.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/coroutine/CoroutineDispatchers.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/coroutine/TimingOperators.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/coroutine/pmap.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/data/StableCharSequence.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/data/Try.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/di/DaggerComponentOwner.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/extensions/BasicExtensions.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/file/compressFile.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/hardware/vibrator.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/mimetype/MimeTypes.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/screenshot/Screenshot.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/ui/DimensionConverter.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/ui/View.kt (100%) rename libraries/core/src/main/{java => kotlin}/io/element/android/x/core/uri/UrlUtils.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/Color.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/ColorUtil.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/Theme.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/Type.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/VectorIcons.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/ClickableLinkText.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/LabelledCheckbox.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/ProgressDialog.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/VectorButton.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/VectorIcon.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/avatar/Avatar.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/avatar/AvatarData.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/avatar/AvatarSize.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/dialogs/ErrorDialog.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/preferences/Config.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/preferences/PreferenceCategory.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/preferences/PreferenceScreen.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/preferences/PreferenceSlide.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/preferences/PreferenceSwitch.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/preferences/PreferenceText.kt (100%) rename libraries/designsystem/src/main/{java => kotlin}/io/element/android/x/designsystem/components/preferences/components/PreferenceIcon.kt (100%) rename libraries/di/src/main/{java => kotlin}/io/element/android/x/di/AppScope.kt (100%) rename libraries/di/src/main/{java => kotlin}/io/element/android/x/di/ApplicationContext.kt (100%) rename libraries/di/src/main/{java => kotlin}/io/element/android/x/di/RoomScope.kt (100%) rename libraries/di/src/main/{java => kotlin}/io/element/android/x/di/SessionScope.kt (100%) rename libraries/di/src/main/{java => kotlin}/io/element/android/x/di/SingleIn.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/LogTag.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/Matrix.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/MatrixClient.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/RustMatrixClient.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/core/EventId.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/core/MatrixPatterns.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/core/RoomId.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/core/SessionId.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/core/UserId.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/media/MediaResolver.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/permalink/MatrixToConverter.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/permalink/PermalinkData.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/permalink/PermalinkParser.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/room/MatrixRoom.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/room/RoomListenerFlows.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/room/RoomSummary.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/room/RoomSummaryDataSource.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/room/RoomSummaryDetailsFactory.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/room/RustMatrixRoom.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/room/message/RoomMessage.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/room/message/RoomMessageFactory.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/session/Session.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/session/SessionStore.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/sync/SlidingSyncObserverProxy.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/sync/SlidingSyncViewFlows.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/timeline/MatrixTimeline.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/timeline/MatrixTimelineItem.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/timeline/RustMatrixTimeline.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/tracing/TracingConfiguration.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/util/CallbackFlow.kt (100%) rename libraries/matrix/src/main/{java => kotlin}/io/element/android/x/matrix/util/Error.kt (100%) rename libraries/matrixui/src/main/{java => kotlin}/io/element/android/x/matrix/ui/MatrixItemHelper.kt (100%) rename libraries/matrixui/src/main/{java => kotlin}/io/element/android/x/matrix/ui/components/MatrixUserHeader.kt (100%) rename libraries/matrixui/src/main/{java => kotlin}/io/element/android/x/matrix/ui/components/MatrixUserRow.kt (100%) rename libraries/matrixui/src/main/{java => kotlin}/io/element/android/x/matrix/ui/di/MatrixUIBindings.kt (100%) rename libraries/matrixui/src/main/{java => kotlin}/io/element/android/x/matrix/ui/media/ImageLoaderFactories.kt (100%) rename libraries/matrixui/src/main/{java => kotlin}/io/element/android/x/matrix/ui/media/MediaFetcher.kt (100%) rename libraries/matrixui/src/main/{java => kotlin}/io/element/android/x/matrix/ui/media/MediaKeyer.kt (100%) rename libraries/matrixui/src/main/{java => kotlin}/io/element/android/x/matrix/ui/model/MatrixUser.kt (100%) rename libraries/textcomposer/src/main/{java => kotlin}/io/element/android/x/textcomposer/MessageComposerMode.kt (100%) rename libraries/textcomposer/src/main/{java => kotlin}/io/element/android/x/textcomposer/MessageComposerView.kt (100%) rename libraries/textcomposer/src/main/{java => kotlin}/io/element/android/x/textcomposer/RichTextComposerLayout.kt (100%) rename libraries/textcomposer/src/main/{java => kotlin}/io/element/android/x/textcomposer/TextComposer.kt (100%) rename libraries/textcomposer/src/main/{java => kotlin}/io/element/android/x/textcomposer/tools/EditTextExtensions.kt (100%) rename libraries/textcomposer/src/main/{java => kotlin}/io/element/android/x/textcomposer/tools/SimpleTransitionListener.kt (100%) rename libraries/textcomposer/src/main/{java => kotlin}/io/element/android/x/textcomposer/tools/ViewExtensions.kt (100%) rename plugins/src/main/{java => kotlin}/Versions.kt (100%) rename plugins/src/main/{java => kotlin}/extension/CommonExtension.kt (100%) rename plugins/src/main/{java => kotlin}/extension/DependencyHandleScope.kt (100%) rename plugins/src/main/{java => kotlin}/extension/VersionCatalog.kt (100%) rename plugins/src/main/{java => kotlin}/io.element.android-compose-application.gradle.kts (100%) rename plugins/src/main/{java => kotlin}/io.element.android-compose-library.gradle.kts (100%) rename plugins/src/main/{java => kotlin}/io.element.android-library.gradle.kts (100%) diff --git a/anvilannotations/src/main/java/io/element/android/x/anvilannotations/ContributesNode.kt b/anvilannotations/src/main/kotlin/io/element/android/x/anvilannotations/ContributesNode.kt similarity index 100% rename from anvilannotations/src/main/java/io/element/android/x/anvilannotations/ContributesNode.kt rename to anvilannotations/src/main/kotlin/io/element/android/x/anvilannotations/ContributesNode.kt diff --git a/anvilcodegen/src/main/java/io/element/android/x/anvilcodegen/ContributesNodeCodeGenerator.kt b/anvilcodegen/src/main/kotlin/io/element/android/x/anvilcodegen/ContributesNodeCodeGenerator.kt similarity index 100% rename from anvilcodegen/src/main/java/io/element/android/x/anvilcodegen/ContributesNodeCodeGenerator.kt rename to anvilcodegen/src/main/kotlin/io/element/android/x/anvilcodegen/ContributesNodeCodeGenerator.kt diff --git a/app/src/main/java/io/element/android/x/ElementRootModule.kt b/app/src/main/kotlin/io/element/android/x/ElementRootModule.kt similarity index 100% rename from app/src/main/java/io/element/android/x/ElementRootModule.kt rename to app/src/main/kotlin/io/element/android/x/ElementRootModule.kt diff --git a/app/src/main/java/io/element/android/x/ElementXApplication.kt b/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt similarity index 100% rename from app/src/main/java/io/element/android/x/ElementXApplication.kt rename to app/src/main/kotlin/io/element/android/x/ElementXApplication.kt diff --git a/app/src/main/java/io/element/android/x/MainActivity.kt b/app/src/main/kotlin/io/element/android/x/MainActivity.kt similarity index 100% rename from app/src/main/java/io/element/android/x/MainActivity.kt rename to app/src/main/kotlin/io/element/android/x/MainActivity.kt diff --git a/app/src/main/java/io/element/android/x/component/ShowkaseButton.kt b/app/src/main/kotlin/io/element/android/x/component/ShowkaseButton.kt similarity index 100% rename from app/src/main/java/io/element/android/x/component/ShowkaseButton.kt rename to app/src/main/kotlin/io/element/android/x/component/ShowkaseButton.kt diff --git a/app/src/main/java/io/element/android/x/di/AppBindings.kt b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt similarity index 100% rename from app/src/main/java/io/element/android/x/di/AppBindings.kt rename to app/src/main/kotlin/io/element/android/x/di/AppBindings.kt diff --git a/app/src/main/java/io/element/android/x/di/AppComponent.kt b/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt similarity index 100% rename from app/src/main/java/io/element/android/x/di/AppComponent.kt rename to app/src/main/kotlin/io/element/android/x/di/AppComponent.kt diff --git a/app/src/main/java/io/element/android/x/di/AppModule.kt b/app/src/main/kotlin/io/element/android/x/di/AppModule.kt similarity index 100% rename from app/src/main/java/io/element/android/x/di/AppModule.kt rename to app/src/main/kotlin/io/element/android/x/di/AppModule.kt diff --git a/app/src/main/java/io/element/android/x/di/RoomComponent.kt b/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt similarity index 100% rename from app/src/main/java/io/element/android/x/di/RoomComponent.kt rename to app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt diff --git a/app/src/main/java/io/element/android/x/di/SessionComponent.kt b/app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt similarity index 100% rename from app/src/main/java/io/element/android/x/di/SessionComponent.kt rename to app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt diff --git a/app/src/main/java/io/element/android/x/initializer/CrashInitializer.kt b/app/src/main/kotlin/io/element/android/x/initializer/CrashInitializer.kt similarity index 100% rename from app/src/main/java/io/element/android/x/initializer/CrashInitializer.kt rename to app/src/main/kotlin/io/element/android/x/initializer/CrashInitializer.kt diff --git a/app/src/main/java/io/element/android/x/initializer/MatrixInitializer.kt b/app/src/main/kotlin/io/element/android/x/initializer/MatrixInitializer.kt similarity index 100% rename from app/src/main/java/io/element/android/x/initializer/MatrixInitializer.kt rename to app/src/main/kotlin/io/element/android/x/initializer/MatrixInitializer.kt diff --git a/app/src/main/java/io/element/android/x/initializer/TimberInitializer.kt b/app/src/main/kotlin/io/element/android/x/initializer/TimberInitializer.kt similarity index 100% rename from app/src/main/java/io/element/android/x/initializer/TimberInitializer.kt rename to app/src/main/kotlin/io/element/android/x/initializer/TimberInitializer.kt diff --git a/app/src/main/java/io/element/android/x/node/LoggedInFlowNode.kt b/app/src/main/kotlin/io/element/android/x/node/LoggedInFlowNode.kt similarity index 100% rename from app/src/main/java/io/element/android/x/node/LoggedInFlowNode.kt rename to app/src/main/kotlin/io/element/android/x/node/LoggedInFlowNode.kt diff --git a/app/src/main/java/io/element/android/x/node/NotLoggedInFlowNode.kt b/app/src/main/kotlin/io/element/android/x/node/NotLoggedInFlowNode.kt similarity index 100% rename from app/src/main/java/io/element/android/x/node/NotLoggedInFlowNode.kt rename to app/src/main/kotlin/io/element/android/x/node/NotLoggedInFlowNode.kt diff --git a/app/src/main/java/io/element/android/x/node/RoomFlowNode.kt b/app/src/main/kotlin/io/element/android/x/node/RoomFlowNode.kt similarity index 100% rename from app/src/main/java/io/element/android/x/node/RoomFlowNode.kt rename to app/src/main/kotlin/io/element/android/x/node/RoomFlowNode.kt diff --git a/app/src/main/java/io/element/android/x/node/RootFlowNode.kt b/app/src/main/kotlin/io/element/android/x/node/RootFlowNode.kt similarity index 100% rename from app/src/main/java/io/element/android/x/node/RootFlowNode.kt rename to app/src/main/kotlin/io/element/android/x/node/RootFlowNode.kt diff --git a/app/src/main/java/io/element/android/x/root/RootEvents.kt b/app/src/main/kotlin/io/element/android/x/root/RootEvents.kt similarity index 100% rename from app/src/main/java/io/element/android/x/root/RootEvents.kt rename to app/src/main/kotlin/io/element/android/x/root/RootEvents.kt diff --git a/app/src/main/java/io/element/android/x/root/RootPresenter.kt b/app/src/main/kotlin/io/element/android/x/root/RootPresenter.kt similarity index 100% rename from app/src/main/java/io/element/android/x/root/RootPresenter.kt rename to app/src/main/kotlin/io/element/android/x/root/RootPresenter.kt diff --git a/app/src/main/java/io/element/android/x/root/RootState.kt b/app/src/main/kotlin/io/element/android/x/root/RootState.kt similarity index 100% rename from app/src/main/java/io/element/android/x/root/RootState.kt rename to app/src/main/kotlin/io/element/android/x/root/RootState.kt diff --git a/app/src/main/java/io/element/android/x/root/RootView.kt b/app/src/main/kotlin/io/element/android/x/root/RootView.kt similarity index 100% rename from app/src/main/java/io/element/android/x/root/RootView.kt rename to app/src/main/kotlin/io/element/android/x/root/RootView.kt diff --git a/features/login/src/androidTest/java/io/element/android/x/features/login/ExampleInstrumentedTest.kt b/features/login/src/androidTest/kotlin/io/element/android/x/features/login/ExampleInstrumentedTest.kt similarity index 100% rename from features/login/src/androidTest/java/io/element/android/x/features/login/ExampleInstrumentedTest.kt rename to features/login/src/androidTest/kotlin/io/element/android/x/features/login/ExampleInstrumentedTest.kt diff --git a/features/login/src/main/java/io/element/android/x/features/login/LoginFlowNode.kt b/features/login/src/main/kotlin/io/element/android/x/features/login/LoginFlowNode.kt similarity index 100% rename from features/login/src/main/java/io/element/android/x/features/login/LoginFlowNode.kt rename to features/login/src/main/kotlin/io/element/android/x/features/login/LoginFlowNode.kt diff --git a/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerEvents.kt b/features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerEvents.kt similarity index 100% rename from features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerEvents.kt rename to features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerEvents.kt diff --git a/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerNode.kt b/features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerNode.kt similarity index 100% rename from features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerNode.kt rename to features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerNode.kt diff --git a/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerPresenter.kt b/features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerPresenter.kt similarity index 100% rename from features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerPresenter.kt rename to features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerPresenter.kt diff --git a/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerState.kt b/features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerState.kt similarity index 100% rename from features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerState.kt rename to features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerState.kt diff --git a/features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerView.kt b/features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerView.kt similarity index 100% rename from features/login/src/main/java/io/element/android/x/features/login/changeserver/ChangeServerView.kt rename to features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerView.kt diff --git a/features/login/src/main/java/io/element/android/x/features/login/error/ErrorFormatter.kt b/features/login/src/main/kotlin/io/element/android/x/features/login/error/ErrorFormatter.kt similarity index 100% rename from features/login/src/main/java/io/element/android/x/features/login/error/ErrorFormatter.kt rename to features/login/src/main/kotlin/io/element/android/x/features/login/error/ErrorFormatter.kt diff --git a/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootEvents.kt b/features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootEvents.kt similarity index 100% rename from features/login/src/main/java/io/element/android/x/features/login/root/LoginRootEvents.kt rename to features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootEvents.kt diff --git a/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootNode.kt b/features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootNode.kt similarity index 100% rename from features/login/src/main/java/io/element/android/x/features/login/root/LoginRootNode.kt rename to features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootNode.kt diff --git a/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootPresenter.kt b/features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootPresenter.kt similarity index 100% rename from features/login/src/main/java/io/element/android/x/features/login/root/LoginRootPresenter.kt rename to features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootPresenter.kt diff --git a/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt b/features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootScreen.kt similarity index 100% rename from features/login/src/main/java/io/element/android/x/features/login/root/LoginRootScreen.kt rename to features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootScreen.kt diff --git a/features/login/src/main/java/io/element/android/x/features/login/root/LoginRootState.kt b/features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootState.kt similarity index 100% rename from features/login/src/main/java/io/element/android/x/features/login/root/LoginRootState.kt rename to features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootState.kt diff --git a/features/login/src/test/java/io/element/android/x/features/login/ExampleUnitTest.kt b/features/login/src/test/kotlin/io/element/android/x/features/login/ExampleUnitTest.kt similarity index 100% rename from features/login/src/test/java/io/element/android/x/features/login/ExampleUnitTest.kt rename to features/login/src/test/kotlin/io/element/android/x/features/login/ExampleUnitTest.kt diff --git a/features/logout/src/androidTest/java/io/element/android/x/features/logout/ExampleInstrumentedTest.kt b/features/logout/src/androidTest/kotlin/io/element/android/x/features/logout/ExampleInstrumentedTest.kt similarity index 100% rename from features/logout/src/androidTest/java/io/element/android/x/features/logout/ExampleInstrumentedTest.kt rename to features/logout/src/androidTest/kotlin/io/element/android/x/features/logout/ExampleInstrumentedTest.kt diff --git a/features/logout/src/main/java/io/element/android/x/features/logout/LogoutPreferenceEvents.kt b/features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferenceEvents.kt similarity index 100% rename from features/logout/src/main/java/io/element/android/x/features/logout/LogoutPreferenceEvents.kt rename to features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferenceEvents.kt diff --git a/features/logout/src/main/java/io/element/android/x/features/logout/LogoutPreferencePresenter.kt b/features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferencePresenter.kt similarity index 100% rename from features/logout/src/main/java/io/element/android/x/features/logout/LogoutPreferencePresenter.kt rename to features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferencePresenter.kt diff --git a/features/logout/src/main/java/io/element/android/x/features/logout/LogoutPreferenceScreen.kt b/features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferenceScreen.kt similarity index 100% rename from features/logout/src/main/java/io/element/android/x/features/logout/LogoutPreferenceScreen.kt rename to features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferenceScreen.kt diff --git a/features/logout/src/main/java/io/element/android/x/features/logout/LogoutPreferenceState.kt b/features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferenceState.kt similarity index 100% rename from features/logout/src/main/java/io/element/android/x/features/logout/LogoutPreferenceState.kt rename to features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferenceState.kt diff --git a/features/logout/src/test/java/io/element/android/x/features/logout/ExampleUnitTest.kt b/features/logout/src/test/kotlin/io/element/android/x/features/logout/ExampleUnitTest.kt similarity index 100% rename from features/logout/src/test/java/io/element/android/x/features/logout/ExampleUnitTest.kt rename to features/logout/src/test/kotlin/io/element/android/x/features/logout/ExampleUnitTest.kt diff --git a/features/messages/src/androidTest/java/io/element/android/x/features/messages/ExampleInstrumentedTest.kt b/features/messages/src/androidTest/kotlin/io/element/android/x/features/messages/ExampleInstrumentedTest.kt similarity index 100% rename from features/messages/src/androidTest/java/io/element/android/x/features/messages/ExampleInstrumentedTest.kt rename to features/messages/src/androidTest/kotlin/io/element/android/x/features/messages/ExampleInstrumentedTest.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesEvents.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesEvents.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/MessagesEvents.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesEvents.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesNode.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesNode.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/MessagesNode.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesNode.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesPresenter.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesPresenter.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/MessagesPresenter.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesPresenter.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesState.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesState.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/MessagesState.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesState.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesView.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesView.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/MessagesView.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesView.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/actionlist/ActionListEvents.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListEvents.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/actionlist/ActionListEvents.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListEvents.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/actionlist/ActionListPresenter.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListPresenter.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/actionlist/ActionListPresenter.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListPresenter.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/actionlist/ActionListState.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListState.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/actionlist/ActionListState.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListState.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/actionlist/ActionListView.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListView.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/actionlist/ActionListView.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListView.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/actionlist/model/TimelineItemAction.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/model/TimelineItemAction.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/actionlist/model/TimelineItemAction.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/model/TimelineItemAction.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/textcomposer/MessageComposerEvents.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerEvents.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/textcomposer/MessageComposerEvents.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerEvents.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/textcomposer/MessageComposerPresenter.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerPresenter.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/textcomposer/MessageComposerPresenter.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerPresenter.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/textcomposer/MessageComposerState.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerState.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/textcomposer/MessageComposerState.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerState.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/textcomposer/MessageComposerView.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerView.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/textcomposer/MessageComposerView.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerView.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/TimelineEvents.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineEvents.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/TimelineEvents.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineEvents.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/TimelineItemsFactory.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineItemsFactory.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/TimelineItemsFactory.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineItemsFactory.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/TimelinePresenter.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelinePresenter.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/TimelinePresenter.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelinePresenter.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/TimelineState.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineState.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/TimelineState.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineState.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/TimelineView.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineView.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/TimelineView.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineView.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/MessageEventBubble.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/MessageEventBubble.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/MessageEventBubble.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/MessageEventBubble.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/TimelineItemEncryptedView.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemEncryptedView.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/TimelineItemEncryptedView.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemEncryptedView.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/TimelineItemImageView.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemImageView.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/TimelineItemImageView.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemImageView.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/TimelineItemInformativeView.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemInformativeView.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/TimelineItemInformativeView.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemInformativeView.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/TimelineItemReactionsView.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemReactionsView.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/TimelineItemReactionsView.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemReactionsView.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/TimelineItemRedactedView.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemRedactedView.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/TimelineItemRedactedView.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemRedactedView.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/TimelineItemTextView.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemTextView.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/TimelineItemTextView.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemTextView.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/TimelineItemUnknownView.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemUnknownView.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/TimelineItemUnknownView.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemUnknownView.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/html/HtmlDocument.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/html/HtmlDocument.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/components/html/HtmlDocument.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/html/HtmlDocument.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/diff/CacheInvalidator.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/diff/CacheInvalidator.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/diff/CacheInvalidator.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/diff/CacheInvalidator.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/diff/MatrixTimelineItemsDiffCallback.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/diff/MatrixTimelineItemsDiffCallback.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/diff/MatrixTimelineItemsDiffCallback.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/diff/MatrixTimelineItemsDiffCallback.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/TimelineItem.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/TimelineItem.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/TimelineItem.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/TimelineItem.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/TimelineItemGroupPosition.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/TimelineItemGroupPosition.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/TimelineItemGroupPosition.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/TimelineItemGroupPosition.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/TimelineItemReactions.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/TimelineItemReactions.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/TimelineItemReactions.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/TimelineItemReactions.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemContent.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemContent.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemContent.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemContent.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemEmoteContent.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemEmoteContent.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemEmoteContent.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemEmoteContent.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemEncryptedContent.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemEncryptedContent.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemEncryptedContent.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemEncryptedContent.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemImageContent.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemImageContent.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemImageContent.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemImageContent.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemNoticeContent.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemNoticeContent.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemNoticeContent.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemNoticeContent.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemRedactedContent.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemRedactedContent.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemRedactedContent.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemRedactedContent.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextBasedContent.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextBasedContent.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextBasedContent.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextBasedContent.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextContent.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextContent.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextContent.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextContent.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemUnknownContent.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemUnknownContent.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/model/content/TimelineItemUnknownContent.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemUnknownContent.kt diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/timeline/util/MutableListExt.kt b/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/util/MutableListExt.kt similarity index 100% rename from features/messages/src/main/java/io/element/android/x/features/messages/timeline/util/MutableListExt.kt rename to features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/util/MutableListExt.kt diff --git a/features/messages/src/test/java/io/element/android/x/features/messages/ExampleUnitTest.kt b/features/messages/src/test/kotlin/io/element/android/x/features/messages/ExampleUnitTest.kt similarity index 100% rename from features/messages/src/test/java/io/element/android/x/features/messages/ExampleUnitTest.kt rename to features/messages/src/test/kotlin/io/element/android/x/features/messages/ExampleUnitTest.kt diff --git a/features/onboarding/src/androidTest/java/io/element/android/x/features/login/ExampleInstrumentedTest.kt b/features/onboarding/src/androidTest/kotlin/io/element/android/x/features/login/ExampleInstrumentedTest.kt similarity index 100% rename from features/onboarding/src/androidTest/java/io/element/android/x/features/login/ExampleInstrumentedTest.kt rename to features/onboarding/src/androidTest/kotlin/io/element/android/x/features/login/ExampleInstrumentedTest.kt diff --git a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt b/features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/OnBoardingScreen.kt similarity index 100% rename from features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt rename to features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/OnBoardingScreen.kt diff --git a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/SplashCarouselState.kt b/features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/SplashCarouselState.kt similarity index 100% rename from features/onboarding/src/main/java/io/element/android/x/features/onboarding/SplashCarouselState.kt rename to features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/SplashCarouselState.kt diff --git a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/SplashCarouselStateFactory.kt b/features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/SplashCarouselStateFactory.kt similarity index 100% rename from features/onboarding/src/main/java/io/element/android/x/features/onboarding/SplashCarouselStateFactory.kt rename to features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/SplashCarouselStateFactory.kt diff --git a/features/onboarding/src/test/java/io/element/android/x/features/login/ExampleUnitTest.kt b/features/onboarding/src/test/kotlin/io/element/android/x/features/login/ExampleUnitTest.kt similarity index 100% rename from features/onboarding/src/test/java/io/element/android/x/features/login/ExampleUnitTest.kt rename to features/onboarding/src/test/kotlin/io/element/android/x/features/login/ExampleUnitTest.kt diff --git a/features/preferences/src/androidTest/java/io/element/android/x/features/preferences/ExampleInstrumentedTest.kt b/features/preferences/src/androidTest/kotlin/io/element/android/x/features/preferences/ExampleInstrumentedTest.kt similarity index 100% rename from features/preferences/src/androidTest/java/io/element/android/x/features/preferences/ExampleInstrumentedTest.kt rename to features/preferences/src/androidTest/kotlin/io/element/android/x/features/preferences/ExampleInstrumentedTest.kt diff --git a/features/preferences/src/main/java/io/element/android/x/features/preferences/PreferencesFlowNode.kt b/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/PreferencesFlowNode.kt similarity index 100% rename from features/preferences/src/main/java/io/element/android/x/features/preferences/PreferencesFlowNode.kt rename to features/preferences/src/main/kotlin/io/element/android/x/features/preferences/PreferencesFlowNode.kt diff --git a/features/preferences/src/main/java/io/element/android/x/features/preferences/root/PreferencesRootNode.kt b/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootNode.kt similarity index 100% rename from features/preferences/src/main/java/io/element/android/x/features/preferences/root/PreferencesRootNode.kt rename to features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootNode.kt diff --git a/features/preferences/src/main/java/io/element/android/x/features/preferences/root/PreferencesRootPresenter.kt b/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootPresenter.kt similarity index 100% rename from features/preferences/src/main/java/io/element/android/x/features/preferences/root/PreferencesRootPresenter.kt rename to features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootPresenter.kt diff --git a/features/preferences/src/main/java/io/element/android/x/features/preferences/root/PreferencesRootState.kt b/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootState.kt similarity index 100% rename from features/preferences/src/main/java/io/element/android/x/features/preferences/root/PreferencesRootState.kt rename to features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootState.kt diff --git a/features/preferences/src/main/java/io/element/android/x/features/preferences/root/PreferencesRootView.kt b/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootView.kt similarity index 100% rename from features/preferences/src/main/java/io/element/android/x/features/preferences/root/PreferencesRootView.kt rename to features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootView.kt diff --git a/features/preferences/src/main/java/io/element/android/x/features/preferences/user/UserPreferences.kt b/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/user/UserPreferences.kt similarity index 100% rename from features/preferences/src/main/java/io/element/android/x/features/preferences/user/UserPreferences.kt rename to features/preferences/src/main/kotlin/io/element/android/x/features/preferences/user/UserPreferences.kt diff --git a/features/preferences/src/test/java/io/element/android/x/features/preferences/ExampleUnitTest.kt b/features/preferences/src/test/kotlin/io/element/android/x/features/preferences/ExampleUnitTest.kt similarity index 100% rename from features/preferences/src/test/java/io/element/android/x/features/preferences/ExampleUnitTest.kt rename to features/preferences/src/test/kotlin/io/element/android/x/features/preferences/ExampleUnitTest.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/bugreport/BugReportEvents.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportEvents.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/bugreport/BugReportEvents.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportEvents.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/bugreport/BugReportNode.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportNode.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/bugreport/BugReportNode.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportNode.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/bugreport/BugReportPresenter.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportPresenter.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/bugreport/BugReportPresenter.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportPresenter.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/bugreport/BugReportState.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportState.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/bugreport/BugReportState.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportState.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/bugreport/BugReportView.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportView.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/bugreport/BugReportView.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportView.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/CrashDataStore.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/CrashDataStore.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/CrashDataStore.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/CrashDataStore.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/VectorUncaughtExceptionHandler.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/VectorUncaughtExceptionHandler.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/VectorUncaughtExceptionHandler.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/VectorUncaughtExceptionHandler.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/ui/CrashDetectionEvents.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionEvents.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/ui/CrashDetectionEvents.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionEvents.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/ui/CrashDetectionPresenter.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionPresenter.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/ui/CrashDetectionPresenter.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionPresenter.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/ui/CrashDetectionScreen.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionScreen.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/ui/CrashDetectionScreen.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionScreen.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/ui/CrashDetectionState.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionState.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/crash/ui/CrashDetectionState.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionState.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/detection/RageshakeDetectionEvents.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionEvents.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/detection/RageshakeDetectionEvents.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionEvents.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/detection/RageshakeDetectionPresenter.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionPresenter.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/detection/RageshakeDetectionPresenter.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionPresenter.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/detection/RageshakeDetectionState.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionState.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/detection/RageshakeDetectionState.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionState.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/detection/RageshakeDetectionView.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionView.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/detection/RageshakeDetectionView.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionView.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/logs/LogFormatter.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/logs/LogFormatter.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/logs/LogFormatter.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/logs/LogFormatter.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/logs/VectorFileLogger.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/logs/VectorFileLogger.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/logs/VectorFileLogger.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/logs/VectorFileLogger.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/preferences/RageshakePreferencesEvents.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesEvents.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/preferences/RageshakePreferencesEvents.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesEvents.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/preferences/RageshakePreferencesPresenter.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesPresenter.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/preferences/RageshakePreferencesPresenter.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesPresenter.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/preferences/RageshakePreferencesState.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesState.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/preferences/RageshakePreferencesState.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesState.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/preferences/RageshakePreferencesView.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesView.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/preferences/RageshakePreferencesView.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesView.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/rageshake/RageShake.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/rageshake/RageShake.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/rageshake/RageShake.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/rageshake/RageShake.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/rageshake/RageshakeDataStore.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/rageshake/RageshakeDataStore.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/rageshake/RageshakeDataStore.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/rageshake/RageshakeDataStore.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/reporter/BugReporter.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/reporter/BugReporter.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/reporter/BugReporter.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/reporter/BugReporter.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/reporter/BugReporterMultipartBody.java b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/reporter/BugReporterMultipartBody.java similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/reporter/BugReporterMultipartBody.java rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/reporter/BugReporterMultipartBody.java diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/reporter/ReportType.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/reporter/ReportType.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/reporter/ReportType.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/reporter/ReportType.kt diff --git a/features/rageshake/src/main/java/io/element/android/x/features/rageshake/screenshot/ScreenshotHolder.kt b/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/screenshot/ScreenshotHolder.kt similarity index 100% rename from features/rageshake/src/main/java/io/element/android/x/features/rageshake/screenshot/ScreenshotHolder.kt rename to features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/screenshot/ScreenshotHolder.kt diff --git a/features/rageshake/src/test/java/io/element/android/x/features/login/ExampleUnitTest.kt b/features/rageshake/src/test/kotlin/io/element/android/x/features/login/ExampleUnitTest.kt similarity index 100% rename from features/rageshake/src/test/java/io/element/android/x/features/login/ExampleUnitTest.kt rename to features/rageshake/src/test/kotlin/io/element/android/x/features/login/ExampleUnitTest.kt diff --git a/features/roomlist/src/androidTest/java/io/element/android/x/features/roomlist/ExampleInstrumentedTest.kt b/features/roomlist/src/androidTest/kotlin/io/element/android/x/features/roomlist/ExampleInstrumentedTest.kt similarity index 100% rename from features/roomlist/src/androidTest/java/io/element/android/x/features/roomlist/ExampleInstrumentedTest.kt rename to features/roomlist/src/androidTest/kotlin/io/element/android/x/features/roomlist/ExampleInstrumentedTest.kt diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/LastMessageFormatter.kt b/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/LastMessageFormatter.kt similarity index 100% rename from features/roomlist/src/main/java/io/element/android/x/features/roomlist/LastMessageFormatter.kt rename to features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/LastMessageFormatter.kt diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListNode.kt b/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/RoomListNode.kt similarity index 100% rename from features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListNode.kt rename to features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/RoomListNode.kt diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListPresenter.kt b/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/RoomListPresenter.kt similarity index 100% rename from features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListPresenter.kt rename to features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/RoomListPresenter.kt diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListView.kt b/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/RoomListView.kt similarity index 100% rename from features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListView.kt rename to features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/RoomListView.kt diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomListTopBar.kt b/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/components/RoomListTopBar.kt similarity index 100% rename from features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomListTopBar.kt rename to features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/components/RoomListTopBar.kt diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomSummaryRow.kt b/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/components/RoomSummaryRow.kt similarity index 100% rename from features/roomlist/src/main/java/io/element/android/x/features/roomlist/components/RoomSummaryRow.kt rename to features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/components/RoomSummaryRow.kt diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListEvents.kt b/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListEvents.kt similarity index 100% rename from features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListEvents.kt rename to features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListEvents.kt diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListRoomSummary.kt b/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListRoomSummary.kt similarity index 100% rename from features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListRoomSummary.kt rename to features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListRoomSummary.kt diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt b/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt similarity index 100% rename from features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt rename to features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListState.kt b/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListState.kt similarity index 100% rename from features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListState.kt rename to features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListState.kt diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/stubbed.kt b/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/stubbed.kt similarity index 100% rename from features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/stubbed.kt rename to features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/stubbed.kt diff --git a/features/roomlist/src/test/java/io/element/android/x/features/roomlist/ExampleUnitTest.kt b/features/roomlist/src/test/kotlin/io/element/android/x/features/roomlist/ExampleUnitTest.kt similarity index 100% rename from features/roomlist/src/test/java/io/element/android/x/features/roomlist/ExampleUnitTest.kt rename to features/roomlist/src/test/kotlin/io/element/android/x/features/roomlist/ExampleUnitTest.kt diff --git a/libraries/architecture/src/main/java/io/element/android/x/architecture/AssistedNodeFactory.kt b/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/AssistedNodeFactory.kt similarity index 100% rename from libraries/architecture/src/main/java/io/element/android/x/architecture/AssistedNodeFactory.kt rename to libraries/architecture/src/main/kotlin/io/element/android/x/architecture/AssistedNodeFactory.kt diff --git a/libraries/architecture/src/main/java/io/element/android/x/architecture/Async.kt b/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/Async.kt similarity index 100% rename from libraries/architecture/src/main/java/io/element/android/x/architecture/Async.kt rename to libraries/architecture/src/main/kotlin/io/element/android/x/architecture/Async.kt diff --git a/libraries/architecture/src/main/java/io/element/android/x/architecture/Bindings.kt b/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/Bindings.kt similarity index 100% rename from libraries/architecture/src/main/java/io/element/android/x/architecture/Bindings.kt rename to libraries/architecture/src/main/kotlin/io/element/android/x/architecture/Bindings.kt diff --git a/libraries/architecture/src/main/java/io/element/android/x/architecture/NodeFactories.kt b/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/NodeFactories.kt similarity index 100% rename from libraries/architecture/src/main/java/io/element/android/x/architecture/NodeFactories.kt rename to libraries/architecture/src/main/kotlin/io/element/android/x/architecture/NodeFactories.kt diff --git a/libraries/architecture/src/main/java/io/element/android/x/architecture/NodeKey.kt b/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/NodeKey.kt similarity index 100% rename from libraries/architecture/src/main/java/io/element/android/x/architecture/NodeKey.kt rename to libraries/architecture/src/main/kotlin/io/element/android/x/architecture/NodeKey.kt diff --git a/libraries/architecture/src/main/java/io/element/android/x/architecture/Presenter.kt b/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/Presenter.kt similarity index 100% rename from libraries/architecture/src/main/java/io/element/android/x/architecture/Presenter.kt rename to libraries/architecture/src/main/kotlin/io/element/android/x/architecture/Presenter.kt diff --git a/libraries/architecture/src/main/java/io/element/android/x/architecture/PresenterConnector.kt b/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/PresenterConnector.kt similarity index 100% rename from libraries/architecture/src/main/java/io/element/android/x/architecture/PresenterConnector.kt rename to libraries/architecture/src/main/kotlin/io/element/android/x/architecture/PresenterConnector.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/bitmap/Bitmap.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/bitmap/Bitmap.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/bitmap/Bitmap.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/bitmap/Bitmap.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/bool/Booleans.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/bool/Booleans.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/bool/Booleans.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/bool/Booleans.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/compose/Keyboard.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/compose/Keyboard.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/compose/Keyboard.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/compose/Keyboard.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/compose/LogCompositions.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/compose/LogCompositions.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/compose/LogCompositions.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/compose/LogCompositions.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/compose/OnLifecycleEvent.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/compose/OnLifecycleEvent.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/compose/OnLifecycleEvent.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/compose/OnLifecycleEvent.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/compose/PairCombinedPreviewParameter.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/compose/PairCombinedPreviewParameter.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/compose/PairCombinedPreviewParameter.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/compose/PairCombinedPreviewParameter.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/compose/TextFieldLocalState.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/compose/TextFieldLocalState.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/compose/TextFieldLocalState.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/compose/TextFieldLocalState.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/coroutine/CoroutineDispatchers.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/coroutine/CoroutineDispatchers.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/coroutine/CoroutineDispatchers.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/coroutine/CoroutineDispatchers.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/coroutine/TimingOperators.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/coroutine/TimingOperators.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/coroutine/TimingOperators.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/coroutine/TimingOperators.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/coroutine/pmap.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/coroutine/pmap.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/coroutine/pmap.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/coroutine/pmap.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/data/StableCharSequence.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/data/StableCharSequence.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/data/StableCharSequence.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/data/StableCharSequence.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/data/Try.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/data/Try.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/data/Try.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/data/Try.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/di/DaggerComponentOwner.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/di/DaggerComponentOwner.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/di/DaggerComponentOwner.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/di/DaggerComponentOwner.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/extensions/BasicExtensions.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/extensions/BasicExtensions.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/extensions/BasicExtensions.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/extensions/BasicExtensions.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/file/compressFile.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/file/compressFile.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/file/compressFile.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/file/compressFile.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/hardware/vibrator.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/hardware/vibrator.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/hardware/vibrator.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/hardware/vibrator.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/mimetype/MimeTypes.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/mimetype/MimeTypes.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/mimetype/MimeTypes.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/mimetype/MimeTypes.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/screenshot/Screenshot.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/screenshot/Screenshot.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/screenshot/Screenshot.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/screenshot/Screenshot.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/ui/DimensionConverter.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/ui/DimensionConverter.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/ui/DimensionConverter.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/ui/DimensionConverter.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/ui/View.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/ui/View.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/ui/View.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/ui/View.kt diff --git a/libraries/core/src/main/java/io/element/android/x/core/uri/UrlUtils.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/uri/UrlUtils.kt similarity index 100% rename from libraries/core/src/main/java/io/element/android/x/core/uri/UrlUtils.kt rename to libraries/core/src/main/kotlin/io/element/android/x/core/uri/UrlUtils.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/Color.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/Color.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/Color.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/Color.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/ColorUtil.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/ColorUtil.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/ColorUtil.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/ColorUtil.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/Theme.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/Theme.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/Theme.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/Theme.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/Type.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/Type.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/Type.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/Type.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/VectorIcons.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/VectorIcons.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/VectorIcons.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/VectorIcons.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/ClickableLinkText.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/ClickableLinkText.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/ClickableLinkText.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/ClickableLinkText.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/LabelledCheckbox.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/LabelledCheckbox.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/LabelledCheckbox.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/LabelledCheckbox.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/ProgressDialog.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/ProgressDialog.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/ProgressDialog.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/ProgressDialog.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/VectorButton.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/VectorButton.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/VectorButton.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/VectorButton.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/VectorIcon.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/VectorIcon.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/VectorIcon.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/VectorIcon.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/avatar/Avatar.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/avatar/Avatar.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/avatar/Avatar.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/avatar/Avatar.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/avatar/AvatarData.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/avatar/AvatarData.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/avatar/AvatarData.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/avatar/AvatarData.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/avatar/AvatarSize.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/avatar/AvatarSize.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/avatar/AvatarSize.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/avatar/AvatarSize.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ErrorDialog.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/dialogs/ErrorDialog.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/dialogs/ErrorDialog.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/dialogs/ErrorDialog.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/preferences/Config.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/Config.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/preferences/Config.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/Config.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/preferences/PreferenceCategory.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceCategory.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/preferences/PreferenceCategory.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceCategory.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/preferences/PreferenceScreen.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceScreen.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/preferences/PreferenceScreen.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceScreen.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/preferences/PreferenceSlide.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceSlide.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/preferences/PreferenceSlide.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceSlide.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/preferences/PreferenceSwitch.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceSwitch.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/preferences/PreferenceSwitch.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceSwitch.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/preferences/PreferenceText.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceText.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/preferences/PreferenceText.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceText.kt diff --git a/libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/preferences/components/PreferenceIcon.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/components/PreferenceIcon.kt similarity index 100% rename from libraries/designsystem/src/main/java/io/element/android/x/designsystem/components/preferences/components/PreferenceIcon.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/components/PreferenceIcon.kt diff --git a/libraries/di/src/main/java/io/element/android/x/di/AppScope.kt b/libraries/di/src/main/kotlin/io/element/android/x/di/AppScope.kt similarity index 100% rename from libraries/di/src/main/java/io/element/android/x/di/AppScope.kt rename to libraries/di/src/main/kotlin/io/element/android/x/di/AppScope.kt diff --git a/libraries/di/src/main/java/io/element/android/x/di/ApplicationContext.kt b/libraries/di/src/main/kotlin/io/element/android/x/di/ApplicationContext.kt similarity index 100% rename from libraries/di/src/main/java/io/element/android/x/di/ApplicationContext.kt rename to libraries/di/src/main/kotlin/io/element/android/x/di/ApplicationContext.kt diff --git a/libraries/di/src/main/java/io/element/android/x/di/RoomScope.kt b/libraries/di/src/main/kotlin/io/element/android/x/di/RoomScope.kt similarity index 100% rename from libraries/di/src/main/java/io/element/android/x/di/RoomScope.kt rename to libraries/di/src/main/kotlin/io/element/android/x/di/RoomScope.kt diff --git a/libraries/di/src/main/java/io/element/android/x/di/SessionScope.kt b/libraries/di/src/main/kotlin/io/element/android/x/di/SessionScope.kt similarity index 100% rename from libraries/di/src/main/java/io/element/android/x/di/SessionScope.kt rename to libraries/di/src/main/kotlin/io/element/android/x/di/SessionScope.kt diff --git a/libraries/di/src/main/java/io/element/android/x/di/SingleIn.kt b/libraries/di/src/main/kotlin/io/element/android/x/di/SingleIn.kt similarity index 100% rename from libraries/di/src/main/java/io/element/android/x/di/SingleIn.kt rename to libraries/di/src/main/kotlin/io/element/android/x/di/SingleIn.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/LogTag.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/LogTag.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/LogTag.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/LogTag.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/Matrix.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/Matrix.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/Matrix.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/Matrix.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/MatrixClient.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/MatrixClient.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/MatrixClient.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/MatrixClient.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/RustMatrixClient.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/RustMatrixClient.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/RustMatrixClient.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/RustMatrixClient.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/core/EventId.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/EventId.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/core/EventId.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/EventId.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/core/MatrixPatterns.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/MatrixPatterns.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/core/MatrixPatterns.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/MatrixPatterns.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/core/RoomId.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/RoomId.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/core/RoomId.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/RoomId.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/core/SessionId.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/SessionId.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/core/SessionId.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/SessionId.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/core/UserId.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/UserId.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/core/UserId.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/UserId.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaResolver.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/media/MediaResolver.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaResolver.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/media/MediaResolver.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/permalink/MatrixToConverter.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/permalink/MatrixToConverter.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/permalink/MatrixToConverter.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/permalink/MatrixToConverter.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/permalink/PermalinkData.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/permalink/PermalinkData.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/permalink/PermalinkData.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/permalink/PermalinkData.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/permalink/PermalinkParser.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/permalink/PermalinkParser.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/permalink/PermalinkParser.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/permalink/PermalinkParser.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/MatrixRoom.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/MatrixRoom.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/room/MatrixRoom.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/MatrixRoom.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomListenerFlows.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomListenerFlows.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomListenerFlows.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomListenerFlows.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummary.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomSummary.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummary.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomSummary.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummaryDataSource.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomSummaryDataSource.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummaryDataSource.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomSummaryDataSource.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummaryDetailsFactory.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomSummaryDetailsFactory.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/room/RoomSummaryDetailsFactory.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomSummaryDetailsFactory.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/RustMatrixRoom.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RustMatrixRoom.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/room/RustMatrixRoom.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RustMatrixRoom.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/message/RoomMessage.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/message/RoomMessage.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/room/message/RoomMessage.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/message/RoomMessage.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/room/message/RoomMessageFactory.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/message/RoomMessageFactory.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/room/message/RoomMessageFactory.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/message/RoomMessageFactory.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/session/Session.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/session/Session.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/session/Session.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/session/Session.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/session/SessionStore.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/session/SessionStore.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/session/SessionStore.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/session/SessionStore.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/sync/SlidingSyncObserverProxy.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/sync/SlidingSyncObserverProxy.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/sync/SlidingSyncObserverProxy.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/sync/SlidingSyncObserverProxy.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/sync/SlidingSyncViewFlows.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/sync/SlidingSyncViewFlows.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/sync/SlidingSyncViewFlows.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/sync/SlidingSyncViewFlows.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/timeline/MatrixTimeline.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/timeline/MatrixTimeline.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/timeline/MatrixTimeline.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/timeline/MatrixTimeline.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/timeline/MatrixTimelineItem.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/timeline/MatrixTimelineItem.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/timeline/MatrixTimelineItem.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/timeline/MatrixTimelineItem.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/timeline/RustMatrixTimeline.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/timeline/RustMatrixTimeline.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/timeline/RustMatrixTimeline.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/timeline/RustMatrixTimeline.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/tracing/TracingConfiguration.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/tracing/TracingConfiguration.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/tracing/TracingConfiguration.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/tracing/TracingConfiguration.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/util/CallbackFlow.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/util/CallbackFlow.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/util/CallbackFlow.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/util/CallbackFlow.kt diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/util/Error.kt b/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/util/Error.kt similarity index 100% rename from libraries/matrix/src/main/java/io/element/android/x/matrix/util/Error.kt rename to libraries/matrix/src/main/kotlin/io/element/android/x/matrix/util/Error.kt diff --git a/libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/MatrixItemHelper.kt b/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/MatrixItemHelper.kt similarity index 100% rename from libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/MatrixItemHelper.kt rename to libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/MatrixItemHelper.kt diff --git a/libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/components/MatrixUserHeader.kt b/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/components/MatrixUserHeader.kt similarity index 100% rename from libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/components/MatrixUserHeader.kt rename to libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/components/MatrixUserHeader.kt diff --git a/libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/components/MatrixUserRow.kt b/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/components/MatrixUserRow.kt similarity index 100% rename from libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/components/MatrixUserRow.kt rename to libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/components/MatrixUserRow.kt diff --git a/libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/di/MatrixUIBindings.kt b/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/di/MatrixUIBindings.kt similarity index 100% rename from libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/di/MatrixUIBindings.kt rename to libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/di/MatrixUIBindings.kt diff --git a/libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/media/ImageLoaderFactories.kt b/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/media/ImageLoaderFactories.kt similarity index 100% rename from libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/media/ImageLoaderFactories.kt rename to libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/media/ImageLoaderFactories.kt diff --git a/libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/media/MediaFetcher.kt b/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/media/MediaFetcher.kt similarity index 100% rename from libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/media/MediaFetcher.kt rename to libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/media/MediaFetcher.kt diff --git a/libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/media/MediaKeyer.kt b/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/media/MediaKeyer.kt similarity index 100% rename from libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/media/MediaKeyer.kt rename to libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/media/MediaKeyer.kt diff --git a/libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/model/MatrixUser.kt b/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/model/MatrixUser.kt similarity index 100% rename from libraries/matrixui/src/main/java/io/element/android/x/matrix/ui/model/MatrixUser.kt rename to libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/model/MatrixUser.kt diff --git a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/MessageComposerMode.kt b/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/MessageComposerMode.kt similarity index 100% rename from libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/MessageComposerMode.kt rename to libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/MessageComposerMode.kt diff --git a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/MessageComposerView.kt b/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/MessageComposerView.kt similarity index 100% rename from libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/MessageComposerView.kt rename to libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/MessageComposerView.kt diff --git a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/RichTextComposerLayout.kt b/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/RichTextComposerLayout.kt similarity index 100% rename from libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/RichTextComposerLayout.kt rename to libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/RichTextComposerLayout.kt diff --git a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt b/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/TextComposer.kt similarity index 100% rename from libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/TextComposer.kt rename to libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/TextComposer.kt diff --git a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/tools/EditTextExtensions.kt b/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/tools/EditTextExtensions.kt similarity index 100% rename from libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/tools/EditTextExtensions.kt rename to libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/tools/EditTextExtensions.kt diff --git a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/tools/SimpleTransitionListener.kt b/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/tools/SimpleTransitionListener.kt similarity index 100% rename from libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/tools/SimpleTransitionListener.kt rename to libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/tools/SimpleTransitionListener.kt diff --git a/libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/tools/ViewExtensions.kt b/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/tools/ViewExtensions.kt similarity index 100% rename from libraries/textcomposer/src/main/java/io/element/android/x/textcomposer/tools/ViewExtensions.kt rename to libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/tools/ViewExtensions.kt diff --git a/plugins/src/main/java/Versions.kt b/plugins/src/main/kotlin/Versions.kt similarity index 100% rename from plugins/src/main/java/Versions.kt rename to plugins/src/main/kotlin/Versions.kt diff --git a/plugins/src/main/java/extension/CommonExtension.kt b/plugins/src/main/kotlin/extension/CommonExtension.kt similarity index 100% rename from plugins/src/main/java/extension/CommonExtension.kt rename to plugins/src/main/kotlin/extension/CommonExtension.kt diff --git a/plugins/src/main/java/extension/DependencyHandleScope.kt b/plugins/src/main/kotlin/extension/DependencyHandleScope.kt similarity index 100% rename from plugins/src/main/java/extension/DependencyHandleScope.kt rename to plugins/src/main/kotlin/extension/DependencyHandleScope.kt diff --git a/plugins/src/main/java/extension/VersionCatalog.kt b/plugins/src/main/kotlin/extension/VersionCatalog.kt similarity index 100% rename from plugins/src/main/java/extension/VersionCatalog.kt rename to plugins/src/main/kotlin/extension/VersionCatalog.kt diff --git a/plugins/src/main/java/io.element.android-compose-application.gradle.kts b/plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts similarity index 100% rename from plugins/src/main/java/io.element.android-compose-application.gradle.kts rename to plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts diff --git a/plugins/src/main/java/io.element.android-compose-library.gradle.kts b/plugins/src/main/kotlin/io.element.android-compose-library.gradle.kts similarity index 100% rename from plugins/src/main/java/io.element.android-compose-library.gradle.kts rename to plugins/src/main/kotlin/io.element.android-compose-library.gradle.kts diff --git a/plugins/src/main/java/io.element.android-library.gradle.kts b/plugins/src/main/kotlin/io.element.android-library.gradle.kts similarity index 100% rename from plugins/src/main/java/io.element.android-library.gradle.kts rename to plugins/src/main/kotlin/io.element.android-library.gradle.kts From e3860193e7df19a1d348399f45c284fc422bf2bc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Jan 2023 12:53:51 +0000 Subject: [PATCH 22/25] Bump jna from 5.12.1 to 5.13.0 Bumps [jna](https://github.com/java-native-access/jna) from 5.12.1 to 5.13.0. - [Release notes](https://github.com/java-native-access/jna/releases) - [Changelog](https://github.com/java-native-access/jna/blob/master/CHANGES.md) - [Commits](https://github.com/java-native-access/jna/compare/5.12.1...5.13.0) --- updated-dependencies: - dependency-name: net.java.dev.jna:jna dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- libraries/matrix/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/matrix/build.gradle.kts b/libraries/matrix/build.gradle.kts index baba67dfdd..60f02b180d 100644 --- a/libraries/matrix/build.gradle.kts +++ b/libraries/matrix/build.gradle.kts @@ -35,7 +35,7 @@ dependencies { implementation(project(":libraries:di")) implementation(libs.dagger) implementation(project(":libraries:core")) - implementation("net.java.dev.jna:jna:5.12.1@aar") + implementation("net.java.dev.jna:jna:5.13.0@aar") implementation(libs.androidx.datastore.preferences) implementation(libs.serialization.json) } From bd93e54543d1be05e5b24068da54184af20c29df Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 18 Jan 2023 14:38:19 +0100 Subject: [PATCH 23/25] Kotlin 1.8 + cleanup --- app/build.gradle.kts | 4 +--- gradle/libs.versions.toml | 19 +++++++------------ libraries/architecture/build.gradle.kts | 2 +- libraries/matrix/build.gradle.kts | 2 +- plugins/src/main/kotlin/Versions.kt | 4 ---- .../main/kotlin/extension/CommonExtension.kt | 2 +- .../kotlin/extension/DependencyHandleScope.kt | 3 +-- 7 files changed, 12 insertions(+), 24 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 33827f673b..07d0ff2d65 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -117,7 +117,7 @@ android { compose = true } composeOptions { - kotlinCompilerExtensionVersion = "1.3.2" + kotlinCompilerExtensionVersion = "1.4.0" } packagingOptions { resources { @@ -174,8 +174,6 @@ dependencies { // https://developer.android.com/studio/write/java8-support#library-desugaring-versions coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.2.2") - implementation(libs.compose.destinations) - ksp(libs.compose.destinations.processor) implementation(libs.appyx.core) implementation(libs.androidx.corektx) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 44c3f89979..244f1618f1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,9 +5,9 @@ # Project android_gradle_plugin = "7.3.1" firebase_gradle_plugin = "3.0.2" -kotlin = "1.7.20" -ksp = "1.7.20-1.0.7" -molecule = "0.6.1" +kotlin = "1.8.0" +ksp = "1.8.0-1.0.8" +molecule = "0.7.0" # AndroidX material = "1.6.1" @@ -20,8 +20,7 @@ activity_compose = "1.6.1" startup = "1.1.1" # Compose -compose_compiler = "1.3.2" -compose_bom = "2022.11.00" +compose_bom = "2023.01.00" # Coroutines coroutines = "1.6.4" @@ -41,12 +40,11 @@ test_hamcrest = "2.2" test_orchestrator = "1.4.1" #other -coil = "2.2.1" +coil = "2.2.2" datetime = "0.4.0" wysiwyg = "0.7.0.1" serialization_json = "1.4.1" showkase = "1.0.0-beta14" -compose_destinations = "1.7.23-beta" jsoup = "1.15.3" appyx = "1.0.1" seismic = "1.0.3" @@ -54,8 +52,8 @@ dependencycheck = "7.4.4" stem = "2.2.3" # DI -dagger = "2.43" -anvil = "2.4.2" +dagger = "2.44.2" +anvil = "2.4.4" # quality detekt = "1.22.0" @@ -83,7 +81,6 @@ androidx_activity_compose = { module = "androidx.activity:activity-compose", ver androidx_startup = { module = "androidx.startup:startup-runtime", version.ref = "startup" } androidx_compose_bom = { group = "androidx.compose", name = "compose-bom", version.ref = "compose_bom" } -androidx_compose_foundation = { group = "androidx.compose.foundation", name = "foundation" } # Coroutines coroutines_core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" } @@ -119,8 +116,6 @@ coil = { module = "io.coil-kt:coil", version.ref = "coil" } coil_compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" } datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "datetime" } serialization_json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "serialization_json" } -compose_destinations = { module = "io.github.raamcosta.compose-destinations:animations-core", version.ref = "compose_destinations" } -compose_destinations_processor = { module = "io.github.raamcosta.compose-destinations:ksp", version.ref = "compose_destinations" } showkase = { module = "com.airbnb.android:showkase", version.ref = "showkase" } showkase_processor = { module = "com.airbnb.android:showkase-processor", version.ref = "showkase" } jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" } diff --git a/libraries/architecture/build.gradle.kts b/libraries/architecture/build.gradle.kts index 1bae19e00b..6dee0513da 100644 --- a/libraries/architecture/build.gradle.kts +++ b/libraries/architecture/build.gradle.kts @@ -22,7 +22,7 @@ plugins { } android { - namespace = "io.element.android.x.libraries.presentation" + namespace = "io.element.android.x.architecture" } dependencies { diff --git a/libraries/matrix/build.gradle.kts b/libraries/matrix/build.gradle.kts index 60f02b180d..56f33523a7 100644 --- a/libraries/matrix/build.gradle.kts +++ b/libraries/matrix/build.gradle.kts @@ -19,7 +19,7 @@ plugins { id("io.element.android-library") alias(libs.plugins.anvil) - kotlin("plugin.serialization") version "1.7.20" + kotlin("plugin.serialization") version "1.8.0" } android { diff --git a/plugins/src/main/kotlin/Versions.kt b/plugins/src/main/kotlin/Versions.kt index 65d17746d9..217a3318fa 100644 --- a/plugins/src/main/kotlin/Versions.kt +++ b/plugins/src/main/kotlin/Versions.kt @@ -15,12 +15,8 @@ */ import org.gradle.api.JavaVersion -import org.gradle.api.artifacts.VersionCatalog import org.gradle.jvm.toolchain.JavaLanguageVersion -val VersionCatalog.composeVersion: String - get() = findVersion("compose_compiler").get().requiredVersion - object Versions { const val versionCode = 100100 const val versionName = "0.1.0" diff --git a/plugins/src/main/kotlin/extension/CommonExtension.kt b/plugins/src/main/kotlin/extension/CommonExtension.kt index a735411144..f3ba843ab7 100644 --- a/plugins/src/main/kotlin/extension/CommonExtension.kt +++ b/plugins/src/main/kotlin/extension/CommonExtension.kt @@ -49,7 +49,7 @@ fun CommonExtension<*, *, *, *>.composeConfig() { } composeOptions { - kotlinCompilerExtensionVersion = "1.3.2" + kotlinCompilerExtensionVersion = "1.4.0" } packagingOptions { diff --git a/plugins/src/main/kotlin/extension/DependencyHandleScope.kt b/plugins/src/main/kotlin/extension/DependencyHandleScope.kt index bdfa1460bf..e134c26f79 100644 --- a/plugins/src/main/kotlin/extension/DependencyHandleScope.kt +++ b/plugins/src/main/kotlin/extension/DependencyHandleScope.kt @@ -32,7 +32,7 @@ fun DependencyHandlerScope.commonDependencies() { * Dependencies used by all the modules with composable items */ fun DependencyHandlerScope.composeDependencies() { - val composeBom = platform("androidx.compose:compose-bom:2022.11.00") + val composeBom = platform("androidx.compose:compose-bom:2023.01.00") implementation(composeBom) androidTestImplementation(composeBom) implementation("androidx.compose.ui:ui") @@ -42,7 +42,6 @@ fun DependencyHandlerScope.composeDependencies() { implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.5.1") implementation("androidx.activity:activity-compose:1.6.1") - implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1") debugImplementation("androidx.compose.ui:ui-tooling") debugImplementation("androidx.compose.ui:ui-test-manifest") implementation("com.airbnb.android:showkase:1.0.0-beta14") From 793530e7883a15b75371ba0cba504d24daacb3d5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 18 Jan 2023 16:37:00 +0100 Subject: [PATCH 24/25] Use more recent lint version to fix lint false positive. --- gradle.properties | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gradle.properties b/gradle.properties index 27df5e30ca..0585362237 100644 --- a/gradle.properties +++ b/gradle.properties @@ -41,3 +41,7 @@ android.nonTransitiveRClass=true signing.element.nightly.storePassword=Secret signing.element.nightly.keyId=Secret signing.element.nightly.keyPassword=Secret + +# Customise the Lint version to use a more recent version than the one bundled with AGP +# https://googlesamples.github.io/android-custom-lint-rules/usage/newer-lint.md.html +android.experimental.lint.version=8.0.0-alpha10 From f6e2e2fa900368cd4f90345ab340ae1667663cfa Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 18 Jan 2023 16:40:53 +0100 Subject: [PATCH 25/25] Fix typo --- .github/workflows/maestro.yml | 4 ++-- .maestro/README.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/maestro.yml b/.github/workflows/maestro.yml index d3d0962037..0b9939b133 100644 --- a/.github/workflows/maestro.yml +++ b/.github/workflows/maestro.yml @@ -1,4 +1,4 @@ -name: Meastro +name: Maestro on: pull_request: { } @@ -12,7 +12,7 @@ env: jobs: maestro-cloud: - name: Meastro test suite + name: Maestro test suite runs-on: ubuntu-latest if: github.ref != 'refs/heads/main' strategy: diff --git a/.maestro/README.md b/.maestro/README.md index fc2a71d90e..9505769de9 100644 --- a/.maestro/README.md +++ b/.maestro/README.md @@ -43,7 +43,7 @@ Start the ElementX app and run this command to help writing test. maestro studio ``` -Note that sometimes, this prevent running the test. So kill the `meastro studio` process to be able to run the test again. +Note that sometimes, this prevent running the test. So kill the `maestro studio` process to be able to run the test again. Also, if updating the application code, do not forget to deploy again the application before running the maestro tests.