From 6ca6b77d4381d5a32e1e76e7e682d85a8b9e4347 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 17:58:52 +0000 Subject: [PATCH 01/19] fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v26.03.09 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0fc72e1b41..a61fde956c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -178,7 +178,7 @@ test_detekt_test = { module = "io.gitlab.arturbosch.detekt:detekt-test", version # https://github.com/matrix-org/matrix-rust-components-kotlin/commits/main/sdk/sdk-android/src/main/kotlin/org/matrix/rustcomponents/sdk/matrix_sdk_ffi.kt # All new features should not be implemented in the pull request that upgrades the version, developers should # only fix API breaks and may add some TODOs. -matrix_sdk = "org.matrix.rustcomponents:sdk-android:26.03.6" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:26.03.09" # Others coil = { module = "io.coil-kt.coil3:coil", version.ref = "coil" } From 0e670e4059d715eb4aa1ef4846a5f16d652f3d74 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 9 Mar 2026 21:27:28 +0100 Subject: [PATCH 02/19] Fix API break. --- .../android/libraries/matrix/impl/room/JoinedRustRoom.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/JoinedRustRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/JoinedRustRoom.kt index dded213d4c..8cd31185e5 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/JoinedRustRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/JoinedRustRoom.kt @@ -321,7 +321,7 @@ class JoinedRustRoom( override suspend fun reportContent(eventId: EventId, reason: String, blockUserId: UserId?): Result = withContext(roomDispatcher) { runCatchingExceptions { - innerRoom.reportContent(eventId = eventId.value, score = null, reason = reason) + innerRoom.reportContent(eventId = eventId.value, reason = reason) if (blockUserId != null) { innerRoom.ignoreUser(blockUserId.value) } From 28c9bed632e6717b5051a9c119718c7771fc7bcb Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Tue, 10 Mar 2026 08:20:02 +0100 Subject: [PATCH 03/19] Try fixing index OOB issues in `Editable.checkSuggestionNeeded` (#6303) - Fix the case where the order for `start` and `end` is reversed. - Fix the case where `start` or `end` may be outside the editable's range (`0..length`). --- .../components/markdown/MarkdownTextInput.kt | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/markdown/MarkdownTextInput.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/markdown/MarkdownTextInput.kt index e3c1fb5dd3..b3c60b69d7 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/markdown/MarkdownTextInput.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/markdown/MarkdownTextInput.kt @@ -42,6 +42,7 @@ import io.element.android.libraries.textcomposer.model.SuggestionType import io.element.android.libraries.textcomposer.model.aMarkdownTextEditorState import io.element.android.wysiwyg.compose.RichTextEditorStyle import io.element.android.wysiwyg.compose.internal.applyStyleInCompose +import timber.log.Timber @Suppress("ModifierMissing") @Composable @@ -149,8 +150,20 @@ fun MarkdownTextInput( private fun Editable.checkSuggestionNeeded(): Suggestion? { if (this.isEmpty()) return null - val start = Selection.getSelectionStart(this) - val end = Selection.getSelectionEnd(this) + var start = Selection.getSelectionStart(this) + var end = Selection.getSelectionEnd(this) + val range = 0..this.length + + if (start !in range || end !in range) { + Timber.tag("checkSuggestionNeeded").e("Selection indices are out of bounds: start=$start, end=$end, text length=${this.length}") + return null + } + + // Make sure the selection order is correct, if not swap them: sometimes we can get the end before the start + val tempEnd = end + end = maxOf(start, end) + start = minOf(start, tempEnd) + var startOfWord = start while ((startOfWord > 0 || startOfWord == length) && !this[startOfWord - 1].isWhitespace()) { startOfWord-- @@ -161,11 +174,16 @@ private fun Editable.checkSuggestionNeeded(): Suggestion? { // If a mention span already exists we don't need suggestions if (getSpans(startOfWord, startOfWord + 1).isNotEmpty()) return null - return if (firstChar in listOf('@', '#', '/')) { + return if (firstChar in listOf('@', '#', '/', ':')) { var endOfWord = end while (endOfWord < this.length && !this[endOfWord].isWhitespace()) { endOfWord++ } + if (startOfWord + 1 > endOfWord) { + Timber.tag("checkSuggestionNeeded").e("No need to show suggestions for an invalid range (${startOfWord + 1}..$endOfWord)") + return null + } + val text = this.subSequence(startOfWord + 1, endOfWord).toString() val suggestionType = when (firstChar) { '@' -> SuggestionType.Mention From d848ccc148151a271eaa917e94d2f9b990fd1162 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Tue, 10 Mar 2026 09:05:20 +0100 Subject: [PATCH 04/19] Replace `knit` with `generate_toc.py` (#6279) --- .github/workflows/quality.yml | 20 +-- CONTRIBUTING.md | 10 +- app/build.gradle.kts | 21 --- build.gradle.kts | 15 +- docs/install_from_github_release.md | 4 +- docs/installing_from_ci.md | 10 +- docs/integration_tests.md | 2 +- docs/notifications.md | 4 +- docs/pull_request.md | 12 +- gradle/libs.versions.toml | 1 - tools/docs/generate_toc.py | 204 ++++++++++++++++++++++++++++ 11 files changed, 244 insertions(+), 59 deletions(-) create mode 100644 tools/docs/generate_toc.py diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 51edc397f8..18551559ec 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -287,12 +287,12 @@ jobs: path: | **/build/reports/**/*.* - knit: - name: Knit checks + docs: + name: Doc checks runs-on: ubuntu-latest # Allow all jobs on main and develop. Just one per PR. concurrency: - group: ${{ github.ref == 'refs/heads/main' && format('check-knit-main-{0}', github.sha) || github.ref == 'refs/heads/develop' && format('check-knit-develop-{0}', github.sha) || format('check-knit-{0}', github.ref) }} + group: ${{ github.ref == 'refs/heads/main' && format('check-docs-main-{0}', github.sha) || github.ref == 'refs/heads/develop' && format('check-docs-develop-{0}', github.sha) || format('check-docs-{0}', github.ref) }} cancel-in-progress: true steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -309,17 +309,9 @@ jobs: - name: Clone submodules if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == 'element-hq/element-x-android' }} run: git submodule update --init --recursive - - name: Use JDK 21 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 - with: - distribution: 'temurin' # See 'Supported distributions' for available options - java-version: '21' - - name: Configure gradle - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 - with: - cache-read-only: ${{ github.ref != 'refs/heads/develop' }} - - name: Run Knit - run: ./gradlew knitCheck $CI_GRADLE_ARG_PROPERTIES + - name: Run docs check + # This is equivalent to `./gradlew checkDocs`, but we avoid having to install java and gradle + run: python3 ./tools/docs/generate_toc.py --verify ./*.md docs/**/*.md # Note: to auto fix issues you can use the following command: # shellcheck -f diff | git apply diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4e0c9b9446..29e3b6f366 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,7 +16,7 @@ * [Code quality](#code-quality) * [detekt](#detekt) * [ktlint](#ktlint) - * [knit](#knit) + * [checkDocs](#checkdocs) * [lint](#lint) * [Unit tests](#unit-tests) * [konsist](#konsist) @@ -123,13 +123,13 @@ Note that you can run For ktlint to fix some detected errors for you (you still have to check and commit the fix of course) -#### knit +#### checkDocs -[knit](https://github.com/Kotlin/kotlinx-knit) is a tool which checks markdown files on the project. Also it generates/updates the table of content (toc) of the markdown files. +`checkDocs` is a Gradle task which checks markdown files on the project to ensure their table of contents is up to date. It uses `tools/docs/generate_toc.py --verify` under the hood, and has a counterpart `generateDocsToc` task which runs `tools/docs/generate_toc.py` to update the table of contents of markdown files. So everytime the toc should be updated, just run
-./gradlew knit
+./gradlew generateDocsToc
 
and commit the changes. @@ -137,7 +137,7 @@ and commit the changes. The CI will check that markdown files are up to date by running
-./gradlew knitCheck
+./gradlew checkDocs
 
#### lint diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 969f401385..5a3900d296 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -33,7 +33,6 @@ plugins { alias(libs.plugins.kotlin.android) // When using precompiled plugins, we need to apply the firebase plugin like this id(libs.plugins.firebaseAppDistribution.get().pluginId) - alias(libs.plugins.knit) id("kotlin-parcelize") alias(libs.plugins.licensee) alias(libs.plugins.kotlin.serialization) @@ -250,26 +249,6 @@ androidComponents { configureLicensesTasks(reportingExtension) } -// Knit -apply { - plugin("kotlinx-knit") -} - -knit { - files = fileTree(project.rootDir) { - include( - "**/*.md", - "**/*.kt", - "*/*.kts", - ) - exclude( - "**/build/**", - "*/.gradle/**", - "**/CHANGES.md", - ) - } -} - setupDependencyInjection() dependencies { diff --git a/build.gradle.kts b/build.gradle.kts index 0d4c58ec22..7b0e672bcc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -175,12 +175,23 @@ tasks.register("runQualityChecks") { tasks.findByName("ktlintCheck")?.let { dependsOn(it) } // tasks.findByName("buildHealth")?.let { dependsOn(it) } } - dependsOn(":app:knitCheck") - + dependsOn("checkDocs") // Make sure all checks run even if some fail gradle.startParameter.isContinueOnFailure = true } +// Register Markdown documentation check task. +tasks.register("checkDocs", Exec::class.java) { + inputs.files("./*.md", "docs/**/*.md") + commandLine("python3", "tools/docs/generate_toc.py", "--verify", *inputs.files.map { it.path }.toTypedArray()) +} + +// Register Markdown documentation TOC generation task. +tasks.register("generateDocsToc", Exec::class.java) { + inputs.files("./*.md", "docs/**/*.md") + commandLine("python3", "tools/docs/generate_toc.py", *inputs.files.map { it.path }.toTypedArray()) +} + // Make sure to delete old screenshots before recording new ones subprojects { val snapshotsDir = File("${project.projectDir}/src/test/snapshots") diff --git a/docs/install_from_github_release.md b/docs/install_from_github_release.md index 5be1c0c3b0..5ac27ff812 100644 --- a/docs/install_from_github_release.md +++ b/docs/install_from_github_release.md @@ -10,8 +10,8 @@ This document explains how to install Element X Android from a Github Release. * [I already have the application on my phone](#i-already-have-the-application-on-my-phone) * [Installing from the App Bundle](#installing-from-the-app-bundle) * [Requirements](#requirements) - * [Steps](#steps) - * [I already have the application on my phone](#i-already-have-the-application-on-my-phone) + * [Steps](#steps-1) + * [I already have the application on my phone](#i-already-have-the-application-on-my-phone-1) diff --git a/docs/installing_from_ci.md b/docs/installing_from_ci.md index 634ee905ab..aaa8eba121 100644 --- a/docs/installing_from_ci.md +++ b/docs/installing_from_ci.md @@ -2,11 +2,11 @@ - * [Installing from GitHub](#installing-from-github) - * [Create a GitHub token](#create-a-github-token) - * [Provide artifact URL](#provide-artifact-url) - * [Next steps](#next-steps) - * [Future improvement](#future-improvement) +* [Installing from GitHub](#installing-from-github) + * [Create a GitHub token](#create-a-github-token) +* [Provide artifact URL](#provide-artifact-url) +* [Next steps](#next-steps) +* [Future improvement](#future-improvement) diff --git a/docs/integration_tests.md b/docs/integration_tests.md index dbd3ce2b68..73058be131 100644 --- a/docs/integration_tests.md +++ b/docs/integration_tests.md @@ -8,7 +8,7 @@ * [Stop Synapse](#stop-synapse) * [Troubleshoot](#troubleshoot) * [Android Emulator does cannot reach the homeserver](#android-emulator-does-cannot-reach-the-homeserver) - * [Tests partially run but some fail with "Unable to contact localhost:8080"](#tests-partially-run-but-some-fail-with-"unable-to-contact-localhost8080") + * [Tests partially run but some fail with "Unable to contact localhost:8080"](#tests-partially-run-but-some-fail-with-unable-to-contact-localhost8080) * [virtualenv command fails](#virtualenv-command-fails) diff --git a/docs/notifications.md b/docs/notifications.md index 5f67f88713..9aa256abd7 100644 --- a/docs/notifications.md +++ b/docs/notifications.md @@ -5,11 +5,11 @@ This document aims to describe how Element android displays notifications to the * [Prerequisites Knowledge](#prerequisites-knowledge) - * [How does a matrix client get a message from a homeserver?](#how-does-a-matrix-client-get-a-message-from-a-homeserver?) + * [How does a matrix client get a message from a homeserver?](#how-does-a-matrix-client-get-a-message-from-a-homeserver) * [How does a mobile app receives push notification](#how-does-a-mobile-app-receives-push-notification) * [Push VS Notification](#push-vs-notification) * [Push in the matrix federated world](#push-in-the-matrix-federated-world) - * [How does the homeserver know when to notify a client?](#how-does-the-homeserver-know-when-to-notify-a-client?) + * [How does the homeserver know when to notify a client?](#how-does-the-homeserver-know-when-to-notify-a-client) * [Push vs privacy, and mitigation](#push-vs-privacy-and-mitigation) * [Background processing limitations](#background-processing-limitations) * [Element Notification implementations](#element-notification-implementations) diff --git a/docs/pull_request.md b/docs/pull_request.md index 97314b2a73..3fc6727d1e 100644 --- a/docs/pull_request.md +++ b/docs/pull_request.md @@ -3,23 +3,23 @@ * [Introduction](#introduction) -* [Who should read this document?](#who-should-read-this-document?) +* [Who should read this document?](#who-should-read-this-document) * [Submitting PR](#submitting-pr) - * [Who can submit pull requests?](#who-can-submit-pull-requests?) + * [Who can submit pull requests?](#who-can-submit-pull-requests) * [Humans](#humans) - * [Draft PR?](#draft-pr?) + * [Draft PR?](#draft-pr) * [Base branch](#base-branch) * [PR Review Assignment](#pr-review-assignment) * [PR review time](#pr-review-time) * [Re-request PR review](#re-request-pr-review) - * [When create split PR?](#when-create-split-pr?) + * [When create split PR?](#when-create-split-pr) * [Avoid fixing other unrelated issue in a big PR](#avoid-fixing-other-unrelated-issue-in-a-big-pr) * [Bots](#bots) * [Renovate](#renovate) * [Gradle wrapper](#gradle-wrapper) * [Sync analytics plan](#sync-analytics-plan) * [Reviewing PR](#reviewing-pr) - * [Who can review pull requests?](#who-can-review-pull-requests?) + * [Who can review pull requests?](#who-can-review-pull-requests) * [What to have in mind when reviewing a PR](#what-to-have-in-mind-when-reviewing-a-pr) * [Rules](#rules) * [Check the form](#check-the-form) @@ -29,7 +29,7 @@ * [Check the commit](#check-the-commit) * [Check the substance](#check-the-substance) * [Make a dedicated meeting to review the PR](#make-a-dedicated-meeting-to-review-the-pr) - * [What happen to the issue(s)?](#what-happen-to-the-issues?) + * [What happen to the issue(s)?](#what-happen-to-the-issues) * [Merge conflict](#merge-conflict) * [When and who can merge PR](#when-and-who-can-merge-pr) * [Merge type](#merge-type) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e70308cccd..a4fe950ac4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -266,7 +266,6 @@ paparazzi = "app.cash.paparazzi:2.0.0-alpha04" roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" } sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" } firebaseAppDistribution = { id = "com.google.firebase.appdistribution", version.ref = "firebaseAppDistribution" } -knit = { id = "org.jetbrains.kotlinx.knit", version = "0.5.1" } sonarqube = "org.sonarqube:7.2.3.7755" licensee = "app.cash.licensee:1.14.1" compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } diff --git a/tools/docs/generate_toc.py b/tools/docs/generate_toc.py new file mode 100644 index 0000000000..6815087ef2 --- /dev/null +++ b/tools/docs/generate_toc.py @@ -0,0 +1,204 @@ +#!/usr/bin/env python3 +"""Generate or verify markdown TOCs between HTML markers.""" + +from __future__ import annotations + +import argparse +import difflib +import glob +import re +import sys +from pathlib import Path + +TOC_MARKER = "" +END_MARKER = "" +HEADER_RE = re.compile(r"^(#{1,6})\s+(.+?)\s*$") +FENCE_RE = re.compile(r"^\s*(`{3,}|~{3,})") + + +def parse_headers(content: str) -> list[tuple[int, str]]: + """Extract markdown headers after the first END marker, excluding fenced code blocks.""" + end_index = content.find(END_MARKER) + if end_index == -1: + return [] + + scan_region = content[end_index + len(END_MARKER) :] + headers: list[tuple[int, str]] = [] + in_fence = False + fence_char = "" + fence_len = 0 + + for line in scan_region.splitlines(): + fence_match = FENCE_RE.match(line) + if fence_match: + fence = fence_match.group(1) + if not in_fence: + in_fence = True + fence_char = fence[0] + fence_len = len(fence) + elif fence[0] == fence_char and len(fence) >= fence_len: + in_fence = False + continue + + if in_fence: + continue + + match = HEADER_RE.match(line) + if not match: + continue + + level = len(match.group(1)) + text = re.sub(r"\s+#+\s*$", "", match.group(2)).strip() + if text: + headers.append((level, text)) + + return headers + + +def _slugify(text: str) -> str: + """Generate a markdown anchor similar to GitHub style.""" + anchor = text.lower().strip() + anchor = re.sub(r"[^\w\s-]", "", anchor) + anchor = re.sub(r"\s+", "-", anchor) + anchor = re.sub(r"-+", "-", anchor).strip("-") + return anchor + + +def generate_toc(headers: list[tuple[int, str]]) -> str: + """Generate markdown TOC content from parsed headers.""" + if not headers: + return "" + + min_level = min(level for level, _ in headers) + slug_counts: dict[str, int] = {} + toc_lines: list[str] = [] + + for level, text in headers: + base_slug = _slugify(text) + count = slug_counts.get(base_slug, 0) + slug_counts[base_slug] = count + 1 + slug = base_slug if count == 0 else f"{base_slug}-{count}" + + indent = " " * (level - min_level) + toc_lines.append(f"{indent}* [{text}](#{slug})") + + return "\n".join(toc_lines) + + +def replace_toc_section(content: str, new_toc: str) -> str: + """Replace TOC block content between TOC and END markers.""" + toc_start = content.find(TOC_MARKER) + if toc_start == -1: + raise ValueError("TOC marker not found") + + toc_end = content.find(END_MARKER, toc_start + len(TOC_MARKER)) + if toc_end == -1: + raise ValueError("END marker not found after TOC marker") + + replacement = f"{TOC_MARKER}\n\n{new_toc}\n\n{END_MARKER}" + return content[:toc_start] + replacement + content[toc_end + len(END_MARKER) :] + + +def build_expected_content(content: str) -> str: + """Build the expected markdown content after TOC regeneration.""" + headers = parse_headers(content) + toc = generate_toc(headers) + return replace_toc_section(content, toc) + + +def resolve_markdown_files(inputs: list[str]) -> list[Path]: + """Resolve CLI arguments to a de-duplicated ordered list of markdown files.""" + files: list[Path] = [] + seen: set[Path] = set() + + def add_path(candidate: Path) -> None: + resolved = candidate.resolve() + if resolved.suffix.lower() != ".md" or not resolved.is_file() or resolved in seen: + return + seen.add(resolved) + files.append(resolved) + + for item in inputs: + path = Path(item) + if path.exists(): + if path.is_file(): + add_path(path) + elif path.is_dir(): + for md_file in sorted(path.rglob("*.md")): + add_path(md_file) + continue + + for matched in sorted(glob.glob(item, recursive=True)): + add_path(Path(matched)) + + return files + + +def verify_file(path: Path) -> bool: + """Verify whether a file already contains the expected TOC.""" + content = path.read_text(encoding="utf-8") + + if TOC_MARKER not in content or END_MARKER not in content: + print(f"SKIP | {path} (missing TOC markers)") + return True + + expected = build_expected_content(content) + if expected == content: + print(f"OK | {path}") + return True + + print(f"OUTDATED| {path}", file=sys.stderr) + diff = difflib.unified_diff( + content.splitlines(), + expected.splitlines(), + fromfile=f"{path} (current)", + tofile=f"{path} (expected)", + lineterm="", + ) + for line in diff: + print(line, file=sys.stderr) + return False + + +def update_file(path: Path) -> bool: + """Regenerate and write TOC in a markdown file.""" + content = path.read_text(encoding="utf-8") + + if TOC_MARKER not in content or END_MARKER not in content: + print(f"SKIP | {path} (missing TOC markers)") + return True + + updated = build_expected_content(content) + if updated == content: + print(f"UNCHANGED| {path}") + return True + + path.write_text(updated, encoding="utf-8") + print(f"UPDATED | {path}") + return True + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Generate markdown TOCs between and markers." + ) + parser.add_argument("markdown_files", nargs="+", help="Markdown files, directories, or glob patterns") + parser.add_argument( + "--verify", + action="store_true", + help="Check files without modifying them; returns non-zero when TOC is outdated.", + ) + args = parser.parse_args() + + files = resolve_markdown_files(args.markdown_files) + if not files: + print("No markdown files were resolved from input arguments.", file=sys.stderr) + return 1 + + results = [verify_file(path) if args.verify else update_file(path) for path in files] + return 0 if all(results) else 1 + + +if __name__ == "__main__": + sys.exit(main()) + From f77098ed470aff9c809c0e968709bd7dd39ef276 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Tue, 10 Mar 2026 13:44:31 +0100 Subject: [PATCH 05/19] Add network constraints for fetching notifications with `WorkManager` (#6305) * Add `isNetworkBlocked` and `isInAirGappedEnvironment` to `NetworkMonitor`. * Improve the DI of `SyncPendingNotificationsRequestBuilder` to simplify its usage. * Only update `isInAirGappedEnvironment` in `DefaultNetworkManager` if the current build is an enterprise one. * Add network constraints to `DefaultSyncPendingNotificationsRequestBuilder` based on the air-gapped status. * Add a feature flag to disable the new check, in case it doesn't work as expected. --- enterprise | 2 +- .../networkmonitor/api/NetworkMonitor.kt | 8 +- features/networkmonitor/impl/build.gradle.kts | 5 + .../impl/DefaultNetworkMonitor.kt | 32 +++- .../impl/NetworkBlockedChecker.kt | 4 +- .../networkmonitor/test/FakeNetworkMonitor.kt | 12 +- .../libraries/featureflag/api/FeatureFlags.kt | 8 + .../push/impl/push/DefaultPushHandler.kt | 10 +- .../FetchPendingNotificationsWorker.kt | 3 +- .../SyncPendingNotificationsRequestBuilder.kt | 65 +++++++- .../push/impl/push/DefaultPushHandlerTest.kt | 8 +- ...cPendingNotificationsRequestBuilderTest.kt | 149 ++++++++++++++++++ ...cPendingNotificationsRequestBuilderTest.kt | 74 --------- libraries/push/test/build.gradle.kts | 1 + ...eSyncPendingNotificationsRequestBuilder.kt | 17 ++ 15 files changed, 298 insertions(+), 100 deletions(-) create mode 100644 libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/workmanager/DefaultSyncPendingNotificationsRequestBuilderTest.kt delete mode 100644 libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/workmanager/SyncPendingNotificationsRequestBuilderTest.kt create mode 100644 libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/workmanager/FakeSyncPendingNotificationsRequestBuilder.kt diff --git a/enterprise b/enterprise index 1fd0d297d9..cdde60c158 160000 --- a/enterprise +++ b/enterprise @@ -1 +1 @@ -Subproject commit 1fd0d297d944186e3af2773e1c5db2938d60f74b +Subproject commit cdde60c158ecd0987a3ba6fd79a4617551aff463 diff --git a/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/NetworkMonitor.kt b/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/NetworkMonitor.kt index 7adc5ac102..1884ca0e6f 100644 --- a/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/NetworkMonitor.kt +++ b/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/NetworkMonitor.kt @@ -24,5 +24,11 @@ interface NetworkMonitor { /** * Checks if the active network is being blocked by Doze, even if it's available. */ - fun isNetworkBlocked(): Boolean + val isNetworkBlocked: StateFlow + + /** + * A flow indicating whether the app is running in an air-gapped environment. + * An air-gapped environment is an environment that is not connected to the internet, and where the app can only communicate with a limited set of servers. + */ + val isInAirGappedEnvironment: StateFlow } diff --git a/features/networkmonitor/impl/build.gradle.kts b/features/networkmonitor/impl/build.gradle.kts index ba754ec1db..5adc383d64 100644 --- a/features/networkmonitor/impl/build.gradle.kts +++ b/features/networkmonitor/impl/build.gradle.kts @@ -1,4 +1,5 @@ import extension.setupDependencyInjection +import extension.testCommonDependencies /* * Copyright (c) 2025 Element Creations Ltd. @@ -23,4 +24,8 @@ dependencies { implementation(projects.libraries.core) implementation(projects.libraries.di) api(projects.features.networkmonitor.api) + + testCommonDependencies(libs) + testImplementation(projects.libraries.matrix.test) + testImplementation(projects.features.networkmonitor.test) } diff --git a/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt b/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt index ebe5d6ed62..949db720ce 100644 --- a/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt +++ b/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt @@ -13,18 +13,21 @@ package io.element.android.features.networkmonitor.impl import android.content.Context import android.net.ConnectivityManager import android.net.Network +import android.net.NetworkCapabilities import android.net.NetworkRequest import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.SingleIn import io.element.android.features.networkmonitor.api.NetworkMonitor import io.element.android.features.networkmonitor.api.NetworkStatus +import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.di.annotations.ApplicationContext import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.channels.trySendBlocking +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.callbackFlow @@ -39,13 +42,13 @@ import java.util.concurrent.atomic.AtomicInteger @SingleIn(AppScope::class) class DefaultNetworkMonitor( @ApplicationContext context: Context, - @AppCoroutineScope - appCoroutineScope: CoroutineScope, + @AppCoroutineScope appCoroutineScope: CoroutineScope, + private val buildMeta: BuildMeta, ) : NetworkMonitor { private val connectivityManager: ConnectivityManager = context.getSystemService(ConnectivityManager::class.java) - private val blockedNetworkBlockedChecker = NetworkBlockedChecker(connectivityManager) - override fun isNetworkBlocked(): Boolean = blockedNetworkBlockedChecker.isNetworkBlocked() + override val isNetworkBlocked = MutableStateFlow(NetworkBlockedChecker(connectivityManager).isNetworkBlocked()) + override val isInAirGappedEnvironment = MutableStateFlow(false) override val connectivity: StateFlow = callbackFlow { @@ -63,6 +66,27 @@ class DefaultNetworkMonitor( } } + override fun onBlockedStatusChanged(network: Network, blocked: Boolean) { + Timber.d("Network ${network.networkHandle} blocked status changed: $blocked.") + if (network.networkHandle == connectivityManager.activeNetwork?.networkHandle) { + // If the network is blocked, it means that Doze is preventing the app from using the network, even if it's available. + isNetworkBlocked.value = blocked + } + } + + override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) { + if (!buildMeta.isEnterpriseBuild) { + // The air-gapped environment detection is only relevant for the enterprise build. + return + } + + if (network.networkHandle == connectivityManager.activeNetwork?.networkHandle) { + // If the network doesn't have the NET_CAPABILITY_VALIDATED capability, it means that the network is not able to reach the internet + // (according to Google), which is a common case in air-gapped environments. + isInAirGappedEnvironment.value = !networkCapabilities.capabilities.contains(NetworkCapabilities.NET_CAPABILITY_VALIDATED) + } + } + override fun onAvailable(network: Network) { if (activeNetworksCount.incrementAndGet() > 0) { trySendBlocking(NetworkStatus.Connected) diff --git a/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/NetworkBlockedChecker.kt b/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/NetworkBlockedChecker.kt index 624f1ce6c7..7f90209c90 100644 --- a/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/NetworkBlockedChecker.kt +++ b/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/NetworkBlockedChecker.kt @@ -14,10 +14,10 @@ import android.net.ConnectivityManager import android.net.NetworkInfo /** - * Helper to check if the active network in [ConnectivityManager] is blocked. + * Helper to synchronously check if the active network in [ConnectivityManager] is blocked. * * This is extracted to its own class because it uses deprecated APIs (but the only ones that are reliable) - * and we don't want to suppress deprecations everywhere. + * and we don't want to suppress deprecations everywhere in the file this would be called. */ class NetworkBlockedChecker( private val connectivityManager: ConnectivityManager, diff --git a/features/networkmonitor/test/src/main/kotlin/io/element/android/features/networkmonitor/test/FakeNetworkMonitor.kt b/features/networkmonitor/test/src/main/kotlin/io/element/android/features/networkmonitor/test/FakeNetworkMonitor.kt index d501eb5b5c..e979301c9e 100644 --- a/features/networkmonitor/test/src/main/kotlin/io/element/android/features/networkmonitor/test/FakeNetworkMonitor.kt +++ b/features/networkmonitor/test/src/main/kotlin/io/element/android/features/networkmonitor/test/FakeNetworkMonitor.kt @@ -14,8 +14,16 @@ import kotlinx.coroutines.flow.MutableStateFlow class FakeNetworkMonitor( initialStatus: NetworkStatus = NetworkStatus.Connected, - private val isNetworkBlockedLambda: () -> Boolean = { false }, ) : NetworkMonitor { override val connectivity = MutableStateFlow(initialStatus) - override fun isNetworkBlocked(): Boolean = isNetworkBlockedLambda() + override val isNetworkBlocked = MutableStateFlow(false) + override val isInAirGappedEnvironment = MutableStateFlow(false) + + fun givenNetworkBlocked(isBlocked: Boolean) { + isNetworkBlocked.value = isBlocked + } + + fun givenIsInAirGappedEnvironment(isInAirGapped: Boolean) { + isInAirGappedEnvironment.value = isInAirGapped + } } diff --git a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt index 3b47726b80..4f1fe30d10 100644 --- a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt +++ b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt @@ -147,4 +147,12 @@ enum class FeatureFlags( defaultValue = { false }, isFinished = false, ), + ValidateNetworkWhenSchedulingNotificationFetching( + key = "feature.validate_network_when_scheduling_notification_fetching", + title = "validate internet connectivity when scheduling notification fetching", + description = "Only fetch events for push notifications when the device has internet connectivity. " + + "Enabling this can be problematic in air-gapped environments.", + defaultValue = { true }, + isFinished = false, + ), } diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt index 5ed4223616..0c43480bd6 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt @@ -30,7 +30,6 @@ import io.element.android.libraries.workmanager.api.WorkManagerRequestType import io.element.android.libraries.workmanager.api.WorkManagerScheduler import io.element.android.services.analytics.api.AnalyticsLongRunningTransaction import io.element.android.services.analytics.api.AnalyticsService -import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider import io.element.android.services.toolbox.api.systemclock.SystemClock import kotlinx.coroutines.flow.first import timber.log.Timber @@ -49,7 +48,7 @@ class DefaultPushHandler( private val analyticsService: AnalyticsService, private val systemClock: SystemClock, private val workManagerScheduler: WorkManagerScheduler, - private val buildVersionSdkIntProvider: BuildVersionSdkIntProvider, + private val syncPendingNotificationsRequestFactory: SyncPendingNotificationsRequestBuilder.Factory, resultProcessor: NotificationResultProcessor, ) : PushHandler { init { @@ -134,12 +133,7 @@ class DefaultPushHandler( if (!workManagerScheduler.hasPendingWork(userId, WorkManagerRequestType.NOTIFICATION_SYNC)) { Timber.d("No pending worker for push notifications found") - workManagerScheduler.submit( - SyncPendingNotificationsRequestBuilder( - sessionId = userId, - buildVersionSdkIntProvider = buildVersionSdkIntProvider, - ) - ) + workManagerScheduler.submit(syncPendingNotificationsRequestFactory.create(userId)) } } catch (e: Exception) { Timber.tag(loggerTag.value).e(e, "## handleInternal() failed") diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/workmanager/FetchPendingNotificationsWorker.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/workmanager/FetchPendingNotificationsWorker.kt index fd9008839f..a14c20d53b 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/workmanager/FetchPendingNotificationsWorker.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/workmanager/FetchPendingNotificationsWorker.kt @@ -160,7 +160,8 @@ class FetchPendingNotificationsWorker( networkTimeoutSpans.finish() // If there is a problem with the updated network values, report it and retry if needed - if (reportConnectivityError(requests = requests, hasNetwork = hasNetwork, isNetworkBlocked = networkMonitor.isNetworkBlocked())) { + val isNetworkBlocked = networkMonitor.isNetworkBlocked.first() + if (reportConnectivityError(requests = requests, hasNetwork = hasNetwork, isNetworkBlocked = isNetworkBlocked)) { pushHistoryService.insertOrUpdatePushRequests(requests.map { request -> request.copy(retries = request.retries + 1) }) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/workmanager/SyncPendingNotificationsRequestBuilder.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/workmanager/SyncPendingNotificationsRequestBuilder.kt index 5aa40cadb5..bdb8389feb 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/workmanager/SyncPendingNotificationsRequestBuilder.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/workmanager/SyncPendingNotificationsRequestBuilder.kt @@ -8,32 +8,87 @@ package io.element.android.libraries.push.impl.workmanager +import android.net.NetworkCapabilities +import android.net.NetworkRequest import android.os.Build +import androidx.work.Constraints import androidx.work.ExistingWorkPolicy +import androidx.work.NetworkType import androidx.work.OneTimeWorkRequestBuilder import androidx.work.OutOfQuotaPolicy import androidx.work.workDataOf +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.AssistedInject +import dev.zacsweers.metro.ContributesBinding +import io.element.android.features.networkmonitor.api.NetworkMonitor +import io.element.android.libraries.featureflag.api.FeatureFlagService +import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.matrix.api.core.SessionId +import io.element.android.libraries.push.impl.workmanager.SyncPendingNotificationsRequestBuilder.Companion.SESSION_ID import io.element.android.libraries.workmanager.api.WorkManagerRequestBuilder import io.element.android.libraries.workmanager.api.WorkManagerRequestType import io.element.android.libraries.workmanager.api.WorkManagerRequestWrapper import io.element.android.libraries.workmanager.api.WorkManagerWorkerType import io.element.android.libraries.workmanager.api.workManagerTag import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider +import kotlinx.coroutines.flow.first +import timber.log.Timber + +interface SyncPendingNotificationsRequestBuilder : WorkManagerRequestBuilder { + fun interface Factory { + fun create(sessionId: SessionId): SyncPendingNotificationsRequestBuilder + } -class SyncPendingNotificationsRequestBuilder( - private val sessionId: SessionId, - private val buildVersionSdkIntProvider: BuildVersionSdkIntProvider, -) : WorkManagerRequestBuilder { companion object { const val SESSION_ID = "session_id" } +} + +@AssistedInject +class DefaultSyncPendingNotificationsRequestBuilder( + @Assisted private val sessionId: SessionId, + private val buildVersionSdkIntProvider: BuildVersionSdkIntProvider, + private val networkMonitor: NetworkMonitor, + private val featureFlagService: FeatureFlagService, +) : SyncPendingNotificationsRequestBuilder { + @AssistedFactory + @ContributesBinding(AppScope::class) + interface Factory : SyncPendingNotificationsRequestBuilder.Factory { + override fun create(sessionId: SessionId): DefaultSyncPendingNotificationsRequestBuilder + } override suspend fun build(): Result> { val type = WorkManagerWorkerType.Unique( name = workManagerTag(sessionId = sessionId, requestType = WorkManagerRequestType.NOTIFICATION_SYNC), policy = ExistingWorkPolicy.APPEND_OR_REPLACE, ) + + val networkRequestBuilder = NetworkRequest.Builder() + // Allow any kind of network that can have internet connectivity. + .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .addTransportType(NetworkCapabilities.TRANSPORT_VPN) + .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) + // By default, the network request will require the device to not be in VPN, but since some customers use a VPN to connect to their homeserver, + // we need to allow VPN networks. + .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN) + + // If we're in an air-gapped environment, we shouldn't validate internet connectivity, as the checker will fail and the worker won't run at all. + // Note this will always be false for FOSS, since the feature is only enabled in Element Pro. + if (networkMonitor.isInAirGappedEnvironment.first()) { + Timber.d("In an air-gapped environment, not adding NET_CAPABILITY_VALIDATED to the network request") + networkRequestBuilder.removeCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) + } else if (featureFlagService.isFeatureEnabled(FeatureFlags.ValidateNetworkWhenSchedulingNotificationFetching)) { + Timber.d("Not in an air-gapped environment, adding NET_CAPABILITY_VALIDATED to the network request") + networkRequestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) + } + + val networkConstraints = Constraints.Builder() + .setRequiredNetworkRequest(networkRequestBuilder.build(), NetworkType.NOT_REQUIRED) + .build() + val request = OneTimeWorkRequestBuilder() .setInputData(workDataOf(SESSION_ID to sessionId.value)) .apply { @@ -44,8 +99,10 @@ class SyncPendingNotificationsRequestBuilder( setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST) } } + .setConstraints(networkConstraints) .setTraceTag(workManagerTag(sessionId, WorkManagerRequestType.NOTIFICATION_SYNC)) .build() + return Result.success(listOf(WorkManagerRequestWrapper(request, type))) } } diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandlerTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandlerTest.kt index 733b2b64be..1f7f64bf90 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandlerTest.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandlerTest.kt @@ -26,6 +26,8 @@ import io.element.android.libraries.push.impl.history.PushHistoryService import io.element.android.libraries.push.impl.notifications.FakeNotificationResultProcessor import io.element.android.libraries.push.impl.test.DefaultTestPush import io.element.android.libraries.push.impl.troubleshoot.DiagnosticPushHandler +import io.element.android.libraries.push.impl.workmanager.SyncPendingNotificationsRequestBuilder +import io.element.android.libraries.push.test.workmanager.FakeSyncPendingNotificationsRequestBuilder import io.element.android.libraries.pushproviders.api.PushData import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret import io.element.android.libraries.pushstore.test.userpushstore.FakeUserPushStore @@ -34,7 +36,6 @@ import io.element.android.libraries.pushstore.test.userpushstore.clientsecret.Fa import io.element.android.libraries.workmanager.api.WorkManagerRequestBuilder import io.element.android.libraries.workmanager.test.FakeWorkManagerScheduler import io.element.android.services.analytics.test.FakeAnalyticsService -import io.element.android.services.toolbox.test.sdk.FakeBuildVersionSdkIntProvider import io.element.android.services.toolbox.test.systemclock.FakeSystemClock import io.element.android.tests.testutils.lambda.lambdaError import io.element.android.tests.testutils.lambda.lambdaRecorder @@ -216,7 +217,6 @@ class DefaultPushHandlerTest { workManagerScheduler: FakeWorkManagerScheduler = FakeWorkManagerScheduler(), analyticsService: FakeAnalyticsService = FakeAnalyticsService(), systemClock: FakeSystemClock = FakeSystemClock(), - buildVersionSdkIntProvider: FakeBuildVersionSdkIntProvider = FakeBuildVersionSdkIntProvider(33), resultProcessor: FakeNotificationResultProcessor = FakeNotificationResultProcessor( emit = { Result.success(Unit) }, start = {}, @@ -238,8 +238,10 @@ class DefaultPushHandlerTest { analyticsService = analyticsService, systemClock = systemClock, workManagerScheduler = workManagerScheduler, - buildVersionSdkIntProvider = buildVersionSdkIntProvider, resultProcessor = resultProcessor, + syncPendingNotificationsRequestFactory = SyncPendingNotificationsRequestBuilder.Factory { + FakeSyncPendingNotificationsRequestBuilder() + } ) } } diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/workmanager/DefaultSyncPendingNotificationsRequestBuilderTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/workmanager/DefaultSyncPendingNotificationsRequestBuilderTest.kt new file mode 100644 index 0000000000..a8daf5bcff --- /dev/null +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/workmanager/DefaultSyncPendingNotificationsRequestBuilderTest.kt @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.push.impl.workmanager + +import android.net.NetworkCapabilities +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.work.OneTimeWorkRequest +import androidx.work.hasKeyWithValueOfType +import com.google.common.truth.Truth.assertThat +import io.element.android.features.networkmonitor.test.FakeNetworkMonitor +import io.element.android.libraries.featureflag.api.FeatureFlags +import io.element.android.libraries.featureflag.test.FakeFeatureFlagService +import io.element.android.libraries.matrix.api.core.SessionId +import io.element.android.libraries.matrix.test.A_SESSION_ID +import io.element.android.libraries.workmanager.api.WorkManagerRequestType +import io.element.android.libraries.workmanager.api.WorkManagerWorkerType +import io.element.android.libraries.workmanager.api.workManagerTag +import io.element.android.services.toolbox.test.sdk.FakeBuildVersionSdkIntProvider +import kotlinx.coroutines.test.runTest +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class DefaultSyncPendingNotificationsRequestBuilderTest { + @Test + fun `build - success API 33`() = runTest { + val request = createSyncPendingNotificationsRequestBuilder( + sessionId = A_SESSION_ID, + sdkVersion = 33, + ) + + val results = request.build() + assertThat(results.isSuccess).isTrue() + results.getOrNull()!!.first().let { result -> + assertThat(result.type).isInstanceOf(WorkManagerWorkerType.Unique::class.java) + result.request.run { + assertThat(this).isInstanceOf(OneTimeWorkRequest::class.java) + assertThat(workSpec.input.hasKeyWithValueOfType(SyncPendingNotificationsRequestBuilder.SESSION_ID)).isTrue() + assertThat(workSpec.hasConstraints()).isTrue() + // True in API 33+ + assertThat(workSpec.expedited).isTrue() + assertThat(workSpec.traceTag).isEqualTo(workManagerTag(A_SESSION_ID, WorkManagerRequestType.NOTIFICATION_SYNC)) + } + } + } + + @Test + fun `build - success API 32 and lower`() = runTest { + val request = createSyncPendingNotificationsRequestBuilder( + sessionId = A_SESSION_ID, + sdkVersion = 32, + ) + + val results = request.build() + assertThat(results.isSuccess).isTrue() + + results.getOrNull()!!.first().let { result -> + assertThat(result.type).isInstanceOf(WorkManagerWorkerType.Unique::class.java) + result.request.run { + assertThat(this).isInstanceOf(OneTimeWorkRequest::class.java) + assertThat(workSpec.input.hasKeyWithValueOfType(SyncPendingNotificationsRequestBuilder.SESSION_ID)).isTrue() + assertThat(workSpec.hasConstraints()).isTrue() + // False before API 33 + assertThat(workSpec.expedited).isFalse() + assertThat(workSpec.traceTag).isEqualTo(workManagerTag(A_SESSION_ID, WorkManagerRequestType.NOTIFICATION_SYNC)) + } + } + } + + @Test + fun `build - has NET_CAPABILITY_VALIDATED constraint if not in air-gapped env`() = runTest { + val request = createSyncPendingNotificationsRequestBuilder( + sessionId = A_SESSION_ID, + sdkVersion = 33, + isInAirGapEnvironment = false, + ) + + val results = request.build() + assertThat(results.isSuccess).isTrue() + results.getOrNull()!!.first().let { result -> + result.request.run { + assertThat(workSpec.hasConstraints()).isTrue() + val networkRequest = workSpec.constraints.requiredNetworkRequest + assertThat(networkRequest).isNotNull() + assertThat(networkRequest!!.capabilities.contains(NetworkCapabilities.NET_CAPABILITY_VALIDATED)).isTrue() + } + } + } + + @Test + fun `build - does not have NET_CAPABILITY_VALIDATED constraint if in air-gapped env`() = runTest { + val request = createSyncPendingNotificationsRequestBuilder( + sessionId = A_SESSION_ID, + sdkVersion = 33, + isInAirGapEnvironment = true, + ) + + val results = request.build() + assertThat(results.isSuccess).isTrue() + results.getOrNull()!!.first().let { result -> + result.request.run { + assertThat(workSpec.hasConstraints()).isTrue() + val networkRequest = workSpec.constraints.requiredNetworkRequest + assertThat(networkRequest).isNotNull() + assertThat(networkRequest!!.capabilities.contains(NetworkCapabilities.NET_CAPABILITY_VALIDATED)).isFalse() + } + } + } + + @Test + fun `build - does not have NET_CAPABILITY_VALIDATED constraint if feature flag is disabled`() = runTest { + val request = createSyncPendingNotificationsRequestBuilder( + sessionId = A_SESSION_ID, + sdkVersion = 33, + isInAirGapEnvironment = false, + featureFlagService = FakeFeatureFlagService(initialState = mapOf( + FeatureFlags.ValidateNetworkWhenSchedulingNotificationFetching.key to false + )), + ) + + val results = request.build() + assertThat(results.isSuccess).isTrue() + results.getOrNull()!!.first().let { result -> + result.request.run { + assertThat(workSpec.hasConstraints()).isTrue() + val networkRequest = workSpec.constraints.requiredNetworkRequest + assertThat(networkRequest).isNotNull() + assertThat(networkRequest!!.capabilities.contains(NetworkCapabilities.NET_CAPABILITY_VALIDATED)).isFalse() + } + } + } +} + +private fun createSyncPendingNotificationsRequestBuilder( + sessionId: SessionId, + sdkVersion: Int = 33, + isInAirGapEnvironment: Boolean = false, + featureFlagService: FakeFeatureFlagService = FakeFeatureFlagService(), +) = DefaultSyncPendingNotificationsRequestBuilder( + sessionId = sessionId, + buildVersionSdkIntProvider = FakeBuildVersionSdkIntProvider(sdkVersion), + networkMonitor = FakeNetworkMonitor().apply { givenIsInAirGappedEnvironment(isInAirGapEnvironment) }, + featureFlagService = featureFlagService, +) diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/workmanager/SyncPendingNotificationsRequestBuilderTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/workmanager/SyncPendingNotificationsRequestBuilderTest.kt deleted file mode 100644 index c7d54973e3..0000000000 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/workmanager/SyncPendingNotificationsRequestBuilderTest.kt +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2025 Element Creations Ltd. - * Copyright 2025 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. - * Please see LICENSE files in the repository root for full details. - */ - -package io.element.android.libraries.push.impl.workmanager - -import androidx.work.OneTimeWorkRequest -import androidx.work.hasKeyWithValueOfType -import com.google.common.truth.Truth.assertThat -import io.element.android.libraries.matrix.api.core.SessionId -import io.element.android.libraries.matrix.test.A_SESSION_ID -import io.element.android.libraries.workmanager.api.WorkManagerRequestType -import io.element.android.libraries.workmanager.api.WorkManagerWorkerType -import io.element.android.libraries.workmanager.api.workManagerTag -import io.element.android.services.toolbox.test.sdk.FakeBuildVersionSdkIntProvider -import kotlinx.coroutines.test.runTest -import org.junit.Test - -class SyncPendingNotificationsRequestBuilderTest { - @Test - fun `build - success API 33`() = runTest { - val request = createSyncPendingNotificationsRequestBuilder( - sessionId = A_SESSION_ID, - sdkVersion = 33, - ) - - val results = request.build() - assertThat(results.isSuccess).isTrue() - results.getOrNull()!!.first().let { result -> - assertThat(result.type).isInstanceOf(WorkManagerWorkerType.Unique::class.java) - result.request.run { - assertThat(this).isInstanceOf(OneTimeWorkRequest::class.java) - assertThat(workSpec.input.hasKeyWithValueOfType(SyncPendingNotificationsRequestBuilder.SESSION_ID)).isTrue() - // True in API 33+ - assertThat(workSpec.expedited).isTrue() - assertThat(workSpec.traceTag).isEqualTo(workManagerTag(A_SESSION_ID, WorkManagerRequestType.NOTIFICATION_SYNC)) - } - } - } - - @Test - fun `build - success API 32 and lower`() = runTest { - val request = createSyncPendingNotificationsRequestBuilder( - sessionId = A_SESSION_ID, - sdkVersion = 32, - ) - - val results = request.build() - assertThat(results.isSuccess).isTrue() - - results.getOrNull()!!.first().let { result -> - assertThat(result.type).isInstanceOf(WorkManagerWorkerType.Unique::class.java) - result.request.run { - assertThat(this).isInstanceOf(OneTimeWorkRequest::class.java) - assertThat(workSpec.input.hasKeyWithValueOfType(SyncPendingNotificationsRequestBuilder.SESSION_ID)).isTrue() - // False before API 33 - assertThat(workSpec.expedited).isFalse() - assertThat(workSpec.traceTag).isEqualTo(workManagerTag(A_SESSION_ID, WorkManagerRequestType.NOTIFICATION_SYNC)) - } - } - } -} - -private fun createSyncPendingNotificationsRequestBuilder( - sessionId: SessionId, - sdkVersion: Int = 33, -) = SyncPendingNotificationsRequestBuilder( - sessionId = sessionId, - buildVersionSdkIntProvider = FakeBuildVersionSdkIntProvider(sdkVersion), -) diff --git a/libraries/push/test/build.gradle.kts b/libraries/push/test/build.gradle.kts index 3a0b5532ae..475d4a4ae5 100644 --- a/libraries/push/test/build.gradle.kts +++ b/libraries/push/test/build.gradle.kts @@ -21,6 +21,7 @@ dependencies { implementation(projects.libraries.push.impl) implementation(projects.libraries.matrix.api) implementation(projects.libraries.matrixui) + implementation(projects.libraries.workmanager.api) implementation(projects.tests.testutils) implementation(libs.androidx.core) implementation(libs.coil.compose) diff --git a/libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/workmanager/FakeSyncPendingNotificationsRequestBuilder.kt b/libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/workmanager/FakeSyncPendingNotificationsRequestBuilder.kt new file mode 100644 index 0000000000..ef0e38991e --- /dev/null +++ b/libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/workmanager/FakeSyncPendingNotificationsRequestBuilder.kt @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.push.test.workmanager + +import io.element.android.libraries.push.impl.workmanager.SyncPendingNotificationsRequestBuilder +import io.element.android.libraries.workmanager.api.WorkManagerRequestWrapper + +class FakeSyncPendingNotificationsRequestBuilder( + private val build: () -> Result> = { Result.success(emptyList()) }, +) : SyncPendingNotificationsRequestBuilder { + override suspend fun build(): Result> = build.invoke() +} From 89798654cb4cd27c9c6a2f5930cbf05124cc0b1f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 15:17:11 +0100 Subject: [PATCH 06/19] Merge pull request #6310 from element-hq/renovate/org.matrix.rustcomponents-sdk-android-26.x fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v26.03.11 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 005f7516f7..176709cf5d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -178,7 +178,7 @@ test_detekt_test = { module = "io.gitlab.arturbosch.detekt:detekt-test", version # https://github.com/matrix-org/matrix-rust-components-kotlin/commits/main/sdk/sdk-android/src/main/kotlin/org/matrix/rustcomponents/sdk/matrix_sdk_ffi.kt # All new features should not be implemented in the pull request that upgrades the version, developers should # only fix API breaks and may add some TODOs. -matrix_sdk = "org.matrix.rustcomponents:sdk-android:26.03.09" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:26.03.11" # Others coil = { module = "io.coil-kt.coil3:coil", version.ref = "coil" } From 612b56f067976b99377fec3b3c4ab34662c4dd93 Mon Sep 17 00:00:00 2001 From: Andy Balaam Date: Thu, 5 Mar 2026 17:27:16 +0000 Subject: [PATCH 07/19] Call the new recoverAndFixBackup method to fix key storage if it's broken --- .../libraries/matrix/impl/encryption/RustEncryptionService.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/encryption/RustEncryptionService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/encryption/RustEncryptionService.kt index e081d1c9f1..f67b7cb7e1 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/encryption/RustEncryptionService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/encryption/RustEncryptionService.kt @@ -214,7 +214,7 @@ class RustEncryptionService( override suspend fun recover(recoveryKey: String): Result = withContext(dispatchers.io) { runCatchingExceptions { - service.recover(recoveryKey) + service.recoverAndFixBackup(recoveryKey) }.recoverCatching { when (it) { // We ignore import errors because the user will be notified about them via the "Key storage out of sync" detection. From 0d3c12309158129c997c1e205997cfba11289390 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 10 Mar 2026 15:35:55 +0100 Subject: [PATCH 08/19] Setting version for the release 26.03.3 --- plugins/src/main/kotlin/Versions.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/src/main/kotlin/Versions.kt b/plugins/src/main/kotlin/Versions.kt index 4da556e48b..55f7a56410 100644 --- a/plugins/src/main/kotlin/Versions.kt +++ b/plugins/src/main/kotlin/Versions.kt @@ -45,7 +45,7 @@ private const val versionMonth = 3 * Release number in the month. Value must be in [0,99]. * Do not update this value. it is updated by the release script. */ -private const val versionReleaseNumber = 2 +private const val versionReleaseNumber = 3 object Versions { /** From 83cc2011d7c8fe472d7e144d6a822a919327e6a0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 10 Mar 2026 15:36:16 +0100 Subject: [PATCH 09/19] Adding fastlane file for version 26.03.3 --- fastlane/metadata/android/en-US/changelogs/202603030.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/202603030.txt diff --git a/fastlane/metadata/android/en-US/changelogs/202603030.txt b/fastlane/metadata/android/en-US/changelogs/202603030.txt new file mode 100644 index 0000000000..a4b397f1bb --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/202603030.txt @@ -0,0 +1,2 @@ +Main changes in this version: bug fixes and improvements. +Full changelog: https://github.com/element-hq/element-x-android/releases \ No newline at end of file From da3163f0b5c8b348c59e0435fe3bc44ca561e3fa Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 10 Mar 2026 16:22:38 +0100 Subject: [PATCH 10/19] Changelog for version 26.03.3 --- CHANGES.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index a716762462..d2a7e5428c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,36 @@ +Changes in Element X v26.03.3 +============================= + + + +## What's Changed +### ✨ Features +* Support for Voice Call only (no video), parity with web by @BillCarsonFr in https://github.com/element-hq/element-x-android/pull/5995 +### 🐛 Bugfixes +* Fix read receipts not appearing in threaded timelines by @jmartinesp in https://github.com/element-hq/element-x-android/pull/6297 +* Try fixing index OOB issues in `Editable.checkSuggestionNeeded` by @jmartinesp in https://github.com/element-hq/element-x-android/pull/6303 +### 🗣 Translations +* Sync Strings by @ElementBot in https://github.com/element-hq/element-x-android/pull/6302 +### 🧱 Build +* Add zizmorcore/zizmor-action by @bmarty in https://github.com/element-hq/element-x-android/pull/6286 +* Add use existing branch confirmation and progress for file download by @jmartinesp in https://github.com/element-hq/element-x-android/pull/6294 +* Replace `knit` with `generate_toc.py` script by @jmartinesp in https://github.com/element-hq/element-x-android/pull/6279 +### Dependency upgrades +* Update plugin sonarqube to v7.2.3.7755 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/6283 +* Update dependency io.sentry:sentry-android to v8.34.1 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/6289 +* Update dependency org.matrix.rustcomponents:sdk-android to v26.03.6 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/6292 +* Update dependency com.posthog:posthog-android to v3.35.0 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/6293 +* Update zizmorcore/zizmor-action action to v0.5.2 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/6299 +* fix(deps): update dependency org.maplibre.gl:android-sdk to v13 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/6277 +* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v26.03.09 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/6307 +* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v26.03.11 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/6310 +### Others +* Add code to help debugging the saved nav state graph by @jmartinesp in https://github.com/element-hq/element-x-android/pull/6295 +* Add network constraints for fetching notifications with `WorkManager` by @jmartinesp in https://github.com/element-hq/element-x-android/pull/6305 + + +**Full Changelog**: https://github.com/element-hq/element-x-android/compare/v26.03.2...v26.03.3 + Changes in Element X v26.03.2 ============================= From bc957f2a50accd6fb2174b8ae0407b4321e3b569 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 17:01:02 +0100 Subject: [PATCH 11/19] fix(deps): update dependency com.posthog:posthog-android to v3.36.0 (#6311) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 176709cf5d..8569e58cbd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -219,7 +219,7 @@ haze_materials = { module = "dev.chrisbanes.haze:haze-materials", version.ref = color_picker = "io.mhssn:colorpicker:1.0.0" # Analytics -posthog = "com.posthog:posthog-android:3.35.0" +posthog = "com.posthog:posthog-android:3.36.0" sentry = "io.sentry:sentry-android:8.34.1" # main branch can be tested replacing the version with main-SNAPSHOT matrix_analytics_events = "com.github.matrix-org:matrix-analytics-events:0.29.2" From b6321209ed0d84ca2515022f470b3b71e5e08249 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 10 Mar 2026 17:10:15 +0100 Subject: [PATCH 12/19] Iterate on the send button colors. Fixes #6312 --- .../textcomposer/components/SendButtonIcon.kt | 46 ++++--------------- 1 file changed, 9 insertions(+), 37 deletions(-) diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/SendButtonIcon.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/SendButtonIcon.kt index d2d11c321b..1458f925b0 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/SendButtonIcon.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/SendButtonIcon.kt @@ -8,6 +8,7 @@ package io.element.android.libraries.textcomposer.components +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding @@ -17,14 +18,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.draw.drawWithCache -import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.graphics.LinearGradientShader -import androidx.compose.ui.graphics.ShaderBrush +import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons -import io.element.android.libraries.designsystem.colors.gradientActionColors import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Icon @@ -33,7 +30,6 @@ import io.element.android.libraries.designsystem.theme.components.IconButton /** * Send button for the message composer. * Figma: https://www.figma.com/design/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?node-id=1956-37575&node-type=frame&m=dev - * Temporary Figma : https://www.figma.com/design/Ni6Ii8YKtmXCKYNE90cC67/Timeline-(new)?node-id=2274-39944&m=dev */ @Composable internal fun SendButtonIcon( @@ -49,11 +45,16 @@ internal fun SendButtonIcon( isEditing -> 0.dp else -> 2.dp } + val backgroundColor = if (canSendMessage) { + ElementTheme.colors.bgAccentRest + } else { + Color.Transparent + } Box( modifier = modifier .clip(CircleShape) .size(36.dp) - .buttonBackgroundModifier(canSendMessage) + .background(backgroundColor) ) { Icon( modifier = Modifier @@ -63,11 +64,7 @@ internal fun SendButtonIcon( // Note: accessibility is managed in TextComposer. contentDescription = null, tint = if (canSendMessage) { - if (ElementTheme.colors.isLight) { - ElementTheme.colors.iconOnSolidPrimary - } else { - ElementTheme.colors.iconPrimary - } + ElementTheme.colors.iconOnSolidPrimary } else { ElementTheme.colors.iconQuaternary } @@ -75,31 +72,6 @@ internal fun SendButtonIcon( } } -@Composable -private fun Modifier.buttonBackgroundModifier( - canSendMessage: Boolean, -) = then( - if (canSendMessage) { - val colors = gradientActionColors() - Modifier.drawWithCache { - val verticalGradientBrush = ShaderBrush( - LinearGradientShader( - from = Offset(0f, 0f), - to = Offset(0f, size.height), - colors = colors, - ) - ) - onDrawBehind { - drawRect( - brush = verticalGradientBrush, - ) - } - } - } else { - Modifier - } -) - @PreviewsDayNight @Composable internal fun SendButtonIconPreview() = ElementPreview { From cab6344f1b0e3f18370f002646906fc31b50cecf Mon Sep 17 00:00:00 2001 From: ElementBot Date: Tue, 10 Mar 2026 16:26:49 +0000 Subject: [PATCH 13/19] Update screenshots --- ...s.impl.attachments.preview_AttachmentsPreviewView_0_en.png | 4 ++-- ...s.impl.attachments.preview_AttachmentsPreviewView_1_en.png | 4 ++-- ...s.impl.attachments.preview_AttachmentsPreviewView_2_en.png | 4 ++-- ...s.impl.attachments.preview_AttachmentsPreviewView_3_en.png | 4 ++-- ...s.impl.attachments.preview_AttachmentsPreviewView_4_en.png | 4 ++-- ...s.impl.attachments.preview_AttachmentsPreviewView_5_en.png | 4 ++-- ...s.impl.attachments.preview_AttachmentsPreviewView_6_en.png | 4 ++-- ...s.impl.attachments.preview_AttachmentsPreviewView_7_en.png | 4 ++-- ...s.impl.attachments.preview_AttachmentsPreviewView_8_en.png | 4 ++-- .../images/features.messages.impl_MessagesViewA11y_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_0_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_3_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_5_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_6_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_7_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_9_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Night_0_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Night_3_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Night_5_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Night_6_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Night_7_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Night_9_en.png | 4 ++-- ...raries.textcomposer.components_SendButtonIcon_Day_0_en.png | 4 ++-- ...ries.textcomposer.components_SendButtonIcon_Night_0_en.png | 4 ++-- ...braries.textcomposer_MarkdownTextComposerEdit_Day_0_en.png | 4 ++-- ...aries.textcomposer_MarkdownTextComposerEdit_Night_0_en.png | 4 ++-- ...libraries.textcomposer_TextComposerAddCaption_Day_0_en.png | 4 ++-- ...braries.textcomposer_TextComposerAddCaption_Night_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerCaption_Day_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerCaption_Night_0_en.png | 4 ++-- ...ibraries.textcomposer_TextComposerEditCaption_Day_0_en.png | 4 ++-- ...raries.textcomposer_TextComposerEditCaption_Night_0_en.png | 4 ++-- ...ies.textcomposer_TextComposerEditNotEncrypted_Day_0_en.png | 4 ++-- ...s.textcomposer_TextComposerEditNotEncrypted_Night_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerEdit_Day_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerEdit_Night_0_en.png | 4 ++-- ...xtcomposer_TextComposerFormattingNotEncrypted_Day_0_en.png | 4 ++-- ...composer_TextComposerFormattingNotEncrypted_Night_0_en.png | 4 ++-- ...libraries.textcomposer_TextComposerFormatting_Day_0_en.png | 4 ++-- ...braries.textcomposer_TextComposerFormatting_Night_0_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_0_en.png | 4 ++-- ...s.textcomposer_TextComposerReplyNotEncrypted_Day_10_en.png | 4 ++-- ...s.textcomposer_TextComposerReplyNotEncrypted_Day_11_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_1_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_2_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_3_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_4_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_5_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_6_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_7_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_8_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_9_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_0_en.png | 4 ++-- ...textcomposer_TextComposerReplyNotEncrypted_Night_10_en.png | 4 ++-- ...textcomposer_TextComposerReplyNotEncrypted_Night_11_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_1_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_2_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_3_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_4_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_5_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_6_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_7_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_8_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_9_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_10_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_11_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_1_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_2_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_3_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_4_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_5_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_6_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_7_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_8_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_9_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_10_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_11_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_1_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_2_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_3_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_4_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_5_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_6_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_7_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_8_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_9_en.png | 4 ++-- ...s.textcomposer_TextComposerSimpleNotEncrypted_Day_0_en.png | 4 ++-- ...textcomposer_TextComposerSimpleNotEncrypted_Night_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerSimple_Day_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerSimple_Night_0_en.png | 4 ++-- ...es.textcomposer_TextComposerVoiceNotEncrypted_Day_0_en.png | 4 ++-- ....textcomposer_TextComposerVoiceNotEncrypted_Night_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerVoice_Day_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerVoice_Night_0_en.png | 4 ++-- 96 files changed, 192 insertions(+), 192 deletions(-) diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_0_en.png index 0a338dca86..9b77a1b471 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a776c7cb4a3996e3fdb8366f73201ffdc693eed14bfc05482dce3e1418b25bd8 -size 400144 +oid sha256:54298b08251d3bd32c451dbb2076a40f20254f78806c30c0647f1bf062f3df7a +size 399342 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_1_en.png index 389dca863d..27d8600ab5 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6cd92a9a0de70f7f777fb72b966c72d5e2b0443b91a3da45e0b59c5061820d6 -size 399861 +oid sha256:02bb9e9de3b0ef480cedbed50483bdd3a899497ecc40ead72491106c6f6b6611 +size 399030 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_2_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_2_en.png index 8ae3231f3a..76e98b4314 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64ed3e00c2134d5f437023c48a7a1e52c7a48b954628ea26dcc3ade0a0193079 -size 59670 +oid sha256:6e8aabdc6d15c46ee59ba0e9d2b3b3f19500801c96501b39732d7f9f95e9130f +size 59204 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_3_en.png index 0a338dca86..9b77a1b471 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a776c7cb4a3996e3fdb8366f73201ffdc693eed14bfc05482dce3e1418b25bd8 -size 400144 +oid sha256:54298b08251d3bd32c451dbb2076a40f20254f78806c30c0647f1bf062f3df7a +size 399342 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_4_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_4_en.png index 0e420479cc..3204029c4a 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c6a64aeca9d6f2b8e774d7b0582cd8d721a40de28e378553fc38606c6ef7fb6 -size 59541 +oid sha256:9eba0f1d35c5456b58a09ca8370c93f0d1959e8e9aa503501cc49ecfaf198522 +size 59075 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_5_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_5_en.png index 570cecb278..394e42e69b 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:621c2bb29fa03f858a78d141a2482f701ecc265784616c52c61b7876c8ca1642 -size 86580 +oid sha256:e078891f5a377bf42cb787f436dcb7471de959db0c4d3afa5d7cacee20b2bf15 +size 86126 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_6_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_6_en.png index 738260a2ad..50341180e4 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5619a51f1b95e5372d0d87cb39153455c0ebac8c2eeb679ac5cc0efb6460ec14 -size 73124 +oid sha256:a56951545b00dc74fd7780648bb2a508176c47df6a2ce6920f2b8a63d15f58a5 +size 72675 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_7_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_7_en.png index 1579753bf1..8f18c5dace 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e815e96adf359dd888f8a71cc4727b4769948c150935c9a4af4f6158a1bf1155 -size 405883 +oid sha256:c0008cd2827cf805678958567bbce2ca86640a5f27e95ebf1c9cdbc0b86edfd0 +size 405032 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_8_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_8_en.png index 57ce42ef07..43c6183fdc 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsPreviewView_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6af0c78bd53ed3ec6a59ee7e0ae01214ae58f2d7d18ee39f134433cc628c039 -size 83272 +oid sha256:0b08c65638e961e2fa5f194e93c3a63ead0976b13c1b9821850c3ee865eac0a8 +size 82767 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesViewA11y_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesViewA11y_en.png index f155455ff0..51846a888b 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesViewA11y_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesViewA11y_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ba3418ff659fcf19c24bade74c233a088e3ce71d83aea78c8aa07b06a87a69d -size 132254 +oid sha256:ba76e7df81874aa6549a5f8ca7987046a4b43a63852c83fece541dc319e839d6 +size 131727 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_0_en.png index b7aaaaf0e1..3501707206 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:08ec28f42cc67c98eb6c3dfedc4664e42929780673f43be94d37d60f116ba84d -size 57007 +oid sha256:b92c8a8283be1efed5faf6fb5f8a091f225dee38fd95e1a1b1914fa06661dc21 +size 56261 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_3_en.png index fa8a82d353..58e652df1e 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c3fa5bb746a2a005c9766b9c903d03695c5cc5124c81449519fc7a00fd55fa2 -size 55831 +oid sha256:c89a2eeba5fa540b6ab6516da1d8dd7810ee0754149a8a7a07cbae2182d106f5 +size 55364 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_5_en.png index 22372c13f9..6e06afc836 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72767c6e523a625e14f84c4ea299552051c09d834480c3587bfcc80acd9c59f7 -size 58936 +oid sha256:832b227fc82b946df042658d134f1c699c720d3e153576259fb145ec9d0c4c45 +size 58441 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_6_en.png index e5e2cf03f5..4c3689dedd 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9e9d735218cd7cc43f104aed351dbd1b857cdbb7cf0d581316e077dc3dfb6b9 -size 49248 +oid sha256:b14de263a1f2356b3e84b2a633b0ed837bd160d04c1ec8eeb8c55176856e59ce +size 48755 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_7_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_7_en.png index 8baaad265e..461d173e97 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2f91f9b5cbad3fe3d0e87f79cef24481f758d813f90e6ef5f404860456d8e5d -size 60114 +oid sha256:407301c3ad51be44fcfcd804954a672e677ea1bc59af39e4269100acc4f720d7 +size 59368 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_9_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_9_en.png index e58d0a4929..284f92cb26 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7efb7d9e793fc763e183027a01abe282f49087135430cfe7c11760b0d7cb39c -size 51622 +oid sha256:473a4f7d9623a7351399d3fcf98e30adbd31feabb23efacda83fb68460b75e48 +size 50912 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_0_en.png index ba0513a6fe..33ed4fd667 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:78ab1575bfee32b875880bc9928ec45447ff2b7ed6d6761e4d9877ca205ca47e -size 56338 +oid sha256:ccf988123f7fcf7a2d6ad3914d3e1a30dcf99c49ada7fb7dbaaacb64d7f2250e +size 55562 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_3_en.png index 7cf0487ffb..f926ca104f 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed4c08e8ab1fbf30b0ec52bdf3cd96a1245f55b8a055b0b938db39a550e731d6 -size 50980 +oid sha256:1612a4b0e0df958cf99295ab318ed8260d5c12b705f65f5db4ab2341930564b8 +size 50518 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_5_en.png index bd4c0921f3..eedb0c1ae8 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:661f615c15ce9005273638fd8d86716e186671733e1ca71b06484f87506ace86 -size 53978 +oid sha256:f69563c42d5315b9e4203719128340fab045ea3473c494e1a1376fe4cbb3f0d8 +size 53521 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_6_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_6_en.png index 7a5b7a7436..ffae0459fc 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d49f25567be8b0133318295b94ea519c507d939c86c875dececf99fd37bf9257 -size 44556 +oid sha256:539799354ad5b383c308779b1278e879db4542d9d1c870c13a54a0ae927767fb +size 44098 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_7_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_7_en.png index 772f324cf4..1b03d639f8 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fe5d581d00cb389a432ce36b228da90fd4c120f5c362bb12ba9406fbb53a6b2a -size 59073 +oid sha256:c623703f53cbf1ae42e1d05af88e3c94e5b438cb96a3dc5cd234026b29bf0e0a +size 58286 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_9_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_9_en.png index 507aa9e4d5..dbe5409ce1 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:214e70ab7a16f9afeb9a27cf6335f238e7509eb60693b1ca2976b6095207c311 -size 52506 +oid sha256:ba5ae56e80ca9f5d3e5e2e0d50a2cbda7870c6286f350764dac7817d533d6c18 +size 51735 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButtonIcon_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButtonIcon_Day_0_en.png index 3a38e2e177..b2f8096292 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButtonIcon_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButtonIcon_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5fecd68ea15af9dd73ad56fc65b65c8b769212307467a190730648b47fe7cc55 -size 8671 +oid sha256:93c061fb9d41a37e4736cdbe964fe98f9814bb761e93948ec57b4ff541792f55 +size 7491 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButtonIcon_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButtonIcon_Night_0_en.png index aafaca1f10..50630b846a 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButtonIcon_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButtonIcon_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55b02c8ba432b768df833a7ba2e4745b7a48f47bb1601df3bf423e369f95bb65 -size 8495 +oid sha256:4bbd6e9e274341f442af1fb720e8651f8216b9b6d1bb0a2ada2477047ecfc713 +size 6918 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Day_0_en.png index 9e06344115..356b25d39d 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:57ee725dec5b62eeb02751da76ab86a12a3f5f6576b95d8f8f326901f9b75616 -size 52182 +oid sha256:35e0601856e81bf396b8457ed26ded904ec3acd005e68908c4e94a969144d0a7 +size 50343 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Night_0_en.png index 416d9128dd..5bc9f26ad4 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2bc4850604b7c1eb79bdb6ae143e149949a9af9c32b19aa49c56ba20987d484e -size 50396 +oid sha256:ad65bc6adeac3a2679b4315db178af99aedb8e40d4952dfa7be10b87d8055dae +size 48200 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Day_0_en.png index b92239a4ba..6a1141a4d3 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1aa0f7508a9a4e612ea3698f9343f61bd766429d73477f6607e2cddd2bc7d9cd -size 53331 +oid sha256:30a1ad561aa2bc5dfa95f5494a5f016a7b4a51304765960eb71a466c1d59f3b0 +size 51396 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Night_0_en.png index efbae9d077..f4824c08b0 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43fe0fa0c03fb40467763adec06e21ceef05fe58a31c5098a6facda008693f87 -size 51570 +oid sha256:e0f904191bb608dc61c489db76b71bd66aaf9125b8138ee5696e3e2a35a3e623 +size 49605 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Day_0_en.png index 9897a905e8..4d6bf8bbf9 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81e733b6bc899d6bd3a6305751866277aa85b5407e930d9a649060f1a1215599 -size 44786 +oid sha256:008f560c95d92128a7978478563d47bbf57bc0ed1d165f69c60f3d088a8b1798 +size 41741 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Night_0_en.png index 84b590a2d3..44fd390226 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61c882e1d8feb6e4cad63fe10924e8876ccd0f5400f32e5b8db299cba886eac5 -size 42832 +oid sha256:1e8f94bfe6ac910599edd6d2a49ed0369e2304dc589cb574cbf095157e2ae507 +size 39148 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Day_0_en.png index cd30c02d76..f1516732c5 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9927b817b7a30b9ae2d372a666c9f0e2ea7e660738eff7fd446fa1b71b99a24b -size 52026 +oid sha256:66cd907bd23752fbdea45a6505eb6548bba630088e1a6c00d8e32de3fc64ae0c +size 50427 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Night_0_en.png index e6364f7607..d5140b6688 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8bde0663870910a8f5aa4d10afa501210d0dfc6b63e582432eccbc190d9ff0d2 -size 50790 +oid sha256:ce7294f8f9b2d847ed17970142bb54f3bf54c7365661e216d74cad1103e7739c +size 48581 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Day_0_en.png index 556e5235ed..63246d62b3 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f2f40629b39b310a6e10541767b9aa6f18652ed98537558a5f7dd54ecf1e1d4 -size 63109 +oid sha256:f29a4e1068a8416fb78a394ed87ad195d18928a6f7c58a513f20a6b5e46372ed +size 60684 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Night_0_en.png index 0e91b2fea9..bf9b1f1a6f 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8602db8694b0aabdfc55cef65fb530ecf807ec0c8a6436085279818cb147a937 -size 60565 +oid sha256:c133f56b6ba583b28684ff44e07e19ca7fc75efa6341d3e2413c2cd61a27099d +size 58169 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Day_0_en.png index 9e06344115..356b25d39d 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:57ee725dec5b62eeb02751da76ab86a12a3f5f6576b95d8f8f326901f9b75616 -size 52182 +oid sha256:35e0601856e81bf396b8457ed26ded904ec3acd005e68908c4e94a969144d0a7 +size 50343 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Night_0_en.png index 416d9128dd..5bc9f26ad4 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2bc4850604b7c1eb79bdb6ae143e149949a9af9c32b19aa49c56ba20987d484e -size 50396 +oid sha256:ad65bc6adeac3a2679b4315db178af99aedb8e40d4952dfa7be10b87d8055dae +size 48200 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Day_0_en.png index 8d71b4b062..cf5d4dec00 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af6ef6548666450633aac6b9449af5084065c630acd16a2d090afc89d3000d3e -size 63946 +oid sha256:6dbcd0f76ceb070d1a7b3f9a22292b37c5bd9fa005915233db7bcb8f45d4ccef +size 61775 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Night_0_en.png index 23c90a16fe..d7cb6108b0 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:407c7a9cda53a42b58e11691da435ba590108b03871e8d64572950e7260b57a8 -size 61044 +oid sha256:335853740399624113c6e83d2cbc411691eb74759bcdcc1575b7fa3d10ad4ef6 +size 58751 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Day_0_en.png index b38709687a..d04df1d38c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c277f08b913f6b648a1df737654b341a66e937758b8d1c6d8e98b63ce62c2a9b -size 53535 +oid sha256:c8cf7ee8e457e03a2abad0419fb8466f3f43b85abeabf705dd7af412dc4e4d45 +size 51250 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Night_0_en.png index 5be3535dc1..9b53a68b10 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ef8e4978b968d09dfe41cedf4341e3f0fa51cce7ce5c9e1b45667a328a122920 -size 50690 +oid sha256:a6db26883ef045ff984e8cbf6256a01b8221825efa29b82364187c6b4fcf9d2a +size 48653 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_0_en.png index e989df0055..2b6ad7c413 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0032f4a01bd1fab1a8db4bd3c89bd634e2cec4473844c2dd9463fdfe7faf9755 -size 73375 +oid sha256:acd46123208b547517a07f6e00476c40293a6c519e15acab9ef57d44658b2045 +size 72217 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_10_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_10_en.png index 13745a5546..042fc0844f 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_10_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5695860993dcf2ad2e21262401f400d87d75d75eaa831cc8a143ce4dcfb98f1c -size 59982 +oid sha256:8cfe2ba87059ddd4b442d627380813af85c55f41ee9fca2cffdf6054cee50c30 +size 58821 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_11_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_11_en.png index f681dbba36..a528061746 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_11_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8de4add23d101f0ec5b04bd8d051649c4143e77d9cf41949071f9cd4299a3aa0 -size 72781 +oid sha256:c2fc7e9b3c12e1f0ca068a9fe5b53fc0d22926a5ec5fda56d8c5304b9a875b5f +size 71626 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_1_en.png index d7248294ba..1c7a721bb4 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1eb4fac4ebd2544d54828831809b4b116530a86316be88ad26f9ae5313dad14 -size 81423 +oid sha256:d45917c3e5cea88a3258044c40b553e7289a85d9b2cc8e3394ca2137081e2220 +size 80237 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_2_en.png index d2c5bff854..ef191cb121 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d7e08a93435c4380c040e63daa8e6edac47af9946d3075b80abd7f71e53d5ac -size 62489 +oid sha256:5d50faa01b0567152ca88b187d602f48c260048484ed9576d685d0a635d47c68 +size 61337 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_3_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_3_en.png index 1d5cf8ee33..d2d7c85eab 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2b3e1905c73b7561c8400c5426bd7c7d95897d9ced5de3212d1f56d806053e1b -size 61416 +oid sha256:112c9de20f972933b15936fb1f1e4d56457df66d72075845c56f88cf261dba76 +size 60253 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_4_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_4_en.png index cfd4c94e92..7dcb53df78 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91e00c997726832f255ce5b376213e1160279f172b60676d853c981cc4b7afb8 -size 68346 +oid sha256:cf49f2a364dc2cc054dbd81a67c9ddafb2cb8711c9300f0ac8f1f9c4e3f77ab4 +size 67206 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_5_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_5_en.png index 808c34da24..630d18327f 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_5_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55734a9a9725123cbf1d0ebef46579d3a3939b2898f7144e529b71d447456577 -size 90320 +oid sha256:b53e8135e3b07a6a4a89def1735146e860c2d52e35e8a4af694b8e872b38e13a +size 89219 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_6_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_6_en.png index 99b61cec64..d7edfa7075 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e8f73bcb2919e607d76dbc85ce82d8c8bf9029708bc2b3d21f212a5b8f8c187f -size 60826 +oid sha256:21899812bbb9d0cf288911fe681626fcc978a6310527e242610d3392d4a4ef66 +size 59667 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_7_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_7_en.png index d7c9951dcd..93f6655f7b 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_7_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f36ea905ab1718fbe97a89171c21605cab4396dec6a83a0465b945fa2cf2fa79 -size 62046 +oid sha256:1cb7578c689fd3cd81236d25d8853f6203a91d8879600e72f23e80c86d8b68d9 +size 60860 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_8_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_8_en.png index 209bda9d4b..5ef915812c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_8_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6adcff4197af21036e0f3ea834739ce50e700484ba60ae343905df5926b5f0d -size 68136 +oid sha256:d23fdafbd834da43a6fe57d5666fc6a3108359838053961a419a9b90a1f7aa53 +size 67001 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_9_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_9_en.png index 0c20eb1432..e4f242a535 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_9_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:212b7c60ce30503bac88dbb14dc2a7343f728039286e4c54e7bc5b82a06dce6b -size 60393 +oid sha256:7f70b173214fb5971f3db853c85217f7600e9333a6bd411c11e3f1aee4c4e932 +size 59220 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_0_en.png index 83cf55a015..b70b36f011 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f27bcfe743451f511f73aa5c096db8a424ce8ecbe199d8cb920010a07037a18 -size 71114 +oid sha256:fea3bacf1a1927a05b2b515fde06d176e102485474cbed004a781e8d2d7385eb +size 69296 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_10_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_10_en.png index 2f2882a73c..8e8a0f6267 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_10_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3314f19a32c7a8f3ca0df6262271a60760f7cecde60879bf54b26e398197801e -size 58113 +oid sha256:7661c233ef056af6e014a117530d55e336935ad071467a75f2d165657f33aa7c +size 56339 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_11_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_11_en.png index 339ff40223..31d355fe9a 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_11_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:03cf43fba473e09ce73354c3ee5e9fa7d051243610eedcdd576a1fcf8c21d4b0 -size 70560 +oid sha256:b8b91059084d9cd410414fcea6dc6b3489969f062184834ad89ac9ad5b9c2ee9 +size 68744 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_1_en.png index 2816c5a423..02f93e0e60 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:85f12e1a86dd50f69766205b627e7db7c5a6b0f37c0c921c148783a1ebfa9bbf -size 78970 +oid sha256:2367a9ca1ad216529eb5ca70406fa28788cd9ef2c3fed9dd66e9a5e4acf3080c +size 77172 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_2_en.png index 5ad4170308..ad9553b49b 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d0d91f146f43abfd271025b586d87e0153aac00803bed1682fb381bc2750d8d -size 60652 +oid sha256:efb5dcb70030f73913dc05ffdb70f757f71b615372e02d9e21bbaa9eff91befd +size 58801 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_3_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_3_en.png index 0b8962cfdd..330aeb839b 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70a9665d9aa337efdd4ac4beedab6dbaddc1e74b41e43499da8351fb59fdfa1f -size 59573 +oid sha256:f92132cbeeb5543e8c4f1e1221b07da57dd6f3abc119c46ec291f240f1e5a522 +size 57759 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_4_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_4_en.png index 2274e50f03..bae7ef8a54 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd5b3afa248eb6486c3be193a48218ace0c3b62c32961ccc4e769cdd822de612 -size 66348 +oid sha256:895ba3794457f13dcb3e59499924be167f8408ce6e3782a7b26b452226bbca6a +size 64540 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_5_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_5_en.png index 87b14146d5..5f4834d9a0 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:88b66579a22b2097bad6fb912e646d6e08905fdc187629a21ba6e469faf63883 -size 87210 +oid sha256:c1df5a7f329260f6c019207ff66b5df2aab8f9d3fff026ea695111361b46c202 +size 85539 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_6_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_6_en.png index 41e925ccb0..948fc39bf4 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_6_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6f22d7e6659dbe26557cc766d156461ccb93d46c725c7c8acd7f0a268103dcc8 -size 59008 +oid sha256:b3f7417d9135f5b502429a7030a8531a60f45044a5518806286d1f28487c3a21 +size 57198 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_7_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_7_en.png index dae6183594..44e1253497 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_7_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f86b4b4191628ed78d7e5d281eb755e36f59f02160f850cedeafa6d03cd2a2c -size 60115 +oid sha256:316ac7e8b79f52192a8c699e903525be92b9d51c86242157b724a59b39c4dcc6 +size 58254 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_8_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_8_en.png index 280679f6bf..86e8f3d34c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_8_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d55e7cacfb2ca44438c9d8e145c35f52966ef9281da0745d5d8806d698b6e9dc -size 65958 +oid sha256:df811a1843d3d88ac021d8df892c2b74f61a679317ed40234438459833b90fa9 +size 64134 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_9_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_9_en.png index ce75159f71..c710b757c7 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_9_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5351b897a218d2d649c7e6e34e1f187421e786754d69bc007509b77f931b2248 -size 58580 +oid sha256:3dddaa9eba56b7c02c7e42add553fcf24b3ded18488bfe75e0decc7270386b29 +size 56795 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_0_en.png index a2d62369c8..0e3eae9632 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:591e982b4aa78f9302b6e2776a5d8a8f80541397fbf32e4b9bafce44b6b10bb8 -size 75446 +oid sha256:cf7b37ce6ac1d6430de6d4ffefc2864f0adc502a395a204b3c516dbd901f9710 +size 73331 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_10_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_10_en.png index ae47d77b5b..f385aa4ede 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_10_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c75ba9c2d470fb6332b140b798be06364b8c1982f997fc3e8ab5048c5a38f3df -size 59060 +oid sha256:c18604b8f5aaed6e4093d3f792ad112668402541ac09547bdebd6a5adbfca35b +size 56876 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_11_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_11_en.png index 563d6c7c23..844164d312 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_11_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e91f29fc32e32cf25fd227cf57e4552fd2a67d5ebf7d2a4c628b5d8084775d5 -size 73680 +oid sha256:e78937ef7c2ce586b6d6fad9945e10475375bbbcf67ca7473746998c3486fb7e +size 71568 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_1_en.png index 40f64e5d3d..af3da030bb 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:352ae3616bfdd8f576f4edad5bb0659011525a47d741ad0d00f8c8935de90656 -size 84997 +oid sha256:352ffdb9823e33d921b912d40f870e689e02afd242b635dddd6cfb18acbb417b +size 82878 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_2_en.png index fa7ae34797..ec548094a0 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dab1138d9628806613f316590864fa63eef27447dfc8c7f962a95c420a867b1f -size 62142 +oid sha256:b5c5f14ae394bf9a726ef2868d5f1d466fd58384e1e9d4a9b1b982326fd1cdeb +size 59898 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_3_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_3_en.png index 74f0b642bd..1196c22670 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6031b34debeafd2268f21caa6b8e3637c1667ad1dbc8af1e40e2b9aa962a054 -size 61215 +oid sha256:f8ec81667b8685dd1789468a8a0ddf8a23f7346d0423bfe80bdd3b92dee1ef6e +size 59016 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_4_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_4_en.png index 3747c953b3..d6c4992e5a 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d279c122c142c811bfe5a23aa5dd11ba963d17ab94f473dd68441f2b79da655 -size 69136 +oid sha256:4e0141795939864b6fc0c88308ea4aab747dfe86eba115078a72ee1bdd40843a +size 66903 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_5_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_5_en.png index 99a6d3f284..2dc331d658 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_5_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9f36fa57a2b411b9309fd67075eaa40e7b4c3eedc586aa09c8336418354397a -size 103763 +oid sha256:f0c716998e33f71d2cf35afbad69b67bd8aab5c35a673e88b9a337f6f327fd1a +size 101844 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_6_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_6_en.png index 33c5b8f670..058eca78a6 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:864d912c15ce2d467b5f463c2871495cec92679468e9bee7f2ac86641169edf3 -size 60428 +oid sha256:e5a6121ba1b68910b48f0c90fc59ea0c23243c993b61bb4a6614bf6faec4096a +size 58236 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_7_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_7_en.png index 157d1bdad4..b9b5b7dd63 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_7_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9db5503ca53899c8faf8f67e801ba887eab842cb621f25c828651eeb572e623b -size 62346 +oid sha256:ea3f311c6811cc294c17c4d79966d8bc607a8fe5d47589f829241d3078e34c53 +size 60080 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_8_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_8_en.png index cfaf96944d..fc69d0c81c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_8_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d880de0d5f6a11cd9382ad74e974b16cbb14bdf35d2445f12b5bf38045a4709e -size 69751 +oid sha256:0f924131a517897decc596cf360b7aed621a358a1a58ad7e5e512e5caab6203c +size 67493 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_9_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_9_en.png index afd65f365f..1e7f28881c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_9_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb835b8ad6b96a84f333b9fcfa94a19c6449292bbc9315b22bff10cbab466e6b -size 59798 +oid sha256:06ab1425d23bdb09440fd469638d585dd375dc97b8f371f1dd41778693eb7699 +size 57612 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_0_en.png index b2aa457bc8..3f94e2e4f0 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b53a616a2ad92bf7d6cb6bfc98a4207b962c4a9b67da8b5b3c9322e8b7618ee -size 72989 +oid sha256:46361c3842aa0de314258617d6bb1ac59d25e7d0f27c04aefed9e2dbebaad826 +size 70506 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_10_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_10_en.png index 406fc5f34a..e480e5507c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_10_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04578c60851c3005ce3d971d73bb52bae9273519069af12d7a4623208fa60aa0 -size 56725 +oid sha256:cebf26e4a7ea1f5690cb33a4741690b62492dc3ebc9b89282a86c5231bbb7c70 +size 54095 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_11_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_11_en.png index 183c102371..c22cf35b24 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_11_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:961143bfc26d1d6fcccceff6e88439fad5537db18d375fa9b67f3050f3adc0b5 -size 71167 +oid sha256:964388cd9499efcef1c9db6ab043fff4edad66c6869e835423d159f97f2646ca +size 68711 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_1_en.png index 9c7386eeca..308b1d45ca 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aef1352d644f41edbe6a479ee3372322d6dc4400cddf31f8b1d5d5f6d4cba1c6 -size 82275 +oid sha256:59643dd87993225d3ed473a73b49a29dfa5e4f67dc3481860a06145549ee2d57 +size 79755 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_2_en.png index d9e6a87c2b..89670dfe32 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:684b1cf5837940641b83f890356d4572924e58f0986197720d7aea30a6561fb5 -size 59902 +oid sha256:31b0e58c43e7a1b4a361552945011bfe82678cb5259b6739867b031266d43bde +size 57414 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_3_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_3_en.png index c5aea702a6..c674450be6 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:762035e75f98c1eb43cb38cba765a6383ad5a3e26d43f93311b8c57bf4e0beb0 -size 59031 +oid sha256:426fc39c6e0c8331e98980fb4341b111a5cd468e4cc488483d222c5ff4c4fc3c +size 56514 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_4_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_4_en.png index 1024c810b7..d95778b554 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:71fd8b8ea41292a7cffab22029d94e4994e25072472ec7e4c3a318d8f55d0376 -size 66755 +oid sha256:5e2de4f09982c760d7bcfb51f7513dfa2e299d1fc9c847cd00d66704767e4f34 +size 64196 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_5_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_5_en.png index 9ea213e95a..38374a2893 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6fe347e8465bcc7b84ecafa816ac6dc30f9c662b9f24bb470a0e34bffcb6b98 -size 100703 +oid sha256:68e841e8fedcb5c5516ce5848bb698e4f93249e1defae6ebf922139f51495ec4 +size 98388 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_6_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_6_en.png index cbe97e0ad2..ddc7e1936d 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_6_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83d24bed7f708ad81a2e4d1442b1733f8c23683f7bdf73e01eb0d907676fb917 -size 58168 +oid sha256:708a0d1403e9f6b1ca3207aa284df9a3039399bb1d785affd3e02fa3be1abea7 +size 55622 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_7_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_7_en.png index 71c00f5260..3ae2f88a3a 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_7_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20e6950531a49c366d9f42d10e17c227cf0c4895fe8febed7c5475a6af362717 -size 59958 +oid sha256:e78b8d40c4b24d0b99a15b3a0fc15f2056fd3a6741b8ae3767670ef82562cc17 +size 57493 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_8_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_8_en.png index 2f1c454a6f..b1ac77f79d 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_8_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:910a6c465201e7c641db37aaf9d7d1fb391fe8ae7e48ba1bdec8479e2aeedd10 -size 67136 +oid sha256:7f42650a174ccfee6dbf722045a0147d0ff5e5f3a0d7fcdd14a46a32bbf9ddb6 +size 64628 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_9_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_9_en.png index 3be7802cdb..75bd4d7b48 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_9_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:172585635bc1d7e9f535a653bc4821ad3376f2baee3ccce4796fea7c4cc80d0a -size 57447 +oid sha256:e6844ad008747abff414d8240b9ff533efa7f162360ab1fc8db737a3039e665e +size 54884 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Day_0_en.png index 9b6c429581..046054f73f 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f9daef64889efb13f8a1c319401a7197e79da26d0117048a04c1c7f20d4320e -size 56434 +oid sha256:8c2bc8df489462a1dea1f94c23cc7e5b9f72ba2d98b26f726c6dd9071c421e89 +size 53915 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Night_0_en.png index e7097f8d5a..6d8a3c3823 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d60d8000c0050887c13e3721ab46b8df07710b9322afd5bad1e9b0107aaa71a7 -size 53758 +oid sha256:136398e7d5595f1baa0d1190d5273a0c5a4b98494105f1970e6b0d0b68a1355d +size 51330 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Day_0_en.png index 3489d96c85..d4277fc7d3 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0edaf8d7e95ea0f438f7a4932f24195a8f531718052ab6874705a2cbc7e23b33 -size 46222 +oid sha256:6f98d6e3d98020e0285cd212eded2ccb38e42cb4bc534f9aed951d15e7fd4df7 +size 44011 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Night_0_en.png index 8c8c71b171..6b6632e07a 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:33bed5679d72636c2b899c28fbe9b188537a12c9b1e189cb7f128b600e77700d -size 44294 +oid sha256:61883d8c6e26a7d9e868f9bdb71a564b62210af00e67af1d9a52a0fae405be09 +size 41551 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Day_0_en.png index 9b8ade34d4..e5c8277d21 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c394e9a8d80c6081b9759817e06077508d02d34b972edc6a44d5ebe428679448 -size 36087 +oid sha256:4b9ed5a39a881471e8b224edbcc45d46a20db0539e065c44a5eb0d56a24efc22 +size 34439 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Night_0_en.png index 6b976713b9..242f4f2874 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e72a58d07138e2e771ff848f435cfb04956c4f96c66e07100dc1a1905c126fef -size 34267 +oid sha256:571383a1822fb9cd4eb629d28260556172ff40a8260c9d05278434b2383a11da +size 32594 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Day_0_en.png index 19c9f9f4b7..72c221feb6 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6852bf756c3f1d44e21409b884c422773c887b1623b2a80c8394394916ed87f6 -size 25210 +oid sha256:9036efabbf937551b240326a092f037398ee2a9586203cf1c05a0725200bf3bb +size 24068 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Night_0_en.png index 983960cb05..2ce6386e00 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1376d130c9cc5ebf37786708ef3acd75ad11516db6d23a81906ff5ebbfa002d0 -size 24184 +oid sha256:5ebcd0a5c857202d82a3685551cde4af4abe48883b5b19296188d8130dba295f +size 22622 From 06671b4166f1be5c7fa896cac9727d3461f79945 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 11:09:48 +0100 Subject: [PATCH 14/19] fix(deps): update dependency com.posthog:posthog-android to v3.36.1 (#6316) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8569e58cbd..2caa588c68 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -219,7 +219,7 @@ haze_materials = { module = "dev.chrisbanes.haze:haze-materials", version.ref = color_picker = "io.mhssn:colorpicker:1.0.0" # Analytics -posthog = "com.posthog:posthog-android:3.36.0" +posthog = "com.posthog:posthog-android:3.36.1" sentry = "io.sentry:sentry-android:8.34.1" # main branch can be tested replacing the version with main-SNAPSHOT matrix_analytics_events = "com.github.matrix-org:matrix-analytics-events:0.29.2" From 5a3264c32b4481dd934f5c6611bb6318d5786109 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 11 Mar 2026 11:20:53 +0100 Subject: [PATCH 15/19] Convert file to Json5 format and add trialing comma --- .github/{renovate.json => renovate.json5} | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) rename .github/{renovate.json => renovate.json5} (68%) diff --git a/.github/renovate.json b/.github/renovate.json5 similarity index 68% rename from .github/renovate.json rename to .github/renovate.json5 index 0769cb8966..1c62d40a5b 100644 --- a/.github/renovate.json +++ b/.github/renovate.json5 @@ -1,14 +1,14 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ - "config:recommended" + "config:recommended", ], "labels": [ - "PR-Dependencies" + "PR-Dependencies", ], "ignoreDeps": [ "string:app_name", - "gradle" + "gradle", ], "packageRules": [ { @@ -16,15 +16,16 @@ "matchPackageNames": [ "/^org.jetbrains.kotlin/", "/^com.google.devtools.ksp/", - "/^androidx.compose.compiler/" - ] + "/^androidx.compose.compiler/", + ], }, { "versioning": "semver", "matchPackageNames": [ "/^org.maplibre/", - "/^org.jetbrains.kotlinx:kotlinx-datetime/" - ] - } - ] + "/^org.jetbrains.kotlinx:kotlinx-datetime/", + ], + }, + ], } + From e1fd31a1518ebfdcf72226d876672c8fd7f74f0f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 11 Mar 2026 11:43:52 +0100 Subject: [PATCH 16/19] Limit PostHog Android upgrade to one PR per month, the first day of the month --- .github/renovate.json5 | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 1c62d40a5b..90ed0cdb18 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -26,6 +26,15 @@ "/^org.jetbrains.kotlinx:kotlinx-datetime/", ], }, + { + // Limit PostHog Android upgrade to one PR per month, the first day of the month + "matchPackageNames": [ + "com.posthog:posthog-android", + ], + "schedule": [ + "* * 1 * *", + ] + }, ], } From 1b6d2037b80ccf658f05801c3c94166fb5e2af39 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 16:12:00 +0100 Subject: [PATCH 17/19] chore(deps): update reactivecircus/android-emulator-runner action to v2.36.0 (#6320) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/maestro-local.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maestro-local.yml b/.github/workflows/maestro-local.yml index b1aa44689a..3ce062cd24 100644 --- a/.github/workflows/maestro-local.yml +++ b/.github/workflows/maestro-local.yml @@ -98,7 +98,7 @@ jobs: run: curl -fsSL "https://get.maestro.mobile.dev" | bash - name: Run Maestro tests in emulator id: maestro_test - uses: reactivecircus/android-emulator-runner@b530d96654c385303d652368551fb075bc2f0b6b # v2.35.0 + uses: reactivecircus/android-emulator-runner@5d6e86df22ab11632167a1a6b0c9ab0dc3469586 # v2.36.0 continue-on-error: true env: MAESTRO_USERNAME: maestroelement From 2f10b60667dc6ada7c0d437433d138abb196dd41 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 16:12:28 +0100 Subject: [PATCH 18/19] fix(deps): update dependency com.posthog:posthog-android to v3.37.0 (#6317) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2caa588c68..0d70216f7f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -219,7 +219,7 @@ haze_materials = { module = "dev.chrisbanes.haze:haze-materials", version.ref = color_picker = "io.mhssn:colorpicker:1.0.0" # Analytics -posthog = "com.posthog:posthog-android:3.36.1" +posthog = "com.posthog:posthog-android:3.37.0" sentry = "io.sentry:sentry-android:8.34.1" # main branch can be tested replacing the version with main-SNAPSHOT matrix_analytics_events = "com.github.matrix-org:matrix-analytics-events:0.29.2" From 37af273725770d6c95896cb38a6febe4e94400f9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 16:57:12 +0000 Subject: [PATCH 19/19] chore(deps): update actions/download-artifact action to v8.0.1 (#6324) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/maestro-local.yml | 2 +- .github/workflows/quality.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/maestro-local.yml b/.github/workflows/maestro-local.yml index 3ce062cd24..88a9e4d1f6 100644 --- a/.github/workflows/maestro-local.yml +++ b/.github/workflows/maestro-local.yml @@ -86,7 +86,7 @@ jobs: ref: ${{ github.ref }} persist-credentials: false - name: Download APK artifact from previous job - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: elementx-apk-maestro - name: Enable KVM group perms diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 18551559ec..d158155a45 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -351,7 +351,7 @@ jobs: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.ref }} persist-credentials: false - name: Download reports from previous jobs - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 - name: Prepare Danger if: always() run: |