From b9e18f247e7a2160ff0978dabc45ac9d82f762ea Mon Sep 17 00:00:00 2001 From: matejplch626-afk Date: Sat, 10 Oct 2026 08:18:11 +0200 Subject: [PATCH 1/6] Add Czech fallback hint for Backtalk-on banner --- talkback/src/main/res/values-cs/strings_dynamic_hints.xml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 talkback/src/main/res/values-cs/strings_dynamic_hints.xml diff --git a/talkback/src/main/res/values-cs/strings_dynamic_hints.xml b/talkback/src/main/res/values-cs/strings_dynamic_hints.xml new file mode 100644 index 00000000..7196a796 --- /dev/null +++ b/talkback/src/main/res/values-cs/strings_dynamic_hints.xml @@ -0,0 +1,4 @@ + + + Backtalk je zapnutý. Chcete-li ho vypnout, podržte dva prsty na obrazovce po dobu 5 sekund. Chcete-li tuto zprávu přestat zobrazovat, vypněte Nastavení Backtalku > Pokročilá nastavení > Zobrazovat pokyny k vypnutí Backtalku. + From d93f55285f052ef13ed551972ed6514f7383aff3 Mon Sep 17 00:00:00 2001 From: matejplch626-afk Date: Sat, 10 Oct 2026 14:42:01 +0200 Subject: [PATCH 2/6] Consolidate Czech translation updates into single PR branch --- .../res/values-cs/strings_czech_update.xml | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 talkback/src/main/res/values-cs/strings_czech_update.xml diff --git a/talkback/src/main/res/values-cs/strings_czech_update.xml b/talkback/src/main/res/values-cs/strings_czech_update.xml new file mode 100644 index 00000000..ae6e930c --- /dev/null +++ b/talkback/src/main/res/values-cs/strings_czech_update.xml @@ -0,0 +1,58 @@ + + + + Hlasový profil + Hlasové profily + Výchozí nastavení Backtalku + Používá se: %1$s + Při používání hlasového profilu není mluvený jazyk k dispozici + %1$s, používá se + Žádné hlasové profily + Vybrat hlasový profil + Předchozí hlasový profil + Další hlasový profil + Používaný hlasový profil + Přidat hlasový profil + Hlasový profil %1$d + Hlasový profil s názvem %1$s již existuje + Název + Jazyk + Hlas + Výchozí + Načítání + %1$s, není nainstalováno + %1$s, %2$s + Přesunout nahoru + Přesunout dolů + Přejmenovat + Přesunuto nad %1$s + Přesunuto pod %1$s + %1$s odstraněn + Odstranit hlasový profil + Odstranit %1$s? + Odstranit + + + Čtení tabulek + Číst záhlaví sloupců + Po obsahu buňky + Před obsahem buňky + Nečíst + Oznamovat čísla řádků a sloupců + Oznamovat čísla řádků a sloupců u buněk tabulky + + + Vybrané obrázky jsou odesílány do rozhraní Gemini API společnosti Google, aby byly popsány. Když je zapnutá AI v zařízení, obrázky se místo toho popisují v tomto telefonu a nikam se neodesílají.\n\nPři použití bezplatného klíče API může Google přijatá data uchovávat, používat je ke zlepšování svých produktů a nechat je kontrolovat lidmi. Generativní AI je experimentální, takže bude dělat chyby. Platí %1$s. + Podrobné popisy obrázků využívají generativní AI. Vybrané obrázky jsou odesílány do rozhraní Gemini API společnosti Google, aby byly popsány. Když je zapnutá AI v zařízení, obrázky se místo toho popisují v tomto telefonu a nikam se neodesílají.\n\nPři použití bezplatného klíče API může Google přijatá data uchovávat, používat je ke zlepšování svých produktů a nechat je kontrolovat lidmi. Generativní AI je experimentální, takže bude dělat chyby. Podrobné popisy obrázků můžete kdykoli vypnout v nastavení Backtalku.\n\nPlatí %1$s. + Snímek obrazovky je odeslán do rozhraní Gemini API společnosti Google, aby byl popsán, což trvá několik sekund. Když je zapnutá AI v zařízení, snímek se místo toho popíše v tomto telefonu a nikam se neodesílá.\n\nPři použití bezplatného klíče API může Google přijatá data uchovávat, používat je ke zlepšování svých produktů a nechat je kontrolovat lidmi. Generativní AI je experimentální, takže bude dělat chyby. Platí %1$s. + Další smluvní podmínky Gemini API + + + V Backtalku můžete psát i jinými způsoby. Například můžete písmeno zadat dvojitým klepnutím. Později to můžete změnit v Nastavení Backtalku > Klávesnice na obrazovce > Způsob psaní. + V Backtalku můžete psát i jinými způsoby. Například můžete písmeno zadat dvojitým klepnutím. Později to můžete změnit v Nastavení Backtalku, potom Klávesnice na obrazovce a potom Způsob psaní. + Nastavení popisů obrázků můžete kdykoli změnit v Nastavení Backtalku > Automatické popisy. + Nastavení popisů obrázků můžete kdykoli změnit v Nastavení Backtalku, potom Automatické popisy. + Tento kurz je určen pro rozšířené rozložení kláves, které obsahuje mnoho nových příkazů. Rozložení vyberete v Nastavení Backtalku > Klávesové zkratky.\n\nTéma vyberete stisknutím Akce + šipka doprava. Nejlepších výsledků dosáhnete, když před zahájením zapnete Backtalk. + Opustili jste kontejner. Kontejnery můžete také přidat do ovládání čtení a potom pomocí Akce + Shift + šipka doprava nebo doleva vybrat kontejnery a pomocí Akce + šipka dolů nebo nahoru mezi kontejnery přecházet. Ovládání čtení upravíte v Nastavení Backtalku > Ovládání čtení.\n\nDalší tlačítko najdete stisknutím Akce + šipka doprava. + Pomocí ovládání čtení můžete také upravovat nastavení řeči a v Nastavení Backtalku > Ovládání čtení můžete přizpůsobit, co lze pomocí ovládání čtení dělat. + From 738dc7b5ca49b7ff44de243d49a71ed442b08130 Mon Sep 17 00:00:00 2001 From: matejplch626-afk Date: Sat, 10 Oct 2026 14:42:29 +0200 Subject: [PATCH 3/6] Add Czech scripting translations to consolidated PR branch --- .../main/res/values-cs/strings_scripts.xml | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 talkback/src/main/res/values-cs/strings_scripts.xml diff --git a/talkback/src/main/res/values-cs/strings_scripts.xml b/talkback/src/main/res/values-cs/strings_scripts.xml new file mode 100644 index 00000000..f106d689 --- /dev/null +++ b/talkback/src/main/res/values-cs/strings_scripts.xml @@ -0,0 +1,121 @@ + + + Skripty + Změna fungování Backtalku v aplikacích + Importovat skript + Soubor .js nebo .zip s main.js + Skripty aplikací + Globální pluginy + Nejsou nainstalovány žádné skripty + Vypnout všechny skripty + Skripty zůstanou nainstalované a zachovají si vlastní přepínače. Totéž provede gesto Zapnout nebo vypnout všechny skripty. + Zapnout nebo vypnout všechny skripty + Skripty vypnuty + Skripty zapnuty + Skripty nejsou na tomto zařízení dostupné + Přidat ukázkový skript + Oznamuje název každé aplikace, do které přepnete. Skript, od kterého můžete začít. + Zapnuto + Vypnuto + Spouští se v %1$s + Spouští se ve všech aplikacích + Verze %1$s + Autor: %1$s + Nainstalovat %1$s? + Může: + Nejsou potřeba žádná oprávnění. + Nainstalovat + Aktualizovat %1$s na %2$s? + Nová oprávnění: + Aktualizovat + Nahradí se verze %1$s od autora %2$s a zachovají se její data a nastavení. + Novou verzi vytvořil jiný autor, %1$s. Aktualizujte ji jen tehdy, pokud mu důvěřujete. + %1$s nainstalován + %1$s aktualizován na %2$s + Import se nezdařil. %1$s + %1$s. Povolte pouze důvěryhodným skriptům. + Číst obsah obrazovky + Klikat, posouvat, psát a přesouvat fokus + Poslouchat a měnit řeč Backtalku + Číst pole s hesly + Přidávat gesta, klávesy, položky nabídky a ovládací prvky čtení + Používat internet + Číst a měnit schránku + Přejít zpět nebo domů, otevírat oznámení a aplikace + Číst a měnit vyslovovaná oznámení + Sledovat veškerou aktivitu ve všech aplikacích včetně psaní + Zobrazovat dialogy nad libovolnou aplikací + %1$s: %2$s + Zapnout + Oprávnění + Žádná + Nastavení + Filtrovat + Nejprve skript zapněte + Vypnutím oprávnění přestanou fungovat části, které ho potřebují. + Tato oprávnění můžete později vypnout. + Správa + Spouštět dříve + Spouštět později + Pořadí skriptů, které mění stejnou řeč. Skripty aplikací se spouštějí jako první. + Protokol + Výstup a chyby od spuštění Backtalku + Vymazat uložená data + Uložená data vymazána + Odstranit + Odstranit %1$s? + Smaže jeho kód, data a nastavení. + %1$s odstraněn + Protokol je prázdný + Vymazat protokol + Kopírovat protokol + Protokol zkopírován + %1$s, %2$s + Vyžaduje skriptovací API %1$d nebo novější. Tento Backtalk má %2$d, takže některé části nemusí fungovat. + Testováno do skriptovacího API %1$d. Tento Backtalk má %2$d, takže skript nemusí fungovat podle očekávání. + S tímto Backtalkem nemusí fungovat + Skriptovací API %1$d až %2$d + Kompatibilita + Přesto nainstalovat + Přesto aktualizovat + Otevřít domovskou stránku + Otevřít tuto adresu? + Otevřít + Žádná aplikace nemůže otevřít %1$s + %1$s byl po opakovaných chybách vypnut. Podrobnosti najdete v jeho protokolu v části Skripty. + Prozkoumat položku s fokusem + Žádná položka nemá fokus + Zkopírováno. %1$s + Položka nemá ID, takže ji pravidla nemohou pojmenovat. Zkopírováno. %1$s + Kopírovat strom obrazovky + Zkopírováno položek: %1$d + Není žádné okno ke zkopírování + Strom obrazovky + Kopírovat všechny položky na obrazovce jako JSON pro tvorbu skriptů + Podrobnosti položky + Vyslovit a zkopírovat podrobnosti o položce, na které jste byli, pro tvorbu skriptů + Modifikátor Backtalku + %1$s, potom %2$s + Příkazy + Gesta a klávesy spuštěného skriptu mají přednost před Backtalkem. Vypnutím příkazu zachováte přiřazení Backtalku. + Gesto: %1$s + Klávesy: %1$s + Nabídka Backtalku + Ovládací prvky čtení + Žádné + Zapnout + Vypnout + Obnovit výchozí + Výchozí nastavení obnoveno + Provést gesto nebo stisknout klávesy + Přiřadit následující gesto nebo klávesy stisknuté s modifikátorem Backtalku + Proveďte gesto nebo stiskněte klávesy. + Přiřadit %1$s k příkazu %2$s? + Přiřadit + Vybrat gesto + Zadat klávesy + Například backtalk+shift+n nebo backtalk+t, s + Tyto klávesy nelze použít. %1$s + Přidává: + %1$s: %2$s + From 4ad037a4743d3d1d3577112812f4c15db0e75371 Mon Sep 17 00:00:00 2001 From: matejplch626-afk Date: Sat, 10 Oct 2026 14:54:45 +0200 Subject: [PATCH 4/6] Fix duplicate Czech resources after PR consolidation --- talkback/src/main/res/values-cs/strings_czech_update.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/talkback/src/main/res/values-cs/strings_czech_update.xml b/talkback/src/main/res/values-cs/strings_czech_update.xml index ae6e930c..a14c87a9 100644 --- a/talkback/src/main/res/values-cs/strings_czech_update.xml +++ b/talkback/src/main/res/values-cs/strings_czech_update.xml @@ -46,13 +46,4 @@ Podrobné popisy obrázků využívají generativní AI. Vybrané obrázky jsou odesílány do rozhraní Gemini API společnosti Google, aby byly popsány. Když je zapnutá AI v zařízení, obrázky se místo toho popisují v tomto telefonu a nikam se neodesílají.\n\nPři použití bezplatného klíče API může Google přijatá data uchovávat, používat je ke zlepšování svých produktů a nechat je kontrolovat lidmi. Generativní AI je experimentální, takže bude dělat chyby. Podrobné popisy obrázků můžete kdykoli vypnout v nastavení Backtalku.\n\nPlatí %1$s. Snímek obrazovky je odeslán do rozhraní Gemini API společnosti Google, aby byl popsán, což trvá několik sekund. Když je zapnutá AI v zařízení, snímek se místo toho popíše v tomto telefonu a nikam se neodesílá.\n\nPři použití bezplatného klíče API může Google přijatá data uchovávat, používat je ke zlepšování svých produktů a nechat je kontrolovat lidmi. Generativní AI je experimentální, takže bude dělat chyby. Platí %1$s. Další smluvní podmínky Gemini API - - - V Backtalku můžete psát i jinými způsoby. Například můžete písmeno zadat dvojitým klepnutím. Později to můžete změnit v Nastavení Backtalku > Klávesnice na obrazovce > Způsob psaní. - V Backtalku můžete psát i jinými způsoby. Například můžete písmeno zadat dvojitým klepnutím. Později to můžete změnit v Nastavení Backtalku, potom Klávesnice na obrazovce a potom Způsob psaní. - Nastavení popisů obrázků můžete kdykoli změnit v Nastavení Backtalku > Automatické popisy. - Nastavení popisů obrázků můžete kdykoli změnit v Nastavení Backtalku, potom Automatické popisy. - Tento kurz je určen pro rozšířené rozložení kláves, které obsahuje mnoho nových příkazů. Rozložení vyberete v Nastavení Backtalku > Klávesové zkratky.\n\nTéma vyberete stisknutím Akce + šipka doprava. Nejlepších výsledků dosáhnete, když před zahájením zapnete Backtalk. - Opustili jste kontejner. Kontejnery můžete také přidat do ovládání čtení a potom pomocí Akce + Shift + šipka doprava nebo doleva vybrat kontejnery a pomocí Akce + šipka dolů nebo nahoru mezi kontejnery přecházet. Ovládání čtení upravíte v Nastavení Backtalku > Ovládání čtení.\n\nDalší tlačítko najdete stisknutím Akce + šipka doprava. - Pomocí ovládání čtení můžete také upravovat nastavení řeči a v Nastavení Backtalku > Ovládání čtení můžete přizpůsobit, co lze pomocí ovládání čtení dělat. From 598bb7e1757e46e6b163b9ae542baa411be058cd Mon Sep 17 00:00:00 2001 From: matejplch626-afk Date: Sat, 10 Oct 2026 15:18:12 +0200 Subject: [PATCH 5/6] Temporarily regenerate lint baseline in CI --- .github/workflows/build.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 168eecf8..47c96adf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -51,12 +51,22 @@ jobs: - name: Run unit tests run: ./gradlew testPhoneDebugUnitTest --console=plain + # Regenerate the baseline once so the updated file can be committed back to this PR. + - name: Regenerate lint baseline + run: ./gradlew updateLintBaselinePhoneDebug --console=plain + # The app's lint also checks the library modules. Issues already in lint-baseline.xml are # allowed, so this fails only on new errors, such as a call that needs a newer Android than # minSdk without a version check. - name: Run lint run: ./gradlew :lintPhoneDebug --console=plain + - uses: actions/upload-artifact@v7 + if: always() + with: + name: lint-baseline + path: lint-baseline.xml + - uses: actions/upload-artifact@v7 if: failure() with: From 6cba4f35c20922be663307c166fe2eee859f4fb2 Mon Sep 17 00:00:00 2001 From: matejplch626-afk Date: Sat, 10 Oct 2026 15:27:44 +0200 Subject: [PATCH 6/6] Generate minimal lint baseline update in CI --- .github/workflows/build.yml | 64 +++++++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 47c96adf..d3924144 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -51,13 +51,65 @@ jobs: - name: Run unit tests run: ./gradlew testPhoneDebugUnitTest --console=plain - # Regenerate the baseline once so the updated file can be committed back to this PR. - - name: Regenerate lint baseline - run: ./gradlew updateLintBaselinePhoneDebug --console=plain + # Capture the currently unmatched lint issues, then update only matching baseline messages. + - name: Capture lint report + continue-on-error: true + run: ./gradlew :lintPhoneDebug --console=plain - # The app's lint also checks the library modules. Issues already in lint-baseline.xml are - # allowed, so this fails only on new errors, such as a call that needs a newer Android than - # minSdk without a version check. + - name: Refresh changed MissingTranslation baseline messages + run: | + python3 - <<'PY' + import html + import re + import xml.etree.ElementTree as ET + from xml.sax.saxutils import escape + + report_path = 'build/reports/lint-results-phoneDebug.xml' + baseline_path = 'lint-baseline.xml' + + report = ET.parse(report_path).getroot() + current = {} + for issue in report.findall('issue'): + if issue.get('id') != 'MissingTranslation': + continue + error_line = issue.get('errorLine1') + message = issue.get('message') + if error_line and message: + current[error_line] = message + + text = open(baseline_path, encoding='utf-8').read() + issue_re = re.compile(r'', re.DOTALL) + updated = 0 + + def replace_issue(match): + global updated + block = match.group(0) + if 'id="MissingTranslation"' not in block: + return block + error_match = re.search(r'errorLine1="([^"]*)"', block) + message_match = re.search(r'message="([^"]*)"', block) + if not error_match or not message_match: + return block + error_line = html.unescape(error_match.group(1)) + new_message = current.get(error_line) + if not new_message: + return block + old_message = html.unescape(message_match.group(1)) + if old_message == new_message: + return block + escaped = escape(new_message, {'"': '"'}) + block = block[:message_match.start(1)] + escaped + block[message_match.end(1):] + updated += 1 + return block + + text = issue_re.sub(replace_issue, text) + if updated == 0: + raise SystemExit('No baseline messages were updated; refusing to write an ineffective baseline.') + open(baseline_path, 'w', encoding='utf-8', newline='').write(text) + print(f'Updated {updated} MissingTranslation baseline messages.') + PY + + # Verify that the minimally refreshed baseline is sufficient. - name: Run lint run: ./gradlew :lintPhoneDebug --console=plain