From 3c45b844749399e6d129288414cf75914ebb9e22 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Thu, 17 Sep 2020 02:16:47 +0000 Subject: [PATCH 01/18] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (1872 of 1872 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hant/ --- vector/src/main/res/values-zh-rTW/strings.xml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index 9fa649b6da..56eafad0e9 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -1539,7 +1539,7 @@ Matrix 中的消息可見度類似于電子郵件。我們忘記您的郵件意 允許汰退呼叫協助伺服器 當您的家伺服器未提供時,將會使用 %s 做為協助(您的 IP 位置將會在通話時被分享) 在您的設定中新增一臺身份識別伺服器以執行此動作。 - 背景同步模式(實驗性) + 背景同步模式 為電池最佳化 Element 將會在背景同步以節省裝置的有限資源(電池)。 \n取決於您裝置的資源狀態,作業系統可能會延遲同步。 @@ -2562,4 +2562,16 @@ Matrix 中的消息可見度類似于電子郵件。我們忘記您的郵件意 無法開啟禁止您進入的聊天室。 找不到此聊天室。請確定它存在。 + + %d 秒 + + + 顯示聊天室成員狀態活動 + 包含邀請/加入/離開/踢除/封鎖事件與大頭貼/顯示名稱變更等。 + 投票 + 機器人按鈕 + 反應:%s + 驗證結論 + + 連結格式錯誤 From cd5a146f1a68de5b85d69e33cfa148afeac77a2c Mon Sep 17 00:00:00 2001 From: zeritti Date: Thu, 17 Sep 2020 16:18:40 +0000 Subject: [PATCH 02/18] Translated using Weblate (Czech) Currently translated at 100.0% (1872 of 1872 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/cs/ --- vector/src/main/res/values-cs/strings.xml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index f20bdff2d3..dfba3348cc 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -727,7 +727,7 @@ Vaši e-mailovou adresu můžete přidat k profilu v nastavení. Zprávy poslané botem Synchronizace na pozadí - Režim synchronizace na pozadí (experimentální) + Režim synchronizace na pozadí Optimalizován pro baterii Element bude synchronizovat na pozadí způsobem, který šetří omezené zdroje zařízení (baterii). \nV závislosti na stavu zdrojů zařízení může být sync operačním systémem odložen. @@ -2609,4 +2609,18 @@ Vaši e-mailovou adresu můžete přidat k profilu v nastavení. Pro vypnutí PINu potvrďte PIN Nemohu otevřít místnost, z níž jste byli vykázáni. Nemohu najít tuto místnost. Ujistěte se, že existuje. + + %d vteřina + %d vteřiny + %d vteřin + + + Zobrazit stavové události účastníků v místnosti + Zahrnuje události pozvat/vstoupit/opustit/vykopnout/vykázat a změny avatara/veřejného jména. + Průzkum + Tlačítka botů + Reagovali skrze: %s + Výsledek ověření + + Odkaz byl chybně zformován From 73778f8669ac420dc54fda226c556997d7eca66e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Thu, 17 Sep 2020 06:08:45 +0000 Subject: [PATCH 03/18] Translated using Weblate (Estonian) Currently translated at 100.0% (1872 of 1872 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/et/ --- vector/src/main/res/values-et/strings.xml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index 778abdb290..f9fea581b8 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -1277,7 +1277,7 @@ Robotite saadetud sõnumid Andmete sünkroniseerimine taustal - Andmete taustal sünkroniseerimise režiim (katseline) + Andmete taustal sünkroniseerimise režiim Optimeeritud akukestust silmas pidades Element sünkroniseerib taustal nii, et see arvestab seadme piiratud ressursse (aku). \nSõltuvalt seadme olekust võib operatsioonisüsteem sünkroniseerimist edasi lükata. @@ -2544,4 +2544,17 @@ Ei ole võimalik avada sellise jututoa vaadet, kus sulle on seatud suhtluskeeld. Ei leia sellist jututuba. Palun kontrolli, et ta ikka olemas on. + + %d sekund + %d sekundit + + + Näita jututoa liikmete olekusündmusi + Sealhulgas kutsumisi, liitumisi, lahkumisi, müksamisi, keelamisi ning tunnuspildi ja kuvatava nime muutusi. + Küsitlus + Robotinupud + Reageeris: %s + Verifitseerimise tulemus + + Link oli vigane From f8e3e33e49d813ff57e53287028a1dff699eaeee Mon Sep 17 00:00:00 2001 From: Nikita Epifanov Date: Wed, 16 Sep 2020 21:17:58 +0000 Subject: [PATCH 04/18] Translated using Weblate (Russian) Currently translated at 100.0% (1872 of 1872 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/ --- vector/src/main/res/values-ru/strings.xml | 48 +++++++++++++++-------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index 457999e554..d1120efca0 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -99,7 +99,7 @@ %d пользователь %d пользователя %d пользователей - + Отправить логи @@ -833,13 +833,13 @@ %d комната %d комнаты %d комнат - + %d комната %d комнаты %d комнат - + %1$s в %2$s @@ -847,7 +847,7 @@ %d активный виджет %d активных виджета %d активных виджетов - + @@ -857,45 +857,45 @@ %d активный участник %d активных участника %d активных участников - + %d участник %d участника %d участников - + %d новое сообщение %d новых сообщения %d новых сообщений - + %1$s комната найдена для %2$s %1$s комнаты найдено для %2$s %1$s комнат найдено для %2$s - + %d изменение членства %d изменения членства %d изменений членства - + %d непрочитанное уведомление %d непрочитанных уведомления %d непрочитанных уведомлений - + %d непрочитанное уведомление %d непрочитанных уведомления %d непрочитанных уведомлений - + Получить аватар Заметка аватара @@ -1030,20 +1030,20 @@ %d выбран %d выбрано %d выбраны - + %d участник %d участника %d участников - + %d комната %d комнаты %d комнат - + Системные оповещения @@ -1304,7 +1304,7 @@ %d новый ключ был добавлен к этому устройству. %d новых ключа были добавлены к этому устройству. %d новых ключей были добавлены к этому устройству. - + @@ -1355,7 +1355,7 @@ Резервное копирование %d ключа… Резервное копирование %d ключей… Резервное копирование %d ключей… - + Все ключи сохранены @@ -1685,7 +1685,7 @@ Обнаружение Будет использовать%s в качестве помощника, если ваш домашний сервер не предлагает его (ваш IP-адрес будет доступен во время разговора) Добавьте идентификационный сервер в свои настройки, чтобы выполнить это действие. - Режим фоновой синхронизации (Экспериментальный) + Режим фоновой синхронизации Element будет синхронизироваться в фоновом режиме таким образом, чтобы сохранить ограниченные ресурсы устройства (батарея). \nВ зависимости от состояния ресурса вашего устройства, синхронизация может быть отложена операционной системой. Element будет синхронизироваться в фоновом режиме периодически в точное время (настраивается). @@ -2716,4 +2716,18 @@ Невозможно открыть комнату, в которую вам запрещён доступ. Невозможно найти эту комнату. Убедитесь, что она существует. + + %d секунда + %d секунды + %d секунд + + + Показать события статуса участников комнаты + Включает в себя события приглашения/ присоединения/выхода/исключения/бана и изменение аватара/отображаемого имени. + Голосование + Кнопки бота + Отреагировал: %s + Результат проверки + + Ссылка была искажена From fa9ff86ab28eac36cb15bc1c789d0303a55d37cb Mon Sep 17 00:00:00 2001 From: notramo Date: Sun, 20 Sep 2020 05:42:01 +0000 Subject: [PATCH 05/18] Translated using Weblate (Hungarian) Currently translated at 100.0% (3 of 3 strings) Translation: Element Android/Element Android Store Translate-URL: https://translate.riot.im/projects/element-android/element-store/hu/ --- vector/src/main/play/listings/hu/full_description.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/play/listings/hu/full_description.txt b/vector/src/main/play/listings/hu/full_description.txt index ac113d4f10..dfc842594d 100644 --- a/vector/src/main/play/listings/hu/full_description.txt +++ b/vector/src/main/play/listings/hu/full_description.txt @@ -13,7 +13,7 @@ Az Element-tel azért válik mindez lehetővé, mert a Matrix hálózatra épül Az Element a te kezedbe adja az irányítást azáltal, hogy eldöntheted, ki tárolja a beszélgetéseidet. Az Element alkalmazásból több féle szolgáltatót is választhatsz: -1. Regisztrálhatsz ingyen egy fiókot a matrix.org nyilvános szerveren +1. Regisztrálhatsz ingyen egy fiókot a matrix.org nyilvános szerveren, amit a Matrix fejlesztői üzemeltetnek, vagy választhatsz a több ezer, ingyenes szerver közül, amit önkéntesek üzemeltetnek 2. A saját számítógépeden is futtathatsz szervert 3. Előfizethetsz egy saját szerverre az Element Matrix Szolgáltatások platformon From bdaecc5b2e77e62064828cc894ff45a71481bf2a Mon Sep 17 00:00:00 2001 From: LinAGKar Date: Sat, 19 Sep 2020 09:32:16 +0000 Subject: [PATCH 06/18] Translated using Weblate (Swedish) Currently translated at 100.0% (1872 of 1872 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/sv/ --- vector/src/main/res/values-sv/strings.xml | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index 3db9d3c48d..563391b714 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -346,11 +346,11 @@ Element behöver tillstånd att komma åt din kamera för att kunna ta bilder och hålla videosamtal. " \n -\nVänligen ge tillstånd i nästa popup för att kunna utföra samtalet." +\nVänligen ge åtkomst i nästa popup för att kunna utföra samtalet." Element behöver tillstånd att komma åt din mikrofon för hålla röstsamtal. " \n -\nVänligen ge tillstånd i nästa popup för att kunna utföra samtalet." +\nVänligen ge åtkomst i nästa popup för att kunna utföra samtalet." Element behöver tillstånd att komma åt din kamera och mikrofon för att kunna utföra videosamtal. \n \nVänligen ge tillstånd i nästa popup för att kunna utföra samtalet. @@ -525,7 +525,7 @@ Bekräfta ditt lösenord Meddelanden som innehåller mitt visningsnamn Användarinställningar - Innehåller ändringar av avatar eller visningsnamn. + Innehåller byten av avatar eller visningsnamn. Den här handlingen kräver extra autentisering. \nFör att fortsätta, skriv in ditt lösenord. Lösenord: @@ -1294,7 +1294,7 @@ Apparna behöver inte ansluta till hemservern i bakgrunden, det bör reducera batterianvändning Tänd skärmen i 3 sekunder Bakgrundssynkronisering - Bakgrundssynkläge (experimentellt) + Bakgrundssynkläge Optimerad för batteri Användarvillkor Meddelanden från tredje part @@ -2547,4 +2547,17 @@ Kan inte öppna ett rum du är bannad från. Kan inte hitta det här rummet. Se till att det existerar. + + %d sekund + %d sekunder + + + Visa statushändelser angående rumsmedlemmar + Inkluderar när personer bjuds in, går med, lämnar, kickas, bannas eller byter sin avatar eller sitt namn. + Omröstning + Bottknappar + Reagerade med: %s + Verifieringsavslutning + + Länken var felformaterad From 8d2c0dcb48b7adf9c9233401d18825f7d32a02a2 Mon Sep 17 00:00:00 2001 From: LinAGKar Date: Sun, 20 Sep 2020 07:53:29 +0000 Subject: [PATCH 07/18] Translated using Weblate (Swedish) Currently translated at 100.0% (168 of 168 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/sv/ --- matrix-sdk-android/src/main/res/values-sv/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-sv/strings.xml b/matrix-sdk-android/src/main/res/values-sv/strings.xml index 491eb0bc49..8f8ba5e306 100644 --- a/matrix-sdk-android/src/main/res/values-sv/strings.xml +++ b/matrix-sdk-android/src/main/res/values-sv/strings.xml @@ -27,8 +27,8 @@ Du bannade %1$s %1$s drog tillbaka inbjudan för %2$s Du drog tillbaka inbjudan för %1$s - %1$s ändrade sin avatar - Du ändrade din avatar + %1$s bytte sin avatar + Du bytte din avatar %1$s satte sitt visningsnamn till %2$s Du satte ditt visningsnamn till %1$s %1$s bytte sitt visningsnamn från %2$s till %3$s From 416c153d2e09e47b83399bd4b7546015bb62e374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Mon, 21 Sep 2020 17:52:54 +0000 Subject: [PATCH 08/18] Translated using Weblate (Estonian) Currently translated at 100.0% (1872 of 1872 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/et/ --- vector/src/main/res/values-et/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index f9fea581b8..f8cc46d10e 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -1048,7 +1048,7 @@ \nKas sa oled ikka kindel\? Kas vähendad enda õigusi\? - Kuna sa vähendad enda õigusi, siis sul ei pruugi enam olla võimalik seda muutust tagasi pöörata. Kui sa juhtumisi oled viimane haldusõigustega kasutaja jututoas, siis hiljem on võimatu samu õigusi tagasi saada. + Kuna sa vähendad enda õigusi, siis sul ei pruugi hiljem olla võimalik seda muutust tagasi pöörata. Kui sa juhtumisi oled viimane haldusõigustega kasutaja jututoas, siis hiljem on võimatu samu õigusi tagasi saada. Vähenda enda õigusi @@ -2331,8 +2331,8 @@ Helifail Fail Sõnumid siin jututoas on läbivalt krüptitud. - Sõnumid siis jututoas kasutavad läbivat krüptimist. -\n + Sõnumid siin jututoas kasutavad läbivat krüptimist. +\n \nSinu sõnumid on turvatud ning ainult sinul ja saaja(te)l on unikaalsed võtmed selliste sõnumite lugemiseks. Turvalisus Lisateave From 7a2e70ee2db3f4a7afa36ec18535e8e4c9dafeea Mon Sep 17 00:00:00 2001 From: "@a2sc:matrix.org" Date: Mon, 21 Sep 2020 20:45:41 +0000 Subject: [PATCH 09/18] Translated using Weblate (German) Currently translated at 99.9% (1870 of 1872 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/de/ --- vector/src/main/res/values-de/strings.xml | 47 ++++++++++++++--------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index da2e2886a1..59b03bb001 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -258,7 +258,7 @@ Bitte erlaube den Zugriff im nächsten Dialog, um den Anruf durchzuführen. Element kann dein Adressbuch durchsuchen, um andere Matrix-Nutzer anhand ihrer Email-Adresse und Telefonnummer zu finden. Wenn du der Nutzung deines Adressbuchs zu diesem Zweck zustimmst, erlaube den Zugriff im nächsten Popup-Fenster. - Element kann dein Adressbuch durchsuchen, um andere Matrix-Nutzer anhand ihrer Email-Adresse und Telefonnummer zu finden. + Element kann dein Adressbuch durchsuchen, um andere Matrix-Nutzer anhand ihrer E-Mail-Adresse und Telefonnummer zu finden. \nStimmst du der Nutzung deines Adressbuchs zu diesem Zweck zu\? Entschuldige. Die Aktion wurde aufgrund fehlender Berechtigungen nicht ausgeführt @@ -1055,7 +1055,7 @@ Achtung: Diese Datei wird vielleicht gelöscht, wenn die App deinstalliert wird. %d+ Trotzdem anrufen - Kicken + Entfernen Grund Linkvorschau im Chat aktivieren, falls dein Home-Server diese Funktion unterstützt. @@ -1342,7 +1342,7 @@ Verwahre deinen Wiederherstellungsschlüssel an einem sehr sicheren Ort wie eine Sichere Schlüssel… - Alle Schlüssel gesichert + Alle Schlüssel sind gesichert Sichere %d Schlüssel… Sichere %d Schlüssel… @@ -1669,9 +1669,9 @@ Verwahre deinen Wiederherstellungsschlüssel an einem sehr sicheren Ort wie eine Authentifizierung benötigt - Hintergrundsynchronisierungsmodus (experimentell) - Element wird sich im Hintergrund auf eine Art synchronisieren die Ressourcen des Geräts schont (Akku). -\nAbhängig von dem Ressourcen-Statuses deines Geräts kann dein System die Synchronisierung verschieben. + Hintergrund-Synchronisierungsmodus + Element wird sich im Hintergrund auf eine Art synchronisieren die Ressourcen des Geräts (Akku) schont. +\nAbhängig vom Ressourcen-Status deines Geräts kann dein System die Synchronisierung verschieben. Element wird sich im Hintergrund periodisch zu einem bestimmten Zeitpunkt synchronisieren (konfigurierbar). \nDies wird Funk- und Akkunutzung beeinflussen. Es wird eine permanente Benachrichtigung geben, die sagt, dass Element auf Ereignisse lauscht. %s @@ -1808,7 +1808,7 @@ Verwahre deinen Wiederherstellungsschlüssel an einem sehr sicheren Ort wie eine Beginne Wähle einen Server - Genau wie bei Emails haben Accounts ein Zuhause, auch wenn du mit jedem kommunizieren kannst + Genau wie bei E-Mails haben Accounts ein Zuhause, auch wenn du mit jedem kommunizieren kannst Folge Millionen anderen kostenlos auf dem größten öffentlichen Server Premium Hosting für Organisationen Mehr erfahren @@ -2118,7 +2118,7 @@ Verwahre deinen Wiederherstellungsschlüssel an einem sehr sicheren Ort wie eine Aktive Sitzungen Zeige alle Sitzungen - Verwalte Sitzungen + Sitzungen verwalten Diese Sitzung abmelden Keine kryptografischen Informationen verfügbar @@ -2271,7 +2271,7 @@ Verwahre deinen Wiederherstellungsschlüssel an einem sehr sicheren Ort wie eine Import der Schlüssel fehlgeschlagen Benachrichtigungskonfiguration - \@raum enthaltende Nachrichten + Nachrichten, die @raum enthalten Verschlüsselte Nachrichten in Gruppenchats Setze die Benachrichtigungspräferenz abhängig vom Ereignistyp @@ -2353,7 +2353,7 @@ Verwahre deinen Wiederherstellungsschlüssel an einem sehr sicheren Ort wie eine Nutze die neueste Version von Element auf deinen anderen Geräten: Erzwingt das Verferfen der aktuell ausgehende Gruppensitzung in einem verschlüsseltem Raum Wird nur in verschlüsselten Räumen unterstützt - Benutze dein %1$s oder deinen %2$s um fortzufahren. + Benutze deine %1$s oder deinen %2$s um fortzufahren. Wiederherstellungsschlüssel verwenden Wähle deinen Wiederherstellungsschüssel, gib ihn ein oder füge ihn aus der Zwischenablage ein Sicherung konnte mit diesem Wiederherstellungsschlüssel nicht entschlüsselt werden. Bitte stelle sicher, dass du den korrekten Wiederherstellungsschlüssel eingegeben hast. @@ -2478,9 +2478,9 @@ Verwahre deinen Wiederherstellungsschlüssel an einem sehr sicheren Ort wie eine Nachricht gelöscht Zeige gelöschte Nachrichten Zeige einen Platzhalter für gelöschte Nachrichten - Füge dedizierten Tab für ungelesene Benachrichtungen zur Hauptansicht hinzu. + Dedizierten Tab für ungelesene Nachrichten zur Hauptansicht hinzufügen - Wir haben dir eine Bestätigungsmail an %s gesendet. Bitte prüfe deine Emails und klicke auf den Bestätigungslink + Wir haben dir eine Bestätigungsmail an %s gesendet. Bitte prüfe deine E-Mails und klicke auf den Bestätigungslink Der Verifizierungscode ist nicht korrekt. MEDIEN @@ -2497,13 +2497,13 @@ Verwahre deinen Wiederherstellungsschlüssel an einem sehr sicheren Ort wie eine Gib die Adresse des Servers ein, den du benutzen möchtest Wenn du deine Matrixkennung und dein Passwort weißt, kannst du alternativ diese Methode nutzen: - Einloggen mit Matrix ID - Einloggen mit Matrix ID - Wenn du einen Account auf einem Homeserver eingerichtet hast, benutze deine Matrix ID (z.B. @benutzer@domain.com) und Passwort. - Matrix ID + Einloggen mit Matrix-ID + Einloggen mit Matrix-ID + Wenn du einen Account auf einem Home-Server eingerichtet hast, benutze deine Matrix-ID (z.B. @benutzer:domain.com) und Passwort. + Matrix-ID Wenn du dein Passwort nicht weißt, gehe zurück um es zurücksetzen zu lassen. Dies ist keine gültige Benutzerkennung. Erwartetes Format: \'@benutzer:homeserver.org\' - Es konnte kein gültiger Homeserver gefunden werden. Bitte prüfe deine Kennung + Es konnte kein gültiger Home-Server gefunden werden. Bitte prüfe deine Kennung Sticker @@ -2621,7 +2621,7 @@ Verwahre deinen Wiederherstellungsschlüssel an einem sehr sicheren Ort wie eine Aktiviere PIN Wenn du deine PIN zurücksetzen möchtest, tippe \"PIN vergessen\" um dich abzumelden und sie anschließend zurückzusetzen. Bestätige PIN um die PIN zu deaktivieren - Fasse \"Nicht entschlüsselbar\"-Fehler im Chatverlauf zu Hinweisen zusammen + \"Nicht entschlüsselbar\"-Fehler im Chatverlauf zusammenfassen Verhindere versehentliche Anrufe Bitte um Bestätigung, bevor du einen Anruf tätigst Konfiguration @@ -2673,4 +2673,15 @@ Verwahre deinen Wiederherstellungsschlüssel an einem sehr sicheren Ort wie eine Raum, indem du gebannt wurdest, kann nicht geöffnet werden. Raum kann nicht gefunden werden. Stelle sicher, dass er existiert. + + %d Sekunde + %d Sekunden + + + Zeige Status-Ereignisse der Raum-Mitglieder + Bezieht Einladungs-/Beitritts-/Verlassen-/Entfernen-/Verbannen-Ereignisse und Avatar-/Anzeigenamen-Wechsel mit ein. + Umfrage + Bot-Schaltflächen + Reagierte mit: %s + Der Link war nicht korrekt From a7e33e9c0a597f7039115de15d5f2af68604ccfe Mon Sep 17 00:00:00 2001 From: Kahina Messaoudi Date: Tue, 22 Sep 2020 10:39:26 +0000 Subject: [PATCH 10/18] Translated using Weblate (Kabyle) Currently translated at 99.8% (1868 of 1872 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/ --- vector/src/main/res/values-kab/strings.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index 75e1f19aa6..0cb427bea0 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -2539,4 +2539,14 @@ Askar n uneflay yermed timahilin i yeffren yerna yezmer daɣen ad yerr asnas ur yerkid ara akken iwata. I yineflayen kan! Abrir arurad + + %d n tsint + %d n tsintin + + + Sken tidyanin n waddad n uɛeggal n texxamt + Tiqeffalin n uṛubut + Taggrayt n usenqed + + Aseɣwen ur yemsil ara akken iwata From 4249d9d906ef1d37b7f2122b269ff75a4a3a2104 Mon Sep 17 00:00:00 2001 From: Marcelo Filho Date: Mon, 21 Sep 2020 20:09:22 +0000 Subject: [PATCH 11/18] Translated using Weblate (Portuguese (Brazil)) Currently translated at 98.7% (1848 of 1872 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/ --- vector/src/main/res/values-pt-rBR/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index 4032fe0764..615ee7663e 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -1632,8 +1632,8 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr O contato cancelou a confirmação O tempo de confirmação expirou - A sessão não sabe sobre essa transacção - A sessão não pode chegar a acordo sobre a chave, método hash, MAC, or SAS + A sessão não sabe sobre essa transação + A sessão não concorda com a chave, método hash, MAC, ou SAS O compromisso de hash não coincidiu O SAS não corresponde A sessão recebeu uma mensagem inesperada From 51b1d1fa872ac80b3f57ae0ec8ef967c35d64fa4 Mon Sep 17 00:00:00 2001 From: LinAGKar Date: Mon, 21 Sep 2020 20:07:36 +0000 Subject: [PATCH 12/18] Translated using Weblate (Swedish) Currently translated at 100.0% (1872 of 1872 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/sv/ --- vector/src/main/res/values-sv/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index 563391b714..732b512bc4 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -2125,7 +2125,7 @@ Element Matrix Services-adress Adress Premiumservervärd för organisationer - Skriv in adressen för Modular Element eller servern du vill använda + Skriv in adressen för den Modular Element eller server du vill använda Skriv in adressen för en server eller Element du vill ansluta till Skriv in adressen för servern du vill använda From 759974d9a815a1180acd2e200d8be284f06afe16 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 22 Sep 2020 15:33:13 +0200 Subject: [PATCH 13/18] Format resource --- vector/src/main/res/values-cs/strings.xml | 10 ++--- vector/src/main/res/values-de/strings.xml | 8 ++-- vector/src/main/res/values-et/strings.xml | 8 ++-- vector/src/main/res/values-kab/strings.xml | 8 ++-- vector/src/main/res/values-ru/strings.xml | 42 +++++++++---------- vector/src/main/res/values-sv/strings.xml | 8 ++-- vector/src/main/res/values-zh-rTW/strings.xml | 6 +-- 7 files changed, 45 insertions(+), 45 deletions(-) diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index dfba3348cc..745d938555 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -2609,11 +2609,11 @@ Vaši e-mailovou adresu můžete přidat k profilu v nastavení. Pro vypnutí PINu potvrďte PIN Nemohu otevřít místnost, z níž jste byli vykázáni. Nemohu najít tuto místnost. Ujistěte se, že existuje. - - %d vteřina - %d vteřiny - %d vteřin - + + %d vteřina + %d vteřiny + %d vteřin + Zobrazit stavové události účastníků v místnosti Zahrnuje události pozvat/vstoupit/opustit/vykopnout/vykázat a změny avatara/veřejného jména. diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index 59b03bb001..db116d9912 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -2673,10 +2673,10 @@ Verwahre deinen Wiederherstellungsschlüssel an einem sehr sicheren Ort wie eine Raum, indem du gebannt wurdest, kann nicht geöffnet werden. Raum kann nicht gefunden werden. Stelle sicher, dass er existiert. - - %d Sekunde - %d Sekunden - + + %d Sekunde + %d Sekunden + Zeige Status-Ereignisse der Raum-Mitglieder Bezieht Einladungs-/Beitritts-/Verlassen-/Entfernen-/Verbannen-Ereignisse und Avatar-/Anzeigenamen-Wechsel mit ein. diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index f8cc46d10e..5fd84ffb47 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -2544,10 +2544,10 @@ Ei ole võimalik avada sellise jututoa vaadet, kus sulle on seatud suhtluskeeld. Ei leia sellist jututuba. Palun kontrolli, et ta ikka olemas on. - - %d sekund - %d sekundit - + + %d sekund + %d sekundit + Näita jututoa liikmete olekusündmusi Sealhulgas kutsumisi, liitumisi, lahkumisi, müksamisi, keelamisi ning tunnuspildi ja kuvatava nime muutusi. diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index 0cb427bea0..9dabcdd77a 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -2539,10 +2539,10 @@ Askar n uneflay yermed timahilin i yeffren yerna yezmer daɣen ad yerr asnas ur yerkid ara akken iwata. I yineflayen kan! Abrir arurad - - %d n tsint - %d n tsintin - + + %d n tsint + %d n tsintin + Sken tidyanin n waddad n uɛeggal n texxamt Tiqeffalin n uṛubut diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index d1120efca0..5d9c44518f 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -99,7 +99,7 @@ %d пользователь %d пользователя %d пользователей - + Отправить логи @@ -833,13 +833,13 @@ %d комната %d комнаты %d комнат - + %d комната %d комнаты %d комнат - + %1$s в %2$s @@ -847,7 +847,7 @@ %d активный виджет %d активных виджета %d активных виджетов - + @@ -857,45 +857,45 @@ %d активный участник %d активных участника %d активных участников - + %d участник %d участника %d участников - + %d новое сообщение %d новых сообщения %d новых сообщений - + %1$s комната найдена для %2$s %1$s комнаты найдено для %2$s %1$s комнат найдено для %2$s - + %d изменение членства %d изменения членства %d изменений членства - + %d непрочитанное уведомление %d непрочитанных уведомления %d непрочитанных уведомлений - + %d непрочитанное уведомление %d непрочитанных уведомления %d непрочитанных уведомлений - + Получить аватар Заметка аватара @@ -1030,20 +1030,20 @@ %d выбран %d выбрано %d выбраны - + %d участник %d участника %d участников - + %d комната %d комнаты %d комнат - + Системные оповещения @@ -1304,7 +1304,7 @@ %d новый ключ был добавлен к этому устройству. %d новых ключа были добавлены к этому устройству. %d новых ключей были добавлены к этому устройству. - + @@ -1355,7 +1355,7 @@ Резервное копирование %d ключа… Резервное копирование %d ключей… Резервное копирование %d ключей… - + Все ключи сохранены @@ -2716,11 +2716,11 @@ Невозможно открыть комнату, в которую вам запрещён доступ. Невозможно найти эту комнату. Убедитесь, что она существует. - - %d секунда - %d секунды - %d секунд - + + %d секунда + %d секунды + %d секунд + Показать события статуса участников комнаты Включает в себя события приглашения/ присоединения/выхода/исключения/бана и изменение аватара/отображаемого имени. diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index 732b512bc4..7915abb41c 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -2547,10 +2547,10 @@ Kan inte öppna ett rum du är bannad från. Kan inte hitta det här rummet. Se till att det existerar. - - %d sekund - %d sekunder - + + %d sekund + %d sekunder + Visa statushändelser angående rumsmedlemmar Inkluderar när personer bjuds in, går med, lämnar, kickas, bannas eller byter sin avatar eller sitt namn. diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index 56eafad0e9..efbb583ec9 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -2562,9 +2562,9 @@ Matrix 中的消息可見度類似于電子郵件。我們忘記您的郵件意 無法開啟禁止您進入的聊天室。 找不到此聊天室。請確定它存在。 - - %d 秒 - + + %d 秒 + 顯示聊天室成員狀態活動 包含邀請/加入/離開/踢除/封鎖事件與大頭貼/顯示名稱變更等。 From 78a76a803848a6138585de75216ec6186ed5e64e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 22 Sep 2020 15:38:37 +0200 Subject: [PATCH 14/18] =?UTF-8?q?Remove=20`=E2=86=B5`=20from=20string=20re?= =?UTF-8?q?source?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/res/values-pt-rBR/strings.xml | 16 +- vector/src/main/res/values-pt-rBR/strings.xml | 140 +++++++++--------- 2 files changed, 78 insertions(+), 78 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml b/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml index 2ba369b93a..52b935c097 100644 --- a/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml +++ b/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml @@ -151,21 +151,21 @@ %1$s alterou o nível de permissão de %2$s. %1$s de %2$s para %3$s - Primeira sincronização:↵ + Primeira sincronização: \nImportando a conta… - Primeira sincronização:↵ + Primeira sincronização: \nImportando as chaves de criptografia - Primeira sincronização:↵ + Primeira sincronização: \nImportando as salas - Primeira sincronização:↵ + Primeira sincronização: \nImportando as salas em que você entrou - Primeira sincronização:↵ + Primeira sincronização: \nImportando as salas em que você foi convidado - Primeira sincronização:↵ + Primeira sincronização: \nImportando as salas em que você saiu - Primeira sincronização:↵ + Primeira sincronização: \nImportando as comunidades - Primeira sincronização:↵ + Primeira sincronização: \nImportando os dados da conta Enviando mensagem… diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index 615ee7663e..399dff3c89 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -164,8 +164,8 @@ Esqueceu sua senha? Use opções para servidor personalizado (avançado) Por favor, verifique o seu e-mail para continuar a inscrição - Atualmente, registrar-se com e-mail e número de telefone ao mesmo tempo não é possível. Apenas o número de telefone será levado em consideração.↵ -\n↵ + Atualmente, registrar-se com e-mail e número de telefone ao mesmo tempo não é possível. Apenas o número de telefone será levado em consideração. +\n \nNo entanto, você pode adicionar o endereço de e-mail ao seu perfil nas configurações. Este servidor local quer se certificar de que você não é um robô Nome de usuário indisponível @@ -177,8 +177,8 @@ Uma nova senha precisa ser inserida. Um e-mail foi enviado para %s. Após clicar no link contido no e-mail, clique abaixo. Falha ao confirmar o endereço de e-mail: certifique-se de clicar no link do e-mail - Sua senha foi alterada.↵ -\n↵ + Sua senha foi alterada. +\n \nVocê foi desconectado de todas as sessões e não receberá mais notificações. Para reativar as notificações, faça login novamente em cada aparelho. @@ -247,8 +247,8 @@ Informação - Element precisa de permissão para acessar sua galeria de fotos e vídeos para enviar e salvar anexos.↵ -\n↵ + Element precisa de permissão para acessar sua galeria de fotos e vídeos para enviar e salvar anexos. +\n \nPor favor, permita o acesso na próxima tela para poder enviar arquivos do seu celular. Element necessita permissão para acessar sua câmera para poder tirar fotos e fazer chamadas de vídeo. " @@ -258,12 +258,12 @@ " \n \nPor favor, permita o acesso na próxima tela para fazer a chamada." - Element necessita permissão para acessar sua câmera e seu microfone para fazer chamadas de vídeo.↵ -\n↵ + Element necessita permissão para acessar sua câmera e seu microfone para fazer chamadas de vídeo. +\n \nPor favor, permita o acesso na próxima tela para fazer a chamada. Element precisa de permissão para acessar os seus contatos para poder encontrar outros usuários a partir de seus e-mails e números de telefone. Se você concordar em usar a sua lista de contatos para esse propósito, permita o acesso na próxima janela pop-up. - Element precisa de permissão para acessar os seus contatos para poder encontrar outros usuários a partir de seus e-mails e números de telefone.↵ -\n↵ + Element precisa de permissão para acessar os seus contatos para poder encontrar outros usuários a partir de seus e-mails e números de telefone. +\n \nVocê concorda em usar a sua lista de contatos para esse propósito\? Desculpe. A ação não foi realizada, por falta de permissão @@ -286,7 +286,7 @@ Você foi convidada(o) a entrar nesta sala por %s - Este convite foi enviado a %s, que não está associado com esta conta.↵ + Este convite foi enviado a %s, que não está associado com esta conta. \nVocê pode querer fazer login com uma conta diferente, ou adicionar este e-mail à sua conta. Você está tentando acessar %s. Quer entrar na sala para poder participar da conversa? uma sala @@ -507,8 +507,8 @@ Confirme a nova senha Não consegui atualizar a senha Sua senha foi atualizada - Mostrar todas as mensagens de %s\?↵ -\n↵ + Mostrar todas as mensagens de %s\? +\n \nNote que esta ação irá reiniciar o aplicativo e pode levar algum tempo. Deseja deixar de notificar este aparelho\? @@ -592,7 +592,7 @@ A criptografia está ativada nesta sala. A criptografia está desativada nesta sala. - Ativar criptografia·↵ + Ativar criptografia· \n(atenção: não é possível desativar depois!) @@ -900,8 +900,8 @@ Atenção: este arquivo poderá ser apagado se o aplicativo for desinstalado.Enviar áudio Enviar uma figurinha - No momento, você não tem nenhum pacote de figurinhas ativado.↵ -\n↵ + No momento, você não tem nenhum pacote de figurinhas ativado. +\n \nQuer adicionar alguns agora\? continuar com… @@ -1002,10 +1002,10 @@ Atenção: este arquivo poderá ser apagado se o aplicativo for desinstalado.Revisar agora Desativar minha conta - Isso tornará sua conta permanentemente inutilizável. Você não conseguirá efetuar login e ninguém poderá registrar novamente o mesmo ID de usuário. Isso fará com que sua conta saia de todas as salas das quais está participando e removerá os detalhes de sua conta do servidor de identidade. Esta ação é irreversível.↵ -\n↵ -\nDesativar sua conta não faz com que, por padrão, suas mensagens enviadas sejam apagadas. Se você deseja que suas mensagens também sejam apagadas, marque a opção abaixo.↵ -\n↵ + Isso tornará sua conta permanentemente inutilizável. Você não conseguirá efetuar login e ninguém poderá registrar novamente o mesmo ID de usuário. Isso fará com que sua conta saia de todas as salas das quais está participando e removerá os detalhes de sua conta do servidor de identidade. Esta ação é irreversível. +\n +\nDesativar sua conta não faz com que, por padrão, suas mensagens enviadas sejam apagadas. Se você deseja que suas mensagens também sejam apagadas, marque a opção abaixo. +\n \nA visibilidade de mensagens na Matrix é semelhante a um e-mail. O fato de apagarmos suas mensagens significa que suas mensagens enviadas não serão compartilhadas com nenhum usuário novo ou ainda não registrado, mas os usuários registrados que já tiveram acesso a essas mensagens ainda terão acesso uma cópia delas. Quando minha conta for desativada, apague todas as mensagens que eu enviei (Atenção: isso fará com que futuros usuários tenham uma visão incompleta das conversas) Para continuar, entre com sua senha: @@ -1063,14 +1063,14 @@ Atenção: este arquivo poderá ser apagado se o aplicativo for desinstalado.Configurações da conta Notificações estão ativadas para sua conta. - Notificações estão desativadas para sua conta.↵ + Notificações estão desativadas para sua conta. \nPor favor, revise as configurações da conta. Ativar Configurações da sessão Notificações estão ativadas nesta sessão. Remover da sala - Notificações não estão ativadas nesta sessão.↵ + Notificações não estão ativadas nesta sessão. \nPor favor, revise as configurações do Element. Ativar @@ -1126,10 +1126,10 @@ Tente reiniciar a aplicação. Conexão em segundo plano Element precisa manter um baixo impacto na conexão em segundo plano para ter notificações confiáveis. Na próxima tela, você será solicitado a permitir que o Element funcione sempre em segundo plano, por favor aceite. - Restrições de segundo plano estão desativadas para o Element. Este teste deve ser realizado usando dados móveis (sem Wi-Fi).↵ + Restrições de segundo plano estão desativadas para o Element. Este teste deve ser realizado usando dados móveis (sem Wi-Fi). \n%1$s - Restrições em segundo plano estão ativadas para o Element.↵ -\nO aplicativo funciona bastante restringido enquanto está em segundo plano, o que pode afetar as notificações.↵ + Restrições em segundo plano estão ativadas para o Element. +\nO aplicativo funciona bastante restringido enquanto está em segundo plano, o que pode afetar as notificações. \n%1$s Formatação de texto Formatar o texto das mensagens a serem enviadas. Por exemplo: inserir asteriscos antes e depois do texto, mostrará o texto em itálico. @@ -1205,14 +1205,14 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Falha ao carregar regras personalizadas, tente novamente. Verifique as configurações - [%1$s]↵ + [%1$s] \nEste erro está fora do controle do Element e, de acordo com o Google, esse erro indica que o aparelho tem muitos aplicativos registrados com FCM. O erro só ocorre nos casos em que há números extremos de aplicativos, portanto, isso não deve afetar o usuário comum. Bloquear Entre com o login único Este endereço não está acessível. Por favor, verifique-o Seu aparelho está usando um protocolo de segurança TLS desatualizado, vulnerável a ataques. Para sua segurança, você não poderá se conectar - [%1$s]↵ + [%1$s] \nEste erro está fora de controle da Element. Isso pode ocorrer por vários motivos. Talvez funcione se você tentar novamente mais tarde. Você também pode verificar se o uso de dados do Google Play Service está restrito nas configurações do sistema, ou se o relógio do seu aparelho está correto. O erro também pode ocorrer em ROMs personalizadas. Iniciando o serviço [%1$s] @@ -1257,7 +1257,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Não pergunte novamente A chamada falhou - Falha ao estabelecer conexão em tempo real.↵ + Falha ao estabelecer conexão em tempo real. \nPor favor, peça ao administrador do seu servidor para configurar um servidor TURN, de modo que as chamadas funcionem de maneira estável. Selecione a caixa de som @@ -1317,10 +1317,10 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr O aplicativo não precisa de se conectar ao servidor em segundo plano, isto deve reduzir a utilização da bateria Sincronização em segundo plano (Experimental) Optimizado para bateria - Element sincronizará em segundo plano para preservar os recursos limitados do aparelho (bateria).↵ + Element sincronizará em segundo plano para preservar os recursos limitados do aparelho (bateria). \nDependendo do estado dos recursos do seu aparelho, a sincronização pode ser adiada pelo sistema operacional. Optimizado em tempo real - O Element sincronizará periodicamente em segundo plano, no momento estabelecido (configurável).↵ + O Element sincronizará periodicamente em segundo plano, no momento estabelecido (configurável). \nIsso afetará o uso de dados e da bateria. Haverá uma notificação permanente informando que o Element está sincronizando. Sem sincronização em segundo plano Você não será notificado sobre mensagens recebidas quando o Element estiver em segundo plano. @@ -1328,7 +1328,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Intervalo de sincronização preferido - %s↵ + %s \nA sincronização pode ser adiada dependendo dos recursos (bateria) ou do estado do aparelho (modo de suspensão). Integrações Use o Gerenciador de Integrações para gerenciar bots, pontes, widgets e pacotes de figurinhas. @@ -1405,7 +1405,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Widget adicionado por: A sua utilização pode definir cookies e compartilhar dados com %s: A sua utilização pode compartilhar dados com %s: - Falha ao carregar widget.↵ + Falha ao carregar widget. \n%s Recarregar widget Abrir no navegador @@ -1430,12 +1430,12 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr O gerenciador de integrações não está configurado. Para continuar, você precisa aceitar os termos de serviço. - Uma nova sessão está solicitando chaves de criptografia. Nome da sessão: %1$s↵ -\nVisto por último às: %2$s↵ + Uma nova sessão está solicitando chaves de criptografia. Nome da sessão: %1$s +\nVisto por último às: %2$s \nSe você não fez login em outra sessão, ignore essa solicitação. - Uma nova sessão está solicitando chaves de criptografia.↵ -\nNome da sessão: %1$s↵ -\nVisto por último às: %2$s↵ + Uma nova sessão está solicitando chaves de criptografia. +\nNome da sessão: %1$s +\nVisto por último às: %2$s \nSe você não fez login em outra sessão, ignore essa solicitação. Confirmar @@ -1452,8 +1452,8 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Nenhuma sessão Matrix disponível Nunca perca mensagens criptografadas - As mensagens em salas criptografadas são protegidas com a criptografia de ponta a ponta. Somente você e o(s) destinatário(s) têm as chaves para ler essas mensagens.↵ -\n↵ + As mensagens em salas criptografadas são protegidas com a criptografia de ponta a ponta. Somente você e o(s) destinatário(s) têm as chaves para ler essas mensagens. +\n \nFaça backup de suas chaves de segurança para evitar perdê-las. Comece a usar o Backup de Chave (Avançado) @@ -1591,7 +1591,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Algoritmo Resposta de descoberta inválida no servidor local Completar Automaticamente as Opções do Servidor - Element detectou uma configuração personalizada do servidor para a sua ID de usuário \"%1$s\":↵ + Element detectou uma configuração personalizada do servidor para a sua ID de usuário \"%1$s\": \n%2$s Usar a Configuração @@ -1881,8 +1881,8 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr \n \nSe você não quiser ver mais conteúdo deste usuário, você pode bloqueá-lo para esconder suas mensagens - Element precisa de permissão para salvar suas chaves E2E no aparelho.↵ -\n↵ + Element precisa de permissão para salvar suas chaves E2E no aparelho. +\n \nPermita o acesso na próxima janela para poder exportar suas chaves manualmente. Não há conexão de rede no momento @@ -1945,12 +1945,12 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Digite o endereço do servidor que você deseja usar Ocorreu um erro ao carregar a página: %1$s (%2$d) - O aplicativo não pode entrar neste servidor. O servidor suporta os seguintes tipos de login: %1$s.↵ -\n↵ + O aplicativo não pode entrar neste servidor. O servidor suporta os seguintes tipos de login: %1$s. +\n \nDeseja entrar no servidor usando o Element Web\? Desculpe, este servidor não está aceitando novas contas. - O aplicativo não pode criar uma conta neste servidor.↵ -\n↵ + O aplicativo não pode criar uma conta neste servidor. +\n \nDeseja criar uma conta no servidor usando o Element Web\? Este e-mail não está associado a nenhuma conta. @@ -1978,8 +1978,8 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Voltar para Entrar Atenção - Sua senha ainda não foi alterada.↵ -\n↵ + Sua senha ainda não foi alterada. +\n \nInterromper a alteração de senha\? Defina um endereço de e-mail @@ -2023,7 +2023,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Aceitar termos para continuar Por favor, verifique seu e-mail - Acabamos de enviar um e-mail para %1$s.↵ + Acabamos de enviar um e-mail para %1$s. \nPor favor, clique no link que ele contém para continuar a criação da conta. O código digitado não está correto. Por favor, verifique-o. Servidor desatualizado @@ -2062,13 +2062,13 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Entrar Senha Limpar dados pessoais - Atenção: Seus dados pessoais (incluindo chaves de criptografia) ainda estão armazenados neste aparelho.↵ -\n↵ + Atenção: Seus dados pessoais (incluindo chaves de criptografia) ainda estão armazenados neste aparelho. +\n \nApague-os quando não usar mais este aparelho, ou se quiser entrar em outra conta. Limpar todos os dados Limpar dados - Limpar todos os dados atualmente armazenados neste aparelho\?↵ + Limpar todos os dados atualmente armazenados neste aparelho\? \nEntre novamente para acessar os dados e mensagens da sua conta. Você perderá o acesso as mensagens seguras a menos que você faça login para recuperar suas chaves de criptografia. Limpar dados @@ -2113,11 +2113,11 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Procure o escudo verde para garantir que um usuário seja confiável. Confie em todos os usuários numa sala para garantir que a sala é segura. Não seguro - Um dos seguintes casos pode estar comprometido:↵ -\n↵ -\n·- Seu servidor doméstico↵ -\n·- O servidor do usuário que você está verificando↵ -\n·- A sua, ou a conexão de outros usuários à internet↵ + Um dos seguintes casos pode estar comprometido: +\n +\n·- Seu servidor doméstico +\n·- O servidor do usuário que você está verificando +\n·- A sua, ou a conexão de outros usuários à internet \n·- O seu, ou o aparelho dos outros usuários Vídeo. @@ -2153,8 +2153,8 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Confirmar %s Confirmou %s Aguardando por %s… - Para segurança extra, confirme %s comparando um código único em ambos os aparelhos.↵ -\n↵ + Para segurança extra, confirme %s comparando um código único em ambos os aparelhos. +\n \nPara máxima segurança, faça isso pessoalmente. As mensagens nesta sala não estão criptografadas de ponta a ponta. As mensagens nesta sala estão criptografadas de ponta a ponta. @@ -2193,7 +2193,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Desbloquear - Esta sessão não pode compartilhar essa confirmação com suas outras sessões.↵ + Esta sessão não pode compartilhar essa confirmação com suas outras sessões. \nA confirmação será salvada localmente e será compartilhada em uma versão futura do aplicativo. Salas recentes @@ -2337,13 +2337,13 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Se você cancelar, você não poderá ler mensagens criptografadas em seu novo aparelho, e outros usuários não confiarão nele Você não confirmará %1$s (%2$s) se cancelar agora. Precisará começar novamente no perfil dele. - Um dos seguintes casos pode estar comprometido:↵ -\n↵ -\n- Sua senha↵ -\n- Seu servidor doméstico↵ -\n- Este aparelho, ou o outro aparelho↵ -\n- A conexão à internet de qualquer um dos aparelhos que você está usando↵ -\n↵ + Um dos seguintes casos pode estar comprometido: +\n +\n- Sua senha +\n- Seu servidor doméstico +\n- Este aparelho, ou o outro aparelho +\n- A conexão à internet de qualquer um dos aparelhos que você está usando +\n \nRecomendamos que você altere imediatamente a sua senha e a chave de recuperação em Configurações. Confirme seus aparelhos em Configurações. @@ -2466,7 +2466,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Definir uma nova senha da conta… Use o Element mais recente em seus outros aparelhos: Element Web, Element para Computador, Element para iOS, Element para Android, ou outro cliente Matrix capaz de fazer autoverificação - Element Web↵ + Element Web \nElement para Computador Element para iOS \nElement para Android @@ -2495,8 +2495,8 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Escolha um nome de usuário. Escolha uma senha. Verificar este link - O link %1$s redirecionará você para outro site: %2$s.↵ -\n↵ + O link %1$s redirecionará você para outro site: %2$s. +\n \nDeseja continuar\? Não foi possível criar sua DM. Por favor, verifique os usuários que você deseja convidar e tente novamente. From 91fe30811301242d4a6933041e84e924ce5923a2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 22 Sep 2020 15:39:56 +0200 Subject: [PATCH 15/18] Import SAS strings --- .../main/res/values-pt-rBR/strings_sas.xml | 68 +++++++++++++++++++ .../src/main/res/values-sv/strings_sas.xml | 6 +- .../main/res/values-zh-rCN/strings_sas.xml | 58 ++++++++++++++++ 3 files changed, 129 insertions(+), 3 deletions(-) create mode 100644 matrix-sdk-android/src/main/res/values-pt-rBR/strings_sas.xml diff --git a/matrix-sdk-android/src/main/res/values-pt-rBR/strings_sas.xml b/matrix-sdk-android/src/main/res/values-pt-rBR/strings_sas.xml new file mode 100644 index 0000000000..ed621e5477 --- /dev/null +++ b/matrix-sdk-android/src/main/res/values-pt-rBR/strings_sas.xml @@ -0,0 +1,68 @@ + + + + Cachorro + Gato + Leão + Cavalo + Unicórnio + Porco + Elefante + Coelho + Panda + Galo + Pinguim + Tartaruga + Peixe + Polvo + Borboleta + Flor + Árvore + Cacto + Cogumelo + Globo + Lua + Nuvem + Fogo + Banana + Maçã + Morango + Milho + Pizza + Bolo + Coração + Sorriso + Robô + Chapéu + Óculos + Chave inglesa + Papai-noel + Joinha + Guarda-chuva + Ampulheta + Relógio + Presente + Lâmpada + Livro + Lápis + Clipe de papel + Tesoura + Cadeado + Chave + Martelo + Telefone + Bandeira + Trem + Bicicleta + Avião + Foguete + Troféu + Bola + Guitarra + Trombeta + Sino + Âncora + Fones de ouvido + Pasta + Alfinete + diff --git a/matrix-sdk-android/src/main/res/values-sv/strings_sas.xml b/matrix-sdk-android/src/main/res/values-sv/strings_sas.xml index 1e06452ba5..2d6e2f407a 100644 --- a/matrix-sdk-android/src/main/res/values-sv/strings_sas.xml +++ b/matrix-sdk-android/src/main/res/values-sv/strings_sas.xml @@ -27,7 +27,7 @@ Banan Äpple Jordgubbe - Majskolv + Majs Pizza Tårta Hjärta @@ -41,7 +41,7 @@ Paraply Timglas Klocka - Paket + Present Lampa Bok Penna @@ -52,7 +52,7 @@ Hammare Telefon Flagga - Ånglok + Tåg Cykel Flygplan Raket diff --git a/matrix-sdk-android/src/main/res/values-zh-rCN/strings_sas.xml b/matrix-sdk-android/src/main/res/values-zh-rCN/strings_sas.xml index 439615735a..8d50991805 100644 --- a/matrix-sdk-android/src/main/res/values-zh-rCN/strings_sas.xml +++ b/matrix-sdk-android/src/main/res/values-zh-rCN/strings_sas.xml @@ -7,4 +7,62 @@ 独角兽 + 大象 + 兔子 + 熊猫 + 公鸡 + 企鹅 + 乌龟 + + 章鱼 + 蝴蝶 + + + 仙人掌 + 蘑菇 + 地球 + 月亮 + + + 香蕉 + 苹果 + 草莓 + 玉米 + 披萨 + 蛋糕 + + 笑脸 + 机器人 + 帽子 + 眼镜 + 扳手 + 圣诞老人 + + + 沙漏 + 时钟 + 礼物 + 灯泡 + + 铅笔 + 回形针 + 剪刀 + + 钥匙 + 锤子 + 电话 + 旗帜 + 火车 + 自行车 + 飞机 + 火箭 + 奖杯 + + 吉他 + 喇叭 + 铃铛 + + 耳机 + 文件夹 + 图钉 From 7c063972ac4196a0d4276a475082a4541146e5b9 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 22 Sep 2020 17:05:25 +0200 Subject: [PATCH 16/18] Use cache for user color --- CHANGES.md | 1 + .../im/vector/app/core/di/VectorComponent.kt | 3 + .../im/vector/app/core/utils/UserColor.kt | 39 ---------- .../app/features/home/AvatarRenderer.kt | 35 ++++----- .../im/vector/app/features/home/RoomColor.kt | 29 -------- .../app/features/home/ShortcutsHandler.kt | 2 +- .../home/room/detail/RoomDetailFragment.kt | 8 ++- .../detail/timeline/MessageColorProvider.kt | 8 ++- .../helper/MatrixItemColorProvider.kt | 72 +++++++++++++++++++ .../detail/timeline/item/AbsMessageItem.kt | 2 +- .../vector/app/features/html/PillImageSpan.kt | 4 +- 11 files changed, 102 insertions(+), 101 deletions(-) delete mode 100644 vector/src/main/java/im/vector/app/core/utils/UserColor.kt delete mode 100644 vector/src/main/java/im/vector/app/features/home/RoomColor.kt create mode 100644 vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MatrixItemColorProvider.kt diff --git a/CHANGES.md b/CHANGES.md index 081877c313..1aea79961a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,6 +7,7 @@ Features ✨: Improvements 🙌: - Add "show password" in import Megolm keys dialog - Visually disable call buttons in menu and prohibit calling when permissions are insufficient (#2112) + - Use cache for user color Bugfix 🐛: - Long message cannot be sent/takes infinite time & blocks other messages #1397 diff --git a/vector/src/main/java/im/vector/app/core/di/VectorComponent.kt b/vector/src/main/java/im/vector/app/core/di/VectorComponent.kt index c750384485..4ba3d6ba13 100644 --- a/vector/src/main/java/im/vector/app/core/di/VectorComponent.kt +++ b/vector/src/main/java/im/vector/app/core/di/VectorComponent.kt @@ -36,6 +36,7 @@ import im.vector.app.features.crypto.verification.IncomingVerificationRequestHan import im.vector.app.features.grouplist.SelectedGroupDataSource import im.vector.app.features.home.AvatarRenderer import im.vector.app.features.home.HomeRoomListDataSource +import im.vector.app.features.home.room.detail.timeline.helper.MatrixItemColorProvider import im.vector.app.features.html.EventHtmlRenderer import im.vector.app.features.html.VectorHtmlCompressor import im.vector.app.features.login.ReAuthHelper @@ -71,6 +72,8 @@ interface VectorComponent { fun matrix(): Matrix + fun matrixItemColorProvider(): MatrixItemColorProvider + fun sessionListener(): SessionListener fun currentSession(): Session diff --git a/vector/src/main/java/im/vector/app/core/utils/UserColor.kt b/vector/src/main/java/im/vector/app/core/utils/UserColor.kt deleted file mode 100644 index af006a35bb..0000000000 --- a/vector/src/main/java/im/vector/app/core/utils/UserColor.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2019 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package im.vector.app.core.utils - -import androidx.annotation.ColorRes -import im.vector.app.R -import kotlin.math.abs - -@ColorRes -fun getColorFromUserId(userId: String?): Int { - var hash = 0 - - userId?.toList()?.map { chr -> hash = (hash shl 5) - hash + chr.toInt() } - - return when (abs(hash) % 8) { - 1 -> R.color.riotx_username_2 - 2 -> R.color.riotx_username_3 - 3 -> R.color.riotx_username_4 - 4 -> R.color.riotx_username_5 - 5 -> R.color.riotx_username_6 - 6 -> R.color.riotx_username_7 - 7 -> R.color.riotx_username_8 - else -> R.color.riotx_username_1 - } -} diff --git a/vector/src/main/java/im/vector/app/features/home/AvatarRenderer.kt b/vector/src/main/java/im/vector/app/features/home/AvatarRenderer.kt index 7787054240..08f18a00ba 100644 --- a/vector/src/main/java/im/vector/app/features/home/AvatarRenderer.kt +++ b/vector/src/main/java/im/vector/app/features/home/AvatarRenderer.kt @@ -16,13 +16,11 @@ package im.vector.app.features.home -import android.content.Context import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.widget.ImageView import androidx.annotation.AnyThread import androidx.annotation.UiThread -import androidx.core.content.ContextCompat import androidx.core.graphics.drawable.toBitmap import com.amulyakhare.textdrawable.TextDrawable import com.bumptech.glide.request.RequestOptions @@ -33,7 +31,7 @@ import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.glide.GlideApp import im.vector.app.core.glide.GlideRequest import im.vector.app.core.glide.GlideRequests -import im.vector.app.core.utils.getColorFromUserId +import im.vector.app.features.home.room.detail.timeline.helper.MatrixItemColorProvider import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.session.content.ContentUrlResolver import org.matrix.android.sdk.api.util.MatrixItem @@ -43,7 +41,8 @@ import javax.inject.Inject * This helper centralise ways to retrieve avatar into ImageView or even generic Target */ -class AvatarRenderer @Inject constructor(private val activeSessionHolder: ActiveSessionHolder) { +class AvatarRenderer @Inject constructor(private val activeSessionHolder: ActiveSessionHolder, + private val matrixItemColorProvider: MatrixItemColorProvider) { companion object { private const val THUMBNAIL_SIZE = 250 @@ -51,8 +50,7 @@ class AvatarRenderer @Inject constructor(private val activeSessionHolder: Active @UiThread fun render(matrixItem: MatrixItem, imageView: ImageView) { - render(imageView.context, - GlideApp.with(imageView), + render(GlideApp.with(imageView), matrixItem, DrawableImageViewTarget(imageView)) } @@ -64,8 +62,7 @@ class AvatarRenderer @Inject constructor(private val activeSessionHolder: Active @UiThread fun render(matrixItem: MatrixItem, imageView: ImageView, glideRequests: GlideRequests) { - render(imageView.context, - glideRequests, + render(glideRequests, matrixItem, DrawableImageViewTarget(imageView)) } @@ -79,7 +76,7 @@ class AvatarRenderer @Inject constructor(private val activeSessionHolder: Active displayName = mappedContact.displayName ) - val placeholder = getPlaceholderDrawable(imageView.context, matrixItem) + val placeholder = getPlaceholderDrawable(matrixItem) GlideApp.with(imageView) .load(mappedContact.photoURI) .apply(RequestOptions.circleCropTransform()) @@ -88,11 +85,10 @@ class AvatarRenderer @Inject constructor(private val activeSessionHolder: Active } @UiThread - fun render(context: Context, - glideRequests: GlideRequests, + fun render(glideRequests: GlideRequests, matrixItem: MatrixItem, target: Target) { - val placeholder = getPlaceholderDrawable(context, matrixItem) + val placeholder = getPlaceholderDrawable(matrixItem) buildGlideRequest(glideRequests, matrixItem.avatarUrl) .placeholder(placeholder) .into(target) @@ -100,7 +96,7 @@ class AvatarRenderer @Inject constructor(private val activeSessionHolder: Active @AnyThread @Throws - fun shortcutDrawable(context: Context, glideRequests: GlideRequests, matrixItem: MatrixItem, iconSize: Int): Bitmap { + fun shortcutDrawable(glideRequests: GlideRequests, matrixItem: MatrixItem, iconSize: Int): Bitmap { return glideRequests .asBitmap() .apply { @@ -108,7 +104,7 @@ class AvatarRenderer @Inject constructor(private val activeSessionHolder: Active if (resolvedUrl != null) { load(resolvedUrl) } else { - val avatarColor = avatarColor(matrixItem, context) + val avatarColor = matrixItemColorProvider.getColor(matrixItem) load(TextDrawable.builder() .beginConfig() .bold() @@ -130,8 +126,8 @@ class AvatarRenderer @Inject constructor(private val activeSessionHolder: Active } @AnyThread - fun getPlaceholderDrawable(context: Context, matrixItem: MatrixItem): Drawable { - val avatarColor = avatarColor(matrixItem, context) + fun getPlaceholderDrawable(matrixItem: MatrixItem): Drawable { + val avatarColor = matrixItemColorProvider.getColor(matrixItem) return TextDrawable.builder() .beginConfig() .bold() @@ -152,11 +148,4 @@ class AvatarRenderer @Inject constructor(private val activeSessionHolder: Active return activeSessionHolder.getSafeActiveSession()?.contentUrlResolver() ?.resolveThumbnail(avatarUrl, THUMBNAIL_SIZE, THUMBNAIL_SIZE, ContentUrlResolver.ThumbnailMethod.SCALE) } - - private fun avatarColor(matrixItem: MatrixItem, context: Context): Int { - return when (matrixItem) { - is MatrixItem.UserItem -> ContextCompat.getColor(context, getColorFromUserId(matrixItem.id)) - else -> ContextCompat.getColor(context, getColorFromRoomId(matrixItem.id)) - } - } } diff --git a/vector/src/main/java/im/vector/app/features/home/RoomColor.kt b/vector/src/main/java/im/vector/app/features/home/RoomColor.kt deleted file mode 100644 index 88ec582c92..0000000000 --- a/vector/src/main/java/im/vector/app/features/home/RoomColor.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2019 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package im.vector.app.features.home - -import androidx.annotation.ColorRes -import im.vector.app.R - -@ColorRes -fun getColorFromRoomId(roomId: String?): Int { - return when ((roomId?.toList()?.sumBy { it.toInt() } ?: 0) % 3) { - 1 -> R.color.riotx_avatar_fill_2 - 2 -> R.color.riotx_avatar_fill_3 - else -> R.color.riotx_avatar_fill_1 - } -} diff --git a/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt b/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt index ad0209845f..1a476913f3 100644 --- a/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt +++ b/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt @@ -70,7 +70,7 @@ class ShortcutsHandler @Inject constructor( .map { room -> val intent = RoomDetailActivity.shortcutIntent(context, room.roomId) val bitmap = try { - avatarRenderer.shortcutDrawable(context, GlideApp.with(context), room.toMatrixItem(), iconSize) + avatarRenderer.shortcutDrawable(GlideApp.with(context), room.toMatrixItem(), iconSize) } catch (failure: Throwable) { null } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index 6acdcc5aa6..7c3ac6011e 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -97,7 +97,6 @@ import im.vector.app.core.utils.colorizeMatchingText import im.vector.app.core.utils.copyToClipboard import im.vector.app.core.utils.createJSonViewerStyleProvider import im.vector.app.core.utils.createUIHandler -import im.vector.app.core.utils.getColorFromUserId import im.vector.app.core.utils.isValidUrl import im.vector.app.core.utils.onPermissionResultAudioIpCall import im.vector.app.core.utils.onPermissionResultVideoIpCall @@ -127,6 +126,7 @@ import im.vector.app.features.home.room.detail.timeline.action.EventSharedAction import im.vector.app.features.home.room.detail.timeline.action.MessageActionsBottomSheet import im.vector.app.features.home.room.detail.timeline.action.MessageSharedActionViewModel import im.vector.app.features.home.room.detail.timeline.edithistory.ViewEditHistoryBottomSheet +import im.vector.app.features.home.room.detail.timeline.helper.MatrixItemColorProvider import im.vector.app.features.home.room.detail.timeline.item.AbsMessageItem import im.vector.app.features.home.room.detail.timeline.item.MessageFileItem import im.vector.app.features.home.room.detail.timeline.item.MessageImageVideoItem @@ -217,7 +217,9 @@ class RoomDetailFragment @Inject constructor( private val vectorPreferences: VectorPreferences, private val colorProvider: ColorProvider, private val notificationUtils: NotificationUtils, - private val webRtcPeerConnectionManager: WebRtcPeerConnectionManager) : + private val webRtcPeerConnectionManager: WebRtcPeerConnectionManager, + private val matrixItemColorProvider: MatrixItemColorProvider +) : VectorBaseFragment(), TimelineEventController.Callback, VectorInviteView.Callback, @@ -790,7 +792,7 @@ class RoomDetailFragment @Inject constructor( // switch to expanded bar composerLayout.composerRelatedMessageTitle.apply { text = event.senderInfo.disambiguatedDisplayName - setTextColor(ContextCompat.getColor(requireContext(), getColorFromUserId(event.root.senderId))) + setTextColor(matrixItemColorProvider.getColor(MatrixItem.UserItem(event.root.senderId ?: "@"))) } val messageContent: MessageContent? = event.getLastMessageContent() diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/MessageColorProvider.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/MessageColorProvider.kt index 66e2c745a4..d1bef4c8c7 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/MessageColorProvider.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/MessageColorProvider.kt @@ -19,18 +19,20 @@ package im.vector.app.features.home.room.detail.timeline import androidx.annotation.ColorInt import im.vector.app.R import im.vector.app.core.resources.ColorProvider -import im.vector.app.core.utils.getColorFromUserId +import im.vector.app.features.home.room.detail.timeline.helper.MatrixItemColorProvider import im.vector.app.features.settings.VectorPreferences import org.matrix.android.sdk.api.session.room.send.SendState +import org.matrix.android.sdk.api.util.MatrixItem import javax.inject.Inject class MessageColorProvider @Inject constructor( private val colorProvider: ColorProvider, + private val matrixItemColorProvider: MatrixItemColorProvider, private val vectorPreferences: VectorPreferences) { @ColorInt - fun getMemberNameTextColor(userId: String): Int { - return colorProvider.getColor(getColorFromUserId(userId)) + fun getMemberNameTextColor(matrixItem: MatrixItem): Int { + return matrixItemColorProvider.getColor(matrixItem) } @ColorInt diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MatrixItemColorProvider.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MatrixItemColorProvider.kt new file mode 100644 index 0000000000..adefb33801 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MatrixItemColorProvider.kt @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2020 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package im.vector.app.features.home.room.detail.timeline.helper + +import androidx.annotation.ColorInt +import androidx.annotation.ColorRes +import im.vector.app.R +import im.vector.app.core.resources.ColorProvider +import org.matrix.android.sdk.api.util.MatrixItem +import javax.inject.Inject +import javax.inject.Singleton +import kotlin.math.abs + +@Singleton +class MatrixItemColorProvider @Inject constructor( + private val colorProvider: ColorProvider +) { + private val cache = mutableMapOf() + + @ColorInt + fun getColor(matrixItem: MatrixItem): Int { + return cache.getOrPut(matrixItem.id) { + colorProvider.getColor( + when (matrixItem) { + is MatrixItem.UserItem -> getColorFromUserId(matrixItem.id) + else -> getColorFromRoomId(matrixItem.id) + } + ) + } + } + + @ColorRes + private fun getColorFromUserId(userId: String?): Int { + var hash = 0 + + userId?.toList()?.map { chr -> hash = (hash shl 5) - hash + chr.toInt() } + + return when (abs(hash) % 8) { + 1 -> R.color.riotx_username_2 + 2 -> R.color.riotx_username_3 + 3 -> R.color.riotx_username_4 + 4 -> R.color.riotx_username_5 + 5 -> R.color.riotx_username_6 + 6 -> R.color.riotx_username_7 + 7 -> R.color.riotx_username_8 + else -> R.color.riotx_username_1 + } + } + + @ColorRes + private fun getColorFromRoomId(roomId: String?): Int { + return when ((roomId?.toList()?.sumBy { it.toInt() } ?: 0) % 3) { + 1 -> R.color.riotx_avatar_fill_2 + 2 -> R.color.riotx_avatar_fill_3 + else -> R.color.riotx_avatar_fill_1 + } + } +} diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/AbsMessageItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/AbsMessageItem.kt index 7c2a6286b9..cb7cb1eb31 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/AbsMessageItem.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/AbsMessageItem.kt @@ -85,7 +85,7 @@ abstract class AbsMessageItem : AbsBaseMessageItem super.unbind(holder) } - private fun Attributes.getMemberNameColor() = messageColorProvider.getMemberNameTextColor(informationData.senderId) + private fun Attributes.getMemberNameColor() = messageColorProvider.getMemberNameTextColor(informationData.matrixItem) abstract class Holder(@IdRes stubId: Int) : AbsBaseMessageItem.Holder(stubId) { val avatarImageView by bind(R.id.messageAvatarImageView) diff --git a/vector/src/main/java/im/vector/app/features/html/PillImageSpan.kt b/vector/src/main/java/im/vector/app/features/html/PillImageSpan.kt index 2602dfd6c7..76947e8d3d 100644 --- a/vector/src/main/java/im/vector/app/features/html/PillImageSpan.kt +++ b/vector/src/main/java/im/vector/app/features/html/PillImageSpan.kt @@ -53,7 +53,7 @@ class PillImageSpan(private val glideRequests: GlideRequests, @UiThread fun bind(textView: TextView) { tv = WeakReference(textView) - avatarRenderer.render(context, glideRequests, matrixItem, target) + avatarRenderer.render(glideRequests, matrixItem, target) } // ReplacementSpan ***************************************************************************** @@ -99,7 +99,7 @@ class PillImageSpan(private val glideRequests: GlideRequests, val icon = try { avatarRenderer.getCachedDrawable(glideRequests, matrixItem) } catch (exception: Exception) { - avatarRenderer.getPlaceholderDrawable(context, matrixItem) + avatarRenderer.getPlaceholderDrawable(matrixItem) } return ChipDrawable.createFromResource(context, R.xml.pill_view).apply { From 7f853314480cb45c527ddcf92f169128c043107e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 22 Sep 2020 18:40:37 +0200 Subject: [PATCH 17/18] Add a setting to show timestamp for all messages (#2123) --- CHANGES.md | 1 + .../timeline/helper/MessageInformationDataFactory.kt | 5 +++-- .../home/room/detail/timeline/item/AbsMessageItem.kt | 12 ++++++++++-- .../detail/timeline/item/MessageInformationData.kt | 1 + .../src/main/res/xml/vector_settings_preferences.xml | 3 +-- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 081877c313..5252a1ef0b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,6 +7,7 @@ Features ✨: Improvements 🙌: - Add "show password" in import Megolm keys dialog - Visually disable call buttons in menu and prohibit calling when permissions are insufficient (#2112) + - Add a setting to show timestamp for all messages (#2123) Bugfix 🐛: - Long message cannot be sent/takes infinite time & blocks other messages #1397 diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt index e050889dbd..f7a1a18d9f 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt @@ -21,13 +21,13 @@ package im.vector.app.features.home.room.detail.timeline.helper import im.vector.app.core.date.DateFormatKind import im.vector.app.core.date.VectorDateFormatter import im.vector.app.core.extensions.localDateTime -import im.vector.app.core.resources.ColorProvider import im.vector.app.features.home.room.detail.timeline.item.E2EDecoration import im.vector.app.features.home.room.detail.timeline.item.MessageInformationData import im.vector.app.features.home.room.detail.timeline.item.PollResponseData import im.vector.app.features.home.room.detail.timeline.item.ReactionInfoData import im.vector.app.features.home.room.detail.timeline.item.ReadReceiptData import im.vector.app.features.home.room.detail.timeline.item.ReferencesInfoData +import im.vector.app.features.settings.VectorPreferences import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.events.model.EventType @@ -49,7 +49,7 @@ import javax.inject.Inject class MessageInformationDataFactory @Inject constructor(private val session: Session, private val roomSummaryHolder: RoomSummaryHolder, private val dateFormatter: VectorDateFormatter, - private val colorProvider: ColorProvider) { + private val vectorPreferences: VectorPreferences) { fun create(event: TimelineEvent, nextEvent: TimelineEvent?): MessageInformationData { // Non nullability has been tested before @@ -81,6 +81,7 @@ class MessageInformationDataFactory @Inject constructor(private val session: Ses avatarUrl = event.senderInfo.avatarUrl, memberName = event.senderInfo.disambiguatedDisplayName, showInformation = showInformation, + forceShowTimestamp = vectorPreferences.alwaysShowTimeStamps(), orderedReactionList = event.annotations?.reactionsSummary // ?.filter { isSingleEmoji(it.key) } ?.map { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/AbsMessageItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/AbsMessageItem.kt index 7c2a6286b9..3fdd0f6f83 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/AbsMessageItem.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/AbsMessageItem.kt @@ -21,6 +21,8 @@ import android.view.View import android.widget.ImageView import android.widget.TextView import androidx.annotation.IdRes +import androidx.core.view.isInvisible +import androidx.core.view.isVisible import com.airbnb.epoxy.EpoxyAttribute import im.vector.app.R import im.vector.app.core.utils.DebouncedClickListener @@ -69,8 +71,14 @@ abstract class AbsMessageItem : AbsBaseMessageItem holder.avatarImageView.setOnClickListener(null) holder.memberNameView.setOnClickListener(null) holder.avatarImageView.visibility = View.GONE - holder.memberNameView.visibility = View.GONE - holder.timeView.visibility = View.GONE + if (attributes.informationData.forceShowTimestamp) { + holder.memberNameView.isInvisible = true + holder.timeView.isVisible = true + holder.timeView.text = attributes.informationData.time + } else { + holder.memberNameView.isVisible = false + holder.timeView.isVisible = false + } holder.avatarImageView.setOnLongClickListener(null) holder.memberNameView.setOnLongClickListener(null) } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageInformationData.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageInformationData.kt index b26c9315d4..fd8a9653e6 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageInformationData.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageInformationData.kt @@ -32,6 +32,7 @@ data class MessageInformationData( val avatarUrl: String?, val memberName: CharSequence? = null, val showInformation: Boolean = true, + val forceShowTimestamp: Boolean = false, /*List of reactions (emoji,count,isSelected)*/ val orderedReactionList: List? = null, val pollResponseAggregatedSummary: PollResponseData? = null, diff --git a/vector/src/main/res/xml/vector_settings_preferences.xml b/vector/src/main/res/xml/vector_settings_preferences.xml index ba8ba0d64b..29831f9de4 100644 --- a/vector/src/main/res/xml/vector_settings_preferences.xml +++ b/vector/src/main/res/xml/vector_settings_preferences.xml @@ -56,8 +56,7 @@ + android:title="@string/settings_always_show_timestamps" /> Date: Mon, 21 Sep 2020 16:03:59 +0200 Subject: [PATCH 18/18] Allow using an outdated homeserver, at user's risk (#1972) Just warn the user using a non blocking popup --- CHANGES.md | 1 + .../sdk/api/auth/data/LoginFlowResult.kt | 6 +-- .../auth/DefaultAuthenticationService.kt | 18 ++++----- .../app/features/login/LoginActivity.kt | 4 +- .../app/features/login/LoginViewModel.kt | 39 +++++++------------ .../signout/soft/SoftLogoutViewModel.kt | 35 +++++------------ vector/src/main/res/values/strings.xml | 1 + 7 files changed, 37 insertions(+), 67 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 5f61c3569d..7067edbb1b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,7 @@ Improvements 🙌: - Visually disable call buttons in menu and prohibit calling when permissions are insufficient (#2112) - Add a setting to show timestamp for all messages (#2123) - Use cache for user color + - Allow using an outdated homeserver, at user's risk (#1972) Bugfix 🐛: - Long message cannot be sent/takes infinite time & blocks other messages #1397 diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowResult.kt index c3686da7dd..13693e5bf1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowResult.kt @@ -17,13 +17,11 @@ package org.matrix.android.sdk.api.auth.data -// Either a list of supported login types, or an error if the homeserver is outdated sealed class LoginFlowResult { data class Success( val supportedLoginTypes: List, val isLoginAndRegistrationSupported: Boolean, - val homeServerUrl: String + val homeServerUrl: String, + val isOutdatedHomeserver: Boolean ) : LoginFlowResult() - - object OutdatedHomeserver : LoginFlowResult() } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt index 02c48dab07..3313a3e86f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt @@ -273,16 +273,16 @@ internal class DefaultAuthenticationService @Inject constructor( } private suspend fun getLoginFlowResult(authAPI: AuthAPI, versions: Versions, homeServerUrl: String): LoginFlowResult { - return if (versions.isSupportedBySdk()) { - // Get the login flow - val loginFlowResponse = executeRequest(null) { - apiCall = authAPI.getLoginFlows() - } - LoginFlowResult.Success(loginFlowResponse.flows.orEmpty().mapNotNull { it.type }, versions.isLoginAndRegistrationSupportedBySdk(), homeServerUrl) - } else { - // Not supported - LoginFlowResult.OutdatedHomeserver + // Get the login flow + val loginFlowResponse = executeRequest(null) { + apiCall = authAPI.getLoginFlows() } + return LoginFlowResult.Success( + loginFlowResponse.flows.orEmpty().mapNotNull { it.type }, + versions.isLoginAndRegistrationSupportedBySdk(), + homeServerUrl, + !versions.isSupportedBySdk() + ) } override fun getRegistrationWizard(): RegistrationWizard { diff --git a/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt b/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt index da63ca529d..735521fc3c 100644 --- a/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt +++ b/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt @@ -42,10 +42,10 @@ import im.vector.app.features.login.terms.LoginTermsFragment import im.vector.app.features.login.terms.LoginTermsFragmentArgument import im.vector.app.features.login.terms.toLocalizedLoginTerms import im.vector.app.features.pin.UnlockedActivity +import kotlinx.android.synthetic.main.activity_login.* import org.matrix.android.sdk.api.auth.registration.FlowResult import org.matrix.android.sdk.api.auth.registration.Stage import org.matrix.android.sdk.api.extensions.tryOrNull -import kotlinx.android.synthetic.main.activity_login.* import javax.inject.Inject /** @@ -127,7 +127,7 @@ open class LoginActivity : VectorBaseActivity(), ToolbarConfigurable, UnlockedAc is LoginViewEvents.OutdatedHomeserver -> { AlertDialog.Builder(this) .setTitle(R.string.login_error_outdated_homeserver_title) - .setMessage(R.string.login_error_outdated_homeserver_content) + .setMessage(R.string.login_error_outdated_homeserver_warning_content) .setPositiveButton(R.string.ok, null) .show() Unit diff --git a/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt b/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt index aed186bcd6..f986227961 100644 --- a/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt @@ -748,34 +748,21 @@ class LoginViewModel @AssistedInject constructor( else -> LoginMode.Unsupported } - if (loginMode == LoginMode.Password && !data.isLoginAndRegistrationSupported) { - notSupported() - } else { - // FIXME We should post a view event here normally? - setState { - copy( - asyncHomeServerLoginFlowRequest = Uninitialized, - homeServerUrl = data.homeServerUrl, - loginMode = loginMode, - loginModeSupportedTypes = data.supportedLoginTypes.toList() - ) - } + // FIXME We should post a view event here normally? + setState { + copy( + asyncHomeServerLoginFlowRequest = Uninitialized, + homeServerUrl = data.homeServerUrl, + loginMode = loginMode, + loginModeSupportedTypes = data.supportedLoginTypes.toList() + ) + } + if ((loginMode == LoginMode.Password && !data.isLoginAndRegistrationSupported) + || data.isOutdatedHomeserver) { + // Notify the UI + _viewEvents.post(LoginViewEvents.OutdatedHomeserver) } } - is LoginFlowResult.OutdatedHomeserver -> { - notSupported() - } - } - } - - private fun notSupported() { - // Notify the UI - _viewEvents.post(LoginViewEvents.OutdatedHomeserver) - - setState { - copy( - asyncHomeServerLoginFlowRequest = Uninitialized - ) } } }) diff --git a/vector/src/main/java/im/vector/app/features/signout/soft/SoftLogoutViewModel.kt b/vector/src/main/java/im/vector/app/features/signout/soft/SoftLogoutViewModel.kt index 94caf70a11..4f6110aab1 100644 --- a/vector/src/main/java/im/vector/app/features/signout/soft/SoftLogoutViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/signout/soft/SoftLogoutViewModel.kt @@ -25,16 +25,16 @@ import com.airbnb.mvrx.Uninitialized import com.airbnb.mvrx.ViewModelContext import com.squareup.inject.assisted.Assisted import com.squareup.inject.assisted.AssistedInject +import im.vector.app.core.di.ActiveSessionHolder +import im.vector.app.core.extensions.hasUnsavedKeys +import im.vector.app.core.platform.VectorViewModel +import im.vector.app.features.login.LoginMode import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.auth.AuthenticationService import org.matrix.android.sdk.api.auth.data.LoginFlowResult import org.matrix.android.sdk.api.auth.data.LoginFlowTypes import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.util.Cancelable -import im.vector.app.core.di.ActiveSessionHolder -import im.vector.app.core.extensions.hasUnsavedKeys -import im.vector.app.core.platform.VectorViewModel -import im.vector.app.features.login.LoginMode import timber.log.Timber /** @@ -102,7 +102,7 @@ class SoftLogoutViewModel @AssistedInject constructor( override fun onSuccess(data: LoginFlowResult) { when (data) { - is LoginFlowResult.Success -> { + is LoginFlowResult.Success -> { val loginMode = when { // SSO login is taken first data.supportedLoginTypes.contains(LoginFlowTypes.SSO) -> LoginMode.Sso @@ -110,29 +110,12 @@ class SoftLogoutViewModel @AssistedInject constructor( else -> LoginMode.Unsupported } - if (loginMode == LoginMode.Password && !data.isLoginAndRegistrationSupported) { - notSupported() - } else { - setState { - copy( - asyncHomeServerLoginFlowRequest = Success(loginMode) - ) - } + setState { + copy( + asyncHomeServerLoginFlowRequest = Success(loginMode) + ) } } - is LoginFlowResult.OutdatedHomeserver -> { - notSupported() - } - } - } - - private fun notSupported() { - // Should not happen since it's a re-logout - // Notify the UI - setState { - copy( - asyncHomeServerLoginFlowRequest = Fail(IllegalStateException("Should not happen")) - ) } } }) diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 3d945f3cfd..61580a66d4 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -1988,6 +1988,7 @@ The entered code is not correct. Please check. Outdated homeserver This homeserver is running too old a version to connect to. Ask your homeserver admin to upgrade. + This homeserver is running an old version. Ask your homeserver admin to upgrade. You can continue, but some features may not work correctly. Too many requests have been sent. You can retry in %1$d second…